----------------DEX_FILE--------------

Filename: DexFile
-----------DEFINED_CLASSES------------


________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/Manifest; )
@dalvik.annotation.InnerClass (accessFlags =25 name =permission )
public final class android.Manifest$permission extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACCESS_CHECKIN_PROPERTIES

public static final java.lang.String ACCESS_COARSE_LOCATION

public static final java.lang.String ACCESS_FINE_LOCATION

public static final java.lang.String ACCESS_LOCATION_EXTRA_COMMANDS

public static final java.lang.String ACCESS_MOCK_LOCATION

public static final java.lang.String ACCESS_NETWORK_STATE

public static final java.lang.String ACCESS_SURFACE_FLINGER

public static final java.lang.String ACCESS_WIFI_STATE

public static final java.lang.String ADD_SYSTEM_SERVICE

public static final java.lang.String BATTERY_STATS

public static final java.lang.String BLUETOOTH

public static final java.lang.String BLUETOOTH_ADMIN

public static final java.lang.String BRICK

public static final java.lang.String BROADCAST_PACKAGE_REMOVED

public static final java.lang.String BROADCAST_STICKY

public static final java.lang.String CALL_PHONE

public static final java.lang.String CALL_PRIVILEGED

public static final java.lang.String CAMERA

public static final java.lang.String CHANGE_COMPONENT_ENABLED_STATE

public static final java.lang.String CHANGE_CONFIGURATION

public static final java.lang.String CHANGE_NETWORK_STATE

public static final java.lang.String CHANGE_WIFI_STATE

public static final java.lang.String CLEAR_APP_CACHE

public static final java.lang.String CLEAR_APP_USER_DATA

public static final java.lang.String CONTROL_LOCATION_UPDATES

public static final java.lang.String DELETE_CACHE_FILES

public static final java.lang.String DELETE_PACKAGES

public static final java.lang.String DEVICE_POWER

public static final java.lang.String DIAGNOSTIC

public static final java.lang.String DISABLE_KEYGUARD

public static final java.lang.String DUMP

public static final java.lang.String EXPAND_STATUS_BAR

public static final java.lang.String FACTORY_TEST

public static final java.lang.String FLASHLIGHT

public static final java.lang.String FORCE_BACK

public static final java.lang.String FOTA_UPDATE

public static final java.lang.String GET_ACCOUNTS

public static final java.lang.String GET_PACKAGE_SIZE

public static final java.lang.String GET_TASKS

public static final java.lang.String HARDWARE_TEST

public static final java.lang.String INJECT_EVENTS

public static final java.lang.String INSTALL_PACKAGES

public static final java.lang.String INTERNAL_SYSTEM_WINDOW

public static final java.lang.String INTERNET

public static final java.lang.String MANAGE_APP_TOKENS

public static final java.lang.String MASTER_CLEAR

public static final java.lang.String MODIFY_AUDIO_SETTINGS

public static final java.lang.String MODIFY_PHONE_STATE

public static final java.lang.String MOUNT_UNMOUNT_FILESYSTEMS

public static final java.lang.String PERSISTENT_ACTIVITY

public static final java.lang.String PROCESS_OUTGOING_CALLS

public static final java.lang.String READ_CALENDAR

public static final java.lang.String READ_CONTACTS

public static final java.lang.String READ_FRAME_BUFFER

public static final java.lang.String READ_INPUT_STATE

public static final java.lang.String READ_LOGS

public static final java.lang.String READ_OWNER_DATA

public static final java.lang.String READ_PHONE_STATE

public static final java.lang.String READ_SMS

public static final java.lang.String READ_SYNC_SETTINGS

public static final java.lang.String READ_SYNC_STATS

public static final java.lang.String REBOOT

public static final java.lang.String RECEIVE_BOOT_COMPLETED

public static final java.lang.String RECEIVE_MMS

public static final java.lang.String RECEIVE_SMS

public static final java.lang.String RECEIVE_WAP_PUSH

public static final java.lang.String RECORD_AUDIO

public static final java.lang.String REORDER_TASKS

public static final java.lang.String RESTART_PACKAGES

public static final java.lang.String SEND_SMS

public static final java.lang.String SET_ACTIVITY_WATCHER

public static final java.lang.String SET_ALWAYS_FINISH

public static final java.lang.String SET_ANIMATION_SCALE

public static final java.lang.String SET_DEBUG_APP

public static final java.lang.String SET_ORIENTATION

public static final java.lang.String SET_PREFERRED_APPLICATIONS

public static final java.lang.String SET_PROCESS_FOREGROUND

public static final java.lang.String SET_PROCESS_LIMIT

public static final java.lang.String SET_TIME_ZONE

public static final java.lang.String SET_WALLPAPER

public static final java.lang.String SET_WALLPAPER_HINTS

public static final java.lang.String SIGNAL_PERSISTENT_PROCESSES

public static final java.lang.String STATUS_BAR

public static final java.lang.String SUBSCRIBED_FEEDS_READ

public static final java.lang.String SUBSCRIBED_FEEDS_WRITE

public static final java.lang.String SYSTEM_ALERT_WINDOW

public static final java.lang.String VIBRATE

public static final java.lang.String WAKE_LOCK

public static final java.lang.String WRITE_APN_SETTINGS

public static final java.lang.String WRITE_CALENDAR

public static final java.lang.String WRITE_CONTACTS

public static final java.lang.String WRITE_GSERVICES

public static final java.lang.String WRITE_OWNER_DATA

public static final java.lang.String WRITE_SETTINGS

public static final java.lang.String WRITE_SMS

public static final java.lang.String WRITE_SYNC_SETTINGS
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/Manifest$permission; )
public final class android.Manifest extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/R; )
@dalvik.annotation.InnerClass (accessFlags =25 name =anim )
public final class android.R$anim extends java.lang.Object

----------------FIELDS----------------

public static final int accelerate_decelerate_interpolator

public static final int accelerate_interpolator

public static final int decelerate_interpolator

public static final int fade_in

public static final int fade_out

public static final int slide_in_left

public static final int slide_out_right
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/R; )
@dalvik.annotation.InnerClass (accessFlags =25 name =array )
public final class android.R$array extends java.lang.Object

----------------FIELDS----------------

public static final int emailAddressTypes

public static final int imProtocols

public static final int organizationTypes

public static final int phoneTypes

public static final int postalAddressTypes
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =attr )
@dalvik.annotation.EnclosingClass (value =Landroid/R; )
public final class android.R$attr extends java.lang.Object

----------------FIELDS----------------

public static final int absListViewStyle

public static final int action

public static final int activityCloseEnterAnimation

public static final int activityCloseExitAnimation

public static final int activityOpenEnterAnimation

public static final int activityOpenExitAnimation

public static final int addStatesFromChildren

public static final int adjustViewBounds

public static final int alertDialogStyle

public static final int allowClearUserData

public static final int allowTaskReparenting

public static final int alphabeticShortcut

public static final int alwaysDrawnWithCache

public static final int alwaysRetainTaskState

public static final int angle

public static final int animation

public static final int animationCache

public static final int animationDuration

public static final int animationOrder

public static final int antialias

public static final int apiKey

public static final int authorities

public static final int autoCompleteTextViewStyle

public static final int autoLink

public static final int autoText

public static final int background

public static final int backgroundDimAmount

public static final int baselineAlignBottom

public static final int baselineAligned

public static final int baselineAlignedChildIndex

public static final int bottom

public static final int bottomBright

public static final int bottomDark

public static final int bottomLeftRadius

public static final int bottomMedium

public static final int bottomRightRadius

public static final int bufferType

public static final int button

public static final int buttonStyle

public static final int buttonStyleInset

public static final int buttonStyleSmall

public static final int buttonStyleToggle

public static final int cacheColorHint

public static final int capitalize

public static final int centerBright

public static final int centerColor

public static final int centerDark

public static final int centerMedium

public static final int centerX

public static final int centerY

public static final int checkBoxPreferenceStyle

public static final int checkMark

public static final int checkable

public static final int checkableBehavior

public static final int checkboxStyle

public static final int checked

public static final int checkedButton

public static final int childDivider

public static final int childIndicator

public static final int childIndicatorLeft

public static final int childIndicatorRight

public static final int choiceMode

public static final int clearTaskOnLaunch

public static final int clickable

public static final int clipChildren

public static final int clipOrientation

public static final int clipToPadding

public static final int collapseColumns

public static final int color

public static final int colorBackground

public static final int colorForeground

public static final int colorForegroundInverse

public static final int columnDelay

public static final int columnWidth

public static final int completionHint

public static final int completionHintView

public static final int completionThreshold

public static final int configChanges

public static final int constantSize

public static final int cropToPadding

public static final int cursorVisible

public static final int cycles

public static final int dashGap

public static final int dashWidth

public static final int data

public static final int debuggable

public static final int defaultValue

public static final int delay

public static final int dependency

public static final int descendantFocusability

public static final int description

public static final int dial

public static final int dialogIcon

public static final int dialogLayout

public static final int dialogMessage

public static final int dialogPreferenceStyle

public static final int dialogTitle

public static final int digits

public static final int direction

public static final int directionPriority

public static final int disableDependentsState

public static final int disabledAlpha

public static final int dither

public static final int divider

public static final int dividerHeight

public static final int drawSelectorOnTop

public static final int drawable

public static final int drawableBottom

public static final int drawableLeft

public static final int drawablePadding

public static final int drawableRight

public static final int drawableTop

public static final int drawingCacheQuality

public static final int dropDownHintAppearance

public static final int dropDownItemStyle

public static final int dropDownListViewStyle

public static final int dropDownSelector

public static final int duplicateParentState

public static final int duration

public static final int editTextPreferenceStyle

public static final int editTextStyle

public static final int editable

public static final int ellipsize

public static final int ems

public static final int enabled

public static final int endColor

public static final int endYear

public static final int entries

public static final int entryValues

public static final int excludeFromRecents

public static final int expandableListPreferredChildIndicatorLeft

public static final int expandableListPreferredChildIndicatorRight

public static final int expandableListPreferredChildPaddingLeft

public static final int expandableListPreferredItemIndicatorLeft

public static final int expandableListPreferredItemIndicatorRight

public static final int expandableListPreferredItemPaddingLeft

public static final int expandableListViewStyle

public static final int exported

public static final int factor

public static final int fadingEdge

public static final int fadingEdgeLength

public static final int fillAfter

public static final int fillBefore

public static final int fillViewport

public static final int filter

public static final int finishOnTaskLaunch

public static final int fitsSystemWindows

public static final int flipInterval

public static final int focusable

public static final int focusableInTouchMode

public static final int foreground

public static final int foregroundGravity

public static final int format

public static final int freezesText

public static final int fromAlpha

public static final int fromDegrees

public static final int fromXDelta

public static final int fromXScale

public static final int fromYDelta

public static final int fromYScale

public static final int fullBright

public static final int fullDark

public static final int functionalTest

public static final int galleryItemBackground

public static final int galleryStyle

public static final int gradientRadius

public static final int grantUriPermissions

public static final int gravity

public static final int gridViewStyle

public static final int groupIndicator

public static final int hand_hour

public static final int hand_minute

public static final int handleProfiling

public static final int hasCode

public static final int headerBackground

public static final int height

public static final int hint

public static final int horizontalDivider

public static final int horizontalSpacing

public static final int host

public static final int icon

public static final int id

public static final int ignoreGravity

public static final int imageButtonStyle

public static final int imageWellStyle

public static final int inAnimation

public static final int includeFontPadding

public static final int indeterminate

public static final int indeterminateBehavior

public static final int indeterminateDrawable

public static final int indeterminateDuration

public static final int indeterminateOnly

public static final int indicatorLeft

public static final int indicatorRight

public static final int inflatedId

public static final int initOrder

public static final int innerRadiusRatio

public static final int inputMethod

public static final int insetBottom

public static final int insetLeft

public static final int insetRight

public static final int insetTop

public static final int interpolator

public static final int isIndicator

public static final int itemBackground

public static final int itemIconDisabledAlpha

public static final int itemTextAppearance

public static final int keepScreenOn

public static final int key

public static final int keycode

public static final int label

public static final int launchMode

public static final int layout

public static final int layoutAnimation

public static final int layout_above

public static final int layout_alignBaseline

public static final int layout_alignBottom

public static final int layout_alignLeft

public static final int layout_alignParentBottom

public static final int layout_alignParentLeft

public static final int layout_alignParentRight

public static final int layout_alignParentTop

public static final int layout_alignRight

public static final int layout_alignTop

public static final int layout_alignWithParentIfMissing

public static final int layout_below

public static final int layout_centerHorizontal

public static final int layout_centerInParent

public static final int layout_centerVertical

public static final int layout_column

public static final int layout_gravity

public static final int layout_height

public static final int layout_margin

public static final int layout_marginBottom

public static final int layout_marginLeft

public static final int layout_marginRight

public static final int layout_marginTop

public static final int layout_scale

public static final int layout_span

public static final int layout_toLeftOf

public static final int layout_toRightOf

public static final int layout_weight

public static final int layout_width

public static final int layout_x

public static final int layout_y

public static final int left

public static final int lineSpacingExtra

public static final int lineSpacingMultiplier

public static final int lines

public static final int linksClickable

public static final int listChoiceIndicatorMultiple

public static final int listChoiceIndicatorSingle

public static final int listDivider

public static final int listPreferredItemHeight

public static final int listSelector

public static final int listSeparatorTextViewStyle

public static final int listViewStyle

public static final int listViewWhiteStyle

public static final int longClickable

public static final int manageSpaceActivity

public static final int mapViewStyle

public static final int max

public static final int maxEms

public static final int maxHeight

public static final int maxItemsPerRow

public static final int maxLength

public static final int maxLevel

public static final int maxLines

public static final int maxRows

public static final int maxWidth

public static final int measureAllChildren

public static final int menuCategory

public static final int mimeType

public static final int minEms

public static final int minHeight

public static final int minLevel

public static final int minLines

public static final int minSdkVersion

public static final int minWidth

public static final int mode

public static final int moreIcon

public static final int multiprocess

public static final int name

public static final int negativeButtonText

public static final int nextFocusDown

public static final int nextFocusLeft

public static final int nextFocusRight

public static final int nextFocusUp

public static final int numColumns

public static final int numStars

public static final int numeric

public static final int numericShortcut

public static final int oneshot

public static final int order

public static final int orderInCategory

public static final int orderingFromXml

public static final int orientation

public static final int outAnimation

public static final int padding

public static final int paddingBottom

public static final int paddingLeft

public static final int paddingRight

public static final int paddingTop

public static final int panelBackground

public static final int panelColorBackground

public static final int panelColorForeground

public static final int panelFullBackground

public static final int panelTextAppearance

public static final int password

public static final int path

public static final int pathPattern

public static final int pathPrefix

public static final int permission

public static final int permissionGroup

public static final int persistent

public static final int persistentDrawingCache

public static final int phoneNumber

public static final int pivotX

public static final int pivotY

public static final int popupBackground

public static final int popupWindowStyle

public static final int port

public static final int positiveButtonText

public static final int preferenceCategoryStyle

public static final int preferenceInformationStyle

public static final int preferenceLayoutChild

public static final int preferenceScreenStyle

public static final int preferenceStyle

public static final int priority

public static final int process

public static final int progress

public static final int progressBarStyle

public static final int progressBarStyleHorizontal

public static final int progressBarStyleLarge

public static final int progressBarStyleSmall

public static final int progressBarStyleSmallTitle

public static final int progressDrawable

public static final int prompt

public static final int protectionLevel

public static final int queryActionMsg

public static final int radioButtonStyle

public static final int radius

public static final int rating

public static final int ratingBarStyle

public static final int ratingBarStyleIndicator

public static final int ratingBarStyleSmall

public static final int readPermission

public static final int repeatCount

public static final int repeatMode

public static final int resource

public static final int right

public static final int ringtonePreferenceStyle

public static final int ringtoneType

public static final int rowDelay

public static final int rowHeight

public static final int saveEnabled

public static final int scaleGravity

public static final int scaleHeight

public static final int scaleType

public static final int scaleWidth

public static final int scheme

public static final int screenOrientation

public static final int scrollHorizontally

public static final int scrollViewStyle

public static final int scrollX

public static final int scrollY

public static final int scrollbarAlwaysDrawHorizontalTrack

public static final int scrollbarAlwaysDrawVerticalTrack

public static final int scrollbarSize

public static final int scrollbarStyle

public static final int scrollbarThumbHorizontal

public static final int scrollbarThumbVertical

public static final int scrollbarTrackHorizontal

public static final int scrollbarTrackVertical

public static final int scrollbars

public static final int scrollingCache

public static final int searchButtonText

public static final int searchMode

public static final int searchSuggestAuthority

public static final int searchSuggestIntentAction

public static final int searchSuggestIntentData

public static final int searchSuggestPath

public static final int searchSuggestSelection

public static final int secondaryProgress

public static final int seekBarStyle

public static final int selectAllOnFocus

public static final int selectable

public static final int shadowColor

public static final int shadowDx

public static final int shadowDy

public static final int shadowRadius

public static final int shape

public static final int shareInterpolator

public static final int sharedUserId

public static final int shouldDisableView

public static final int showDefault

public static final int showSilent

public static final int shrinkColumns

public static final int singleLine

public static final int soundEffectsEnabled

public static final int spacing

public static final int spinnerDropDownItemStyle

public static final int spinnerItemStyle

public static final int spinnerStyle

public static final int src

public static final int stackFromBottom

public static final int starStyle

public static final int startColor

public static final int startOffset

public static final int startYear

public static final int stateNotNeeded

public static final int state_above_anchor

public static final int state_active

public static final int state_checkable

public static final int state_checked

public static final int state_empty

public static final int state_enabled

public static final int state_expanded

public static final int state_first

public static final int state_focused

public static final int state_last

public static final int state_middle

public static final int state_pressed

public static final int state_selected

public static final int state_single

public static final int state_window_focused

public static final int stepSize

public static final int streamType

public static final int stretchColumns

public static final int stretchMode

public static final int suggestActionMsg

public static final int suggestActionMsgColumn

public static final int summary

public static final int summaryOff

public static final int summaryOn

public static final int syncable

public static final int tabWidgetStyle

public static final int tag

public static final int targetActivity

public static final int targetClass

public static final int targetPackage

public static final int taskAffinity

public static final int taskCloseEnterAnimation

public static final int taskCloseExitAnimation

public static final int taskOpenEnterAnimation

public static final int taskOpenExitAnimation

public static final int taskToBackEnterAnimation

public static final int taskToBackExitAnimation

public static final int taskToFrontEnterAnimation

public static final int taskToFrontExitAnimation

public static final int text

public static final int textAppearance

public static final int textAppearanceButton

public static final int textAppearanceInverse

public static final int textAppearanceLarge

public static final int textAppearanceLargeInverse

public static final int textAppearanceMedium

public static final int textAppearanceMediumInverse

public static final int textAppearanceSmall

public static final int textAppearanceSmallInverse

public static final int textCheckMark

public static final int textCheckMarkInverse

public static final int textColor

public static final int textColorHighlight

public static final int textColorHint

public static final int textColorHintInverse

public static final int textColorLink

public static final int textColorPrimary

public static final int textColorPrimaryDisableOnly

public static final int textColorPrimaryInverse

public static final int textColorPrimaryInverseNoDisable

public static final int textColorPrimaryNoDisable

public static final int textColorSecondary

public static final int textColorSecondaryInverse

public static final int textColorSecondaryInverseNoDisable

public static final int textColorSecondaryNoDisable

public static final int textColorTertiary

public static final int textColorTertiaryInverse

public static final int textFilterEnabled

public static final int textOff

public static final int textOn

public static final int textScaleX

public static final int textSize

public static final int textStyle

public static final int textViewStyle

public static final int theme

public static final int thicknessRatio

public static final int thumb

public static final int thumbOffset

public static final int tileMode

public static final int tint

public static final int title

public static final int titleCondensed

public static final int toAlpha

public static final int toDegrees

public static final int toXDelta

public static final int toXScale

public static final int toYDelta

public static final int toYScale

public static final int top

public static final int topBright

public static final int topDark

public static final int topLeftRadius

public static final int topRightRadius

public static final int transcriptMode

public static final int type

public static final int typeface

public static final int unselectedAlpha

public static final int useLevel

public static final int value

public static final int variablePadding

public static final int versionCode

public static final int versionName

public static final int verticalDivider

public static final int verticalSpacing

public static final int visibility

public static final int visible

public static final int webViewStyle

public static final int weightSum

public static final int widgetLayout

public static final int width

public static final int windowAnimationStyle

public static final int windowBackground

public static final int windowContentOverlay

public static final int windowEnterAnimation

public static final int windowExitAnimation

public static final int windowFrame

public static final int windowFullscreen

public static final int windowHideAnimation

public static final int windowIsFloating

public static final int windowIsTranslucent

public static final int windowNoTitle

public static final int windowShowAnimation

public static final int windowTitleBackgroundStyle

public static final int windowTitleSize

public static final int windowTitleStyle

public static final int writePermission

public static final int x

public static final int y

public static final int yesNoPreferenceStyle

public static final int zAdjustment
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/R; )
@dalvik.annotation.InnerClass (accessFlags =25 name =color )
public final class android.R$color extends java.lang.Object

----------------FIELDS----------------

public static final int background_dark

public static final int background_light

public static final int black

public static final int darker_gray

public static final int primary_text_dark

public static final int primary_text_dark_nodisable

public static final int primary_text_light

public static final int primary_text_light_nodisable

public static final int secondary_text_dark

public static final int secondary_text_dark_nodisable

public static final int secondary_text_light

public static final int secondary_text_light_nodisable

public static final int tab_indicator_text

public static final int tertiary_text_dark

public static final int tertiary_text_light

public static final int transparent

public static final int white

public static final int widget_edittext_dark
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =dimen )
@dalvik.annotation.EnclosingClass (value =Landroid/R; )
public final class android.R$dimen extends java.lang.Object

----------------FIELDS----------------

public static final int app_icon_size

public static final int thumbnail_height

public static final int thumbnail_width
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/R; )
@dalvik.annotation.InnerClass (accessFlags =25 name =drawable )
public final class android.R$drawable extends java.lang.Object

----------------FIELDS----------------

public static final int alert_dark_frame

public static final int alert_light_frame

public static final int arrow_down_float

public static final int arrow_up_float

public static final int bottom_bar

public static final int btn_default

public static final int btn_default_small

public static final int btn_dialog

public static final int btn_dropdown

public static final int btn_minus

public static final int btn_plus

public static final int btn_radio

public static final int btn_star

public static final int btn_star_big_off

public static final int btn_star_big_on

public static final int button_onoff_indicator_off

public static final int button_onoff_indicator_on

public static final int checkbox_off_background

public static final int checkbox_on_background

public static final int dialog_frame

public static final int divider_horizontal_bright

public static final int divider_horizontal_dark

public static final int divider_horizontal_dim_dark

public static final int divider_horizontal_textfield

public static final int edit_text

public static final int editbox_background

public static final int editbox_background_normal

public static final int editbox_dropdown_dark_frame

public static final int editbox_dropdown_light_frame

public static final int gallery_thumb

public static final int ic_delete

public static final int ic_dialog_alert

public static final int ic_dialog_dialer

public static final int ic_dialog_email

public static final int ic_dialog_info

public static final int ic_dialog_map

public static final int ic_input_add

public static final int ic_input_delete

public static final int ic_input_get

public static final int ic_lock_idle_alarm

public static final int ic_lock_idle_charging

public static final int ic_lock_idle_lock

public static final int ic_lock_idle_low_battery

public static final int ic_lock_lock

public static final int ic_lock_power_off

public static final int ic_lock_silent_mode

public static final int ic_lock_silent_mode_off

public static final int ic_media_ff

public static final int ic_media_next

public static final int ic_media_pause

public static final int ic_media_play

public static final int ic_media_previous

public static final int ic_media_rew

public static final int ic_menu_add

public static final int ic_menu_agenda

public static final int ic_menu_always_landscape_portrait

public static final int ic_menu_call

public static final int ic_menu_camera

public static final int ic_menu_close_clear_cancel

public static final int ic_menu_compass

public static final int ic_menu_crop

public static final int ic_menu_day

public static final int ic_menu_delete

public static final int ic_menu_directions

public static final int ic_menu_edit

public static final int ic_menu_gallery

public static final int ic_menu_help

public static final int ic_menu_info_details

public static final int ic_menu_manage

public static final int ic_menu_mapmode

public static final int ic_menu_month

public static final int ic_menu_more

public static final int ic_menu_my_calendar

public static final int ic_menu_mylocation

public static final int ic_menu_myplaces

public static final int ic_menu_preferences

public static final int ic_menu_recent_history

public static final int ic_menu_report_image

public static final int ic_menu_revert

public static final int ic_menu_rotate

public static final int ic_menu_save

public static final int ic_menu_search

public static final int ic_menu_send

public static final int ic_menu_set_as

public static final int ic_menu_share

public static final int ic_menu_slideshow

public static final int ic_menu_sort_alphabetically

public static final int ic_menu_sort_by_size

public static final int ic_menu_today

public static final int ic_menu_upload

public static final int ic_menu_upload_you_tube

public static final int ic_menu_view

public static final int ic_menu_week

public static final int ic_menu_zoom

public static final int ic_notification_clear_all

public static final int ic_notification_overlay

public static final int ic_partial_secure

public static final int ic_popup_disk_full

public static final int ic_popup_reminder

public static final int ic_popup_sync

public static final int ic_search_category_default

public static final int ic_secure

public static final int list_selector_background

public static final int menu_frame

public static final int menu_full_frame

public static final int menuitem_background

public static final int picture_frame

public static final int presence_away

public static final int presence_busy

public static final int presence_invisible

public static final int presence_offline

public static final int presence_online

public static final int progress_horizontal

public static final int progress_indeterminate_horizontal

public static final int radiobutton_off_background

public static final int radiobutton_on_background

public static final int screen_background_dark

public static final int screen_background_light

public static final int spinner_background

public static final int spinner_dropdown_background

public static final int star_big_off

public static final int star_big_on

public static final int star_off

public static final int star_on

public static final int stat_notify_call_mute

public static final int stat_notify_chat

public static final int stat_notify_error

public static final int stat_notify_missed_call

public static final int stat_notify_more

public static final int stat_notify_sdcard

public static final int stat_notify_sdcard_usb

public static final int stat_notify_sync

public static final int stat_notify_sync_noanim

public static final int stat_notify_voicemail

public static final int stat_sys_data_bluetooth

public static final int stat_sys_download

public static final int stat_sys_download_done

public static final int stat_sys_headset

public static final int stat_sys_phone_call

public static final int stat_sys_phone_call_forward

public static final int stat_sys_phone_call_on_hold

public static final int stat_sys_speakerphone

public static final int stat_sys_upload

public static final int stat_sys_upload_done

public static final int stat_sys_warning

public static final int status_bar_item_app_background

public static final int status_bar_item_background

public static final int sym_action_call

public static final int sym_action_chat

public static final int sym_action_email

public static final int sym_call_incoming

public static final int sym_call_missed

public static final int sym_call_outgoing

public static final int sym_contact_card

public static final int sym_def_app_icon

public static final int title_bar

public static final int toast_frame

public static final int zoom_plate
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =id )
@dalvik.annotation.EnclosingClass (value =Landroid/R; )
public final class android.R$id extends java.lang.Object

----------------FIELDS----------------

public static final int background

public static final int button1

public static final int button2

public static final int button3

public static final int checkbox

public static final int content

public static final int edit

public static final int empty

public static final int hint

public static final int icon

public static final int icon1

public static final int icon2

public static final int input

public static final int list

public static final int message

public static final int primary

public static final int progress

public static final int secondaryProgress

public static final int selectedIcon

public static final int summary

public static final int tabcontent

public static final int tabhost

public static final int tabs

public static final int text1

public static final int text2

public static final int title

public static final int toggle

public static final int widget_frame
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/R; )
@dalvik.annotation.InnerClass (accessFlags =25 name =layout )
public final class android.R$layout extends java.lang.Object

----------------FIELDS----------------

public static final int activity_list_item

public static final int browser_link_context_header

public static final int expandable_list_content

public static final int preference_category

public static final int select_dialog_item

public static final int select_dialog_multichoice

public static final int select_dialog_singlechoice

public static final int simple_dropdown_item_1line

public static final int simple_expandable_list_item_1

public static final int simple_expandable_list_item_2

public static final int simple_gallery_item

public static final int simple_list_item_1

public static final int simple_list_item_2

public static final int simple_list_item_checked

public static final int simple_list_item_multiple_choice

public static final int simple_list_item_single_choice

public static final int simple_spinner_dropdown_item

public static final int simple_spinner_item

public static final int test_list_item

public static final int two_line_list_item
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =plurals )
@dalvik.annotation.EnclosingClass (value =Landroid/R; )
public final class android.R$plurals extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =raw )
@dalvik.annotation.EnclosingClass (value =Landroid/R; )
public final class android.R$raw extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =string )
@dalvik.annotation.EnclosingClass (value =Landroid/R; )
public final class android.R$string extends java.lang.Object

----------------FIELDS----------------

public static final int VideoView_error_button

public static final int VideoView_error_text_unknown

public static final int VideoView_error_title

public static final int cancel

public static final int copy

public static final int copyUrl

public static final int cut

public static final int defaultMsisdnAlphaTag

public static final int defaultVoiceMailAlphaTag

public static final int emptyPhoneNumber

public static final int httpErrorBadUrl

public static final int httpErrorUnsupportedScheme

public static final int no

public static final int ok

public static final int paste

public static final int search_go

public static final int selectAll

public static final int unknownName

public static final int untitled

public static final int yes
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/R; )
@dalvik.annotation.InnerClass (accessFlags =25 name =style )
public final class android.R$style extends java.lang.Object

----------------FIELDS----------------

public static final int Animation

public static final int Animation_Activity

public static final int Animation_Dialog

public static final int Animation_Toast

public static final int Animation_Translucent

public static final int MediaButton

public static final int MediaButton_Ffwd

public static final int MediaButton_Next

public static final int MediaButton_Pause

public static final int MediaButton_Play

public static final int MediaButton_Previous

public static final int MediaButton_Rew

public static final int TextAppearance

public static final int TextAppearance_DialogWindowTitle

public static final int TextAppearance_Inverse

public static final int TextAppearance_Large

public static final int TextAppearance_Large_Inverse

public static final int TextAppearance_Medium

public static final int TextAppearance_Medium_Inverse

public static final int TextAppearance_Small

public static final int TextAppearance_Small_Inverse

public static final int TextAppearance_Theme

public static final int TextAppearance_Theme_Dialog

public static final int TextAppearance_Widget

public static final int TextAppearance_Widget_Button

public static final int TextAppearance_Widget_DropDownHint

public static final int TextAppearance_Widget_DropDownItem

public static final int TextAppearance_Widget_EditText

public static final int TextAppearance_Widget_IconMenu_Item

public static final int TextAppearance_Widget_TabWidget

public static final int TextAppearance_Widget_TextView

public static final int TextAppearance_Widget_TextView_PopupMenu

public static final int TextAppearance_Widget_TextView_SpinnerItem

public static final int TextAppearance_WindowTitle

public static final int Theme

public static final int Theme_Black

public static final int Theme_Black_NoTitleBar

public static final int Theme_Black_NoTitleBar_Fullscreen

public static final int Theme_Dialog

public static final int Theme_Light

public static final int Theme_Light_NoTitleBar

public static final int Theme_Light_NoTitleBar_Fullscreen

public static final int Theme_NoTitleBar

public static final int Theme_NoTitleBar_Fullscreen

public static final int Theme_Translucent

public static final int Theme_Translucent_NoTitleBar

public static final int Theme_Translucent_NoTitleBar_Fullscreen

public static final int Widget

public static final int Widget_AbsListView

public static final int Widget_AutoCompleteTextView

public static final int Widget_Button

public static final int Widget_Button_Inset

public static final int Widget_Button_Small

public static final int Widget_Button_Toggle

public static final int Widget_CompoundButton

public static final int Widget_CompoundButton_CheckBox

public static final int Widget_CompoundButton_RadioButton

public static final int Widget_CompoundButton_Star

public static final int Widget_DropDownItem

public static final int Widget_DropDownItem_Spinner

public static final int Widget_EditText

public static final int Widget_ExpandableListView

public static final int Widget_Gallery

public static final int Widget_GridView

public static final int Widget_ImageButton

public static final int Widget_ImageWell

public static final int Widget_ListView

public static final int Widget_ListView_DropDown

public static final int Widget_ListView_Menu

public static final int Widget_ListView_White

public static final int Widget_PopupWindow

public static final int Widget_ProgressBar

public static final int Widget_ProgressBar_Horizontal

public static final int Widget_ProgressBar_Large

public static final int Widget_ProgressBar_Small

public static final int Widget_RatingBar

public static final int Widget_ScrollView

public static final int Widget_SeekBar

public static final int Widget_Spinner

public static final int Widget_TabWidget

public static final int Widget_TextView

public static final int Widget_TextView_PopupMenu

public static final int Widget_TextView_SpinnerItem

public static final int Widget_WebView
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =styleable )
@dalvik.annotation.EnclosingClass (value =Landroid/R; )
public final class android.R$styleable extends java.lang.Object

----------------FIELDS----------------

public static final int[] AbsListView

public static final int AbsListView_cacheColorHint

public static final int AbsListView_drawSelectorOnTop

public static final int AbsListView_listSelector

public static final int AbsListView_scrollingCache

public static final int AbsListView_stackFromBottom

public static final int AbsListView_textFilterEnabled

public static final int AbsListView_transcriptMode

public static final int[] AbsSpinner

public static final int AbsSpinner_entries

public static final int[] AbsoluteLayout_Layout

public static final int AbsoluteLayout_Layout_layout_x

public static final int AbsoluteLayout_Layout_layout_y

public static final int[] AccelerateInterpolator

public static final int AccelerateInterpolator_factor

public static final int[] AlertDialog

public static final int AlertDialog_bottomBright

public static final int AlertDialog_bottomDark

public static final int AlertDialog_bottomMedium

public static final int AlertDialog_centerBright

public static final int AlertDialog_centerDark

public static final int AlertDialog_centerMedium

public static final int AlertDialog_fullBright

public static final int AlertDialog_fullDark

public static final int AlertDialog_topBright

public static final int AlertDialog_topDark

public static final int[] AlphaAnimation

public static final int AlphaAnimation_fromAlpha

public static final int AlphaAnimation_toAlpha

public static final int[] AnalogClock

public static final int AnalogClock_dial

public static final int AnalogClock_hand_hour

public static final int AnalogClock_hand_minute

public static final int[] AndroidManifest

public static final int[] AndroidManifestAction

public static final int AndroidManifestAction_name

public static final int[] AndroidManifestActivity

public static final int[] AndroidManifestActivityAlias

public static final int AndroidManifestActivityAlias_enabled

public static final int AndroidManifestActivityAlias_exported

public static final int AndroidManifestActivityAlias_icon

public static final int AndroidManifestActivityAlias_label

public static final int AndroidManifestActivityAlias_name

public static final int AndroidManifestActivityAlias_permission

public static final int AndroidManifestActivityAlias_targetActivity

public static final int AndroidManifestActivity_allowTaskReparenting

public static final int AndroidManifestActivity_alwaysRetainTaskState

public static final int AndroidManifestActivity_clearTaskOnLaunch

public static final int AndroidManifestActivity_configChanges

public static final int AndroidManifestActivity_enabled

public static final int AndroidManifestActivity_excludeFromRecents

public static final int AndroidManifestActivity_exported

public static final int AndroidManifestActivity_finishOnTaskLaunch

public static final int AndroidManifestActivity_icon

public static final int AndroidManifestActivity_label

public static final int AndroidManifestActivity_launchMode

public static final int AndroidManifestActivity_multiprocess

public static final int AndroidManifestActivity_name

public static final int AndroidManifestActivity_permission

public static final int AndroidManifestActivity_process

public static final int AndroidManifestActivity_screenOrientation

public static final int AndroidManifestActivity_stateNotNeeded

public static final int AndroidManifestActivity_taskAffinity

public static final int AndroidManifestActivity_theme

public static final int[] AndroidManifestApplication

public static final int AndroidManifestApplication_allowClearUserData

public static final int AndroidManifestApplication_allowTaskReparenting

public static final int AndroidManifestApplication_debuggable

public static final int AndroidManifestApplication_description

public static final int AndroidManifestApplication_enabled

public static final int AndroidManifestApplication_hasCode

public static final int AndroidManifestApplication_icon

public static final int AndroidManifestApplication_label

public static final int AndroidManifestApplication_manageSpaceActivity

public static final int AndroidManifestApplication_name

public static final int AndroidManifestApplication_permission

public static final int AndroidManifestApplication_persistent

public static final int AndroidManifestApplication_process

public static final int AndroidManifestApplication_taskAffinity

public static final int AndroidManifestApplication_theme

public static final int[] AndroidManifestCategory

public static final int AndroidManifestCategory_name

public static final int[] AndroidManifestData

public static final int AndroidManifestData_host

public static final int AndroidManifestData_mimeType

public static final int AndroidManifestData_path

public static final int AndroidManifestData_pathPattern

public static final int AndroidManifestData_pathPrefix

public static final int AndroidManifestData_port

public static final int AndroidManifestData_scheme

public static final int[] AndroidManifestGrantUriPermission

public static final int AndroidManifestGrantUriPermission_path

public static final int AndroidManifestGrantUriPermission_pathPattern

public static final int AndroidManifestGrantUriPermission_pathPrefix

public static final int[] AndroidManifestInstrumentation

public static final int AndroidManifestInstrumentation_functionalTest

public static final int AndroidManifestInstrumentation_handleProfiling

public static final int AndroidManifestInstrumentation_icon

public static final int AndroidManifestInstrumentation_label

public static final int AndroidManifestInstrumentation_name

public static final int AndroidManifestInstrumentation_targetPackage

public static final int[] AndroidManifestIntentFilter

public static final int AndroidManifestIntentFilter_icon

public static final int AndroidManifestIntentFilter_label

public static final int AndroidManifestIntentFilter_priority

public static final int[] AndroidManifestMetaData

public static final int AndroidManifestMetaData_name

public static final int AndroidManifestMetaData_resource

public static final int AndroidManifestMetaData_value

public static final int[] AndroidManifestPermission

public static final int[] AndroidManifestPermissionGroup

public static final int AndroidManifestPermissionGroup_description

public static final int AndroidManifestPermissionGroup_icon

public static final int AndroidManifestPermissionGroup_label

public static final int AndroidManifestPermissionGroup_name

public static final int[] AndroidManifestPermissionTree

public static final int AndroidManifestPermissionTree_icon

public static final int AndroidManifestPermissionTree_label

public static final int AndroidManifestPermissionTree_name

public static final int AndroidManifestPermission_description

public static final int AndroidManifestPermission_icon

public static final int AndroidManifestPermission_label

public static final int AndroidManifestPermission_name

public static final int AndroidManifestPermission_permissionGroup

public static final int AndroidManifestPermission_protectionLevel

public static final int[] AndroidManifestProvider

public static final int AndroidManifestProvider_authorities

public static final int AndroidManifestProvider_enabled

public static final int AndroidManifestProvider_exported

public static final int AndroidManifestProvider_grantUriPermissions

public static final int AndroidManifestProvider_icon

public static final int AndroidManifestProvider_initOrder

public static final int AndroidManifestProvider_label

public static final int AndroidManifestProvider_multiprocess

public static final int AndroidManifestProvider_name

public static final int AndroidManifestProvider_permission

public static final int AndroidManifestProvider_process

public static final int AndroidManifestProvider_readPermission

public static final int AndroidManifestProvider_syncable

public static final int AndroidManifestProvider_writePermission

public static final int[] AndroidManifestReceiver

public static final int AndroidManifestReceiver_enabled

public static final int AndroidManifestReceiver_exported

public static final int AndroidManifestReceiver_icon

public static final int AndroidManifestReceiver_label

public static final int AndroidManifestReceiver_name

public static final int AndroidManifestReceiver_permission

public static final int AndroidManifestReceiver_process

public static final int[] AndroidManifestService

public static final int AndroidManifestService_enabled

public static final int AndroidManifestService_exported

public static final int AndroidManifestService_icon

public static final int AndroidManifestService_label

public static final int AndroidManifestService_name

public static final int AndroidManifestService_permission

public static final int AndroidManifestService_process

public static final int[] AndroidManifestUsesLibrary

public static final int AndroidManifestUsesLibrary_name

public static final int[] AndroidManifestUsesPermission

public static final int AndroidManifestUsesPermission_name

public static final int[] AndroidManifestUsesSdk

public static final int AndroidManifestUsesSdk_minSdkVersion

public static final int AndroidManifest_sharedUserId

public static final int AndroidManifest_versionCode

public static final int AndroidManifest_versionName

public static final int[] Animation

public static final int[] AnimationDrawable

public static final int[] AnimationDrawableItem

public static final int AnimationDrawableItem_drawable

public static final int AnimationDrawableItem_duration

public static final int AnimationDrawable_oneshot

public static final int AnimationDrawable_variablePadding

public static final int AnimationDrawable_visible

public static final int[] AnimationSet

public static final int AnimationSet_shareInterpolator

public static final int Animation_duration

public static final int Animation_fillAfter

public static final int Animation_fillBefore

public static final int Animation_interpolator

public static final int Animation_repeatCount

public static final int Animation_repeatMode

public static final int Animation_startOffset

public static final int Animation_zAdjustment

public static final int[] AutoCompleteTextView

public static final int AutoCompleteTextView_completionHint

public static final int AutoCompleteTextView_completionHintView

public static final int AutoCompleteTextView_completionThreshold

public static final int AutoCompleteTextView_dropDownSelector

public static final int[] BitmapDrawable

public static final int BitmapDrawable_antialias

public static final int BitmapDrawable_dither

public static final int BitmapDrawable_filter

public static final int BitmapDrawable_gravity

public static final int BitmapDrawable_src

public static final int BitmapDrawable_tileMode

public static final int[] Button

public static final int[] CheckBoxPreference

public static final int CheckBoxPreference_disableDependentsState

public static final int CheckBoxPreference_summaryOff

public static final int CheckBoxPreference_summaryOn

public static final int[] CheckedTextView

public static final int CheckedTextView_checkMark

public static final int CheckedTextView_checked

public static final int[] Chronometer

public static final int Chronometer_format

public static final int[] ClipDrawable

public static final int ClipDrawable_clipOrientation

public static final int ClipDrawable_drawable

public static final int ClipDrawable_gravity

public static final int[] ColorDrawable

public static final int ColorDrawable_color

public static final int[] CompoundButton

public static final int CompoundButton_button

public static final int CompoundButton_checked

public static final int[] CycleInterpolator

public static final int CycleInterpolator_cycles

public static final int[] DatePicker

public static final int DatePicker_endYear

public static final int DatePicker_startYear

public static final int[] DecelerateInterpolator

public static final int DecelerateInterpolator_factor

public static final int[] DialogPreference

public static final int DialogPreference_dialogIcon

public static final int DialogPreference_dialogLayout

public static final int DialogPreference_dialogMessage

public static final int DialogPreference_dialogTitle

public static final int DialogPreference_negativeButtonText

public static final int DialogPreference_positiveButtonText

public static final int[] Drawable

public static final int[] DrawableCorners

public static final int DrawableCorners_bottomLeftRadius

public static final int DrawableCorners_bottomRightRadius

public static final int DrawableCorners_radius

public static final int DrawableCorners_topLeftRadius

public static final int DrawableCorners_topRightRadius

public static final int[] DrawableStates

public static final int DrawableStates_state_active

public static final int DrawableStates_state_checkable

public static final int DrawableStates_state_checked

public static final int DrawableStates_state_enabled

public static final int DrawableStates_state_first

public static final int DrawableStates_state_focused

public static final int DrawableStates_state_last

public static final int DrawableStates_state_middle

public static final int DrawableStates_state_pressed

public static final int DrawableStates_state_selected

public static final int DrawableStates_state_single

public static final int DrawableStates_state_window_focused

public static final int Drawable_visible

public static final int[] EditText

public static final int[] ExpandableListChildIndicatorState

public static final int ExpandableListChildIndicatorState_state_last

public static final int[] ExpandableListGroupIndicatorState

public static final int ExpandableListGroupIndicatorState_state_empty

public static final int ExpandableListGroupIndicatorState_state_expanded

public static final int[] ExpandableListView

public static final int ExpandableListView_childDivider

public static final int ExpandableListView_childIndicator

public static final int ExpandableListView_childIndicatorLeft

public static final int ExpandableListView_childIndicatorRight

public static final int ExpandableListView_groupIndicator

public static final int ExpandableListView_indicatorLeft

public static final int ExpandableListView_indicatorRight

public static final int[] FrameLayout

public static final int[] FrameLayout_Layout

public static final int FrameLayout_Layout_layout_gravity

public static final int FrameLayout_foreground

public static final int FrameLayout_foregroundGravity

public static final int FrameLayout_measureAllChildren

public static final int[] Gallery

public static final int Gallery_animationDuration

public static final int Gallery_gravity

public static final int Gallery_spacing

public static final int Gallery_unselectedAlpha

public static final int[] GradientDrawable

public static final int[] GradientDrawableGradient

public static final int GradientDrawableGradient_angle

public static final int GradientDrawableGradient_centerColor

public static final int GradientDrawableGradient_centerX

public static final int GradientDrawableGradient_centerY

public static final int GradientDrawableGradient_endColor

public static final int GradientDrawableGradient_gradientRadius

public static final int GradientDrawableGradient_startColor

public static final int GradientDrawableGradient_type

public static final int GradientDrawableGradient_useLevel

public static final int[] GradientDrawablePadding

public static final int GradientDrawablePadding_bottom

public static final int GradientDrawablePadding_left

public static final int GradientDrawablePadding_right

public static final int GradientDrawablePadding_top

public static final int[] GradientDrawableSize

public static final int GradientDrawableSize_height

public static final int GradientDrawableSize_width

public static final int[] GradientDrawableSolid

public static final int GradientDrawableSolid_color

public static final int[] GradientDrawableStroke

public static final int GradientDrawableStroke_color

public static final int GradientDrawableStroke_dashGap

public static final int GradientDrawableStroke_dashWidth

public static final int GradientDrawableStroke_width

public static final int GradientDrawable_innerRadiusRatio

public static final int GradientDrawable_shape

public static final int GradientDrawable_thicknessRatio

public static final int GradientDrawable_useLevel

public static final int GradientDrawable_visible

public static final int[] GridLayoutAnimation

public static final int GridLayoutAnimation_columnDelay

public static final int GridLayoutAnimation_direction

public static final int GridLayoutAnimation_directionPriority

public static final int GridLayoutAnimation_rowDelay

public static final int[] GridView

public static final int GridView_columnWidth

public static final int GridView_gravity

public static final int GridView_horizontalSpacing

public static final int GridView_numColumns

public static final int GridView_stretchMode

public static final int GridView_verticalSpacing

public static final int[] IconMenuView

public static final int IconMenuView_maxItemsPerRow

public static final int IconMenuView_maxRows

public static final int IconMenuView_moreIcon

public static final int IconMenuView_rowHeight

public static final int[] ImageSwitcher

public static final int[] ImageView

public static final int ImageView_adjustViewBounds

public static final int ImageView_baselineAlignBottom

public static final int ImageView_cropToPadding

public static final int ImageView_maxHeight

public static final int ImageView_maxWidth

public static final int ImageView_scaleType

public static final int ImageView_src

public static final int ImageView_tint

public static final int[] InsetDrawable

public static final int InsetDrawable_drawable

public static final int InsetDrawable_insetBottom

public static final int InsetDrawable_insetLeft

public static final int InsetDrawable_insetRight

public static final int InsetDrawable_insetTop

public static final int InsetDrawable_visible

public static final int[] Intent

public static final int[] IntentCategory

public static final int IntentCategory_name

public static final int[] IntentExtra

public static final int IntentExtra_name

public static final int IntentExtra_value

public static final int Intent_action

public static final int Intent_data

public static final int Intent_mimeType

public static final int Intent_targetClass

public static final int Intent_targetPackage

public static final int[] LayerDrawableItem

public static final int LayerDrawableItem_bottom

public static final int LayerDrawableItem_drawable

public static final int LayerDrawableItem_id

public static final int LayerDrawableItem_left

public static final int LayerDrawableItem_right

public static final int LayerDrawableItem_top

public static final int[] LayoutAnimation

public static final int LayoutAnimation_animation

public static final int LayoutAnimation_animationOrder

public static final int LayoutAnimation_delay

public static final int LayoutAnimation_interpolator

public static final int[] LevelListDrawableItem

public static final int LevelListDrawableItem_drawable

public static final int LevelListDrawableItem_maxLevel

public static final int LevelListDrawableItem_minLevel

public static final int[] LinearLayout

public static final int[] LinearLayout_Layout

public static final int LinearLayout_Layout_layout_gravity

public static final int LinearLayout_Layout_layout_height

public static final int LinearLayout_Layout_layout_weight

public static final int LinearLayout_Layout_layout_width

public static final int LinearLayout_baselineAligned

public static final int LinearLayout_baselineAlignedChildIndex

public static final int LinearLayout_gravity

public static final int LinearLayout_orientation

public static final int LinearLayout_weightSum

public static final int[] ListPreference

public static final int ListPreference_entries

public static final int ListPreference_entryValues

public static final int[] ListView

public static final int ListView_choiceMode

public static final int ListView_divider

public static final int ListView_dividerHeight

public static final int ListView_entries

public static final int[] MapView

public static final int MapView_apiKey

public static final int[] Menu

public static final int[] MenuGroup

public static final int MenuGroup_checkableBehavior

public static final int MenuGroup_enabled

public static final int MenuGroup_id

public static final int MenuGroup_menuCategory

public static final int MenuGroup_orderInCategory

public static final int MenuGroup_visible

public static final int[] MenuItem

public static final int[] MenuItemCheckedFocusedState

public static final int MenuItemCheckedFocusedState_state_checkable

public static final int MenuItemCheckedFocusedState_state_checked

public static final int MenuItemCheckedFocusedState_state_focused

public static final int[] MenuItemCheckedState

public static final int MenuItemCheckedState_state_checkable

public static final int MenuItemCheckedState_state_checked

public static final int[] MenuItemUncheckedFocusedState

public static final int MenuItemUncheckedFocusedState_state_checkable

public static final int MenuItemUncheckedFocusedState_state_focused

public static final int[] MenuItemUncheckedState

public static final int MenuItemUncheckedState_state_checkable

public static final int MenuItem_alphabeticShortcut

public static final int MenuItem_checkable

public static final int MenuItem_checked

public static final int MenuItem_enabled

public static final int MenuItem_icon

public static final int MenuItem_id

public static final int MenuItem_menuCategory

public static final int MenuItem_numericShortcut

public static final int MenuItem_orderInCategory

public static final int MenuItem_title

public static final int MenuItem_titleCondensed

public static final int MenuItem_visible

public static final int[] MenuView

public static final int MenuView_headerBackground

public static final int MenuView_horizontalDivider

public static final int MenuView_itemBackground

public static final int MenuView_itemIconDisabledAlpha

public static final int MenuView_itemTextAppearance

public static final int MenuView_verticalDivider

public static final int MenuView_windowAnimationStyle

public static final int[] PopupWindow

public static final int[] PopupWindowBackgroundState

public static final int PopupWindowBackgroundState_state_above_anchor

public static final int PopupWindow_popupBackground

public static final int[] Preference

public static final int[] PreferenceGroup

public static final int PreferenceGroup_orderingFromXml

public static final int Preference_defaultValue

public static final int Preference_dependency

public static final int Preference_enabled

public static final int Preference_key

public static final int Preference_layout

public static final int Preference_order

public static final int Preference_persistent

public static final int Preference_selectable

public static final int Preference_shouldDisableView

public static final int Preference_summary

public static final int Preference_title

public static final int Preference_widgetLayout

public static final int[] ProgressBar

public static final int ProgressBar_indeterminate

public static final int ProgressBar_indeterminateBehavior

public static final int ProgressBar_indeterminateDrawable

public static final int ProgressBar_indeterminateDuration

public static final int ProgressBar_indeterminateOnly

public static final int ProgressBar_interpolator

public static final int ProgressBar_max

public static final int ProgressBar_maxHeight

public static final int ProgressBar_maxWidth

public static final int ProgressBar_minHeight

public static final int ProgressBar_minWidth

public static final int ProgressBar_progress

public static final int ProgressBar_progressDrawable

public static final int ProgressBar_secondaryProgress

public static final int[] RadioGroup

public static final int RadioGroup_checkedButton

public static final int RadioGroup_orientation

public static final int[] RatingBar

public static final int RatingBar_isIndicator

public static final int RatingBar_numStars

public static final int RatingBar_rating

public static final int RatingBar_stepSize

public static final int[] RelativeLayout

public static final int[] RelativeLayout_Layout

public static final int RelativeLayout_Layout_layout_above

public static final int RelativeLayout_Layout_layout_alignBaseline

public static final int RelativeLayout_Layout_layout_alignBottom

public static final int RelativeLayout_Layout_layout_alignLeft

public static final int RelativeLayout_Layout_layout_alignParentBottom

public static final int RelativeLayout_Layout_layout_alignParentLeft

public static final int RelativeLayout_Layout_layout_alignParentRight

public static final int RelativeLayout_Layout_layout_alignParentTop

public static final int RelativeLayout_Layout_layout_alignRight

public static final int RelativeLayout_Layout_layout_alignTop

public static final int RelativeLayout_Layout_layout_alignWithParentIfMissing

public static final int RelativeLayout_Layout_layout_below

public static final int RelativeLayout_Layout_layout_centerHorizontal

public static final int RelativeLayout_Layout_layout_centerInParent

public static final int RelativeLayout_Layout_layout_centerVertical

public static final int RelativeLayout_Layout_layout_toLeftOf

public static final int RelativeLayout_Layout_layout_toRightOf

public static final int RelativeLayout_gravity

public static final int RelativeLayout_ignoreGravity

public static final int[] RingtonePreference

public static final int RingtonePreference_ringtoneType

public static final int RingtonePreference_showDefault

public static final int RingtonePreference_showSilent

public static final int[] RotateAnimation

public static final int RotateAnimation_fromDegrees

public static final int RotateAnimation_pivotX

public static final int RotateAnimation_pivotY

public static final int RotateAnimation_toDegrees

public static final int[] RotateDrawable

public static final int RotateDrawable_drawable

public static final int RotateDrawable_fromDegrees

public static final int RotateDrawable_pivotX

public static final int RotateDrawable_pivotY

public static final int RotateDrawable_toDegrees

public static final int RotateDrawable_visible

public static final int[] ScaleAnimation

public static final int ScaleAnimation_fromXScale

public static final int ScaleAnimation_fromYScale

public static final int ScaleAnimation_pivotX

public static final int ScaleAnimation_pivotY

public static final int ScaleAnimation_toXScale

public static final int ScaleAnimation_toYScale

public static final int[] ScaleDrawable

public static final int ScaleDrawable_drawable

public static final int ScaleDrawable_scaleGravity

public static final int ScaleDrawable_scaleHeight

public static final int ScaleDrawable_scaleWidth

public static final int[] ScrollView

public static final int ScrollView_fillViewport

public static final int[] Searchable

public static final int[] SearchableActionKey

public static final int SearchableActionKey_keycode

public static final int SearchableActionKey_queryActionMsg

public static final int SearchableActionKey_suggestActionMsg

public static final int SearchableActionKey_suggestActionMsgColumn

public static final int Searchable_hint

public static final int Searchable_icon

public static final int Searchable_label

public static final int Searchable_searchButtonText

public static final int Searchable_searchMode

public static final int Searchable_searchSuggestAuthority

public static final int Searchable_searchSuggestIntentAction

public static final int Searchable_searchSuggestIntentData

public static final int Searchable_searchSuggestPath

public static final int Searchable_searchSuggestSelection

public static final int[] SeekBar

public static final int SeekBar_thumb

public static final int SeekBar_thumbOffset

public static final int[] ShapeDrawable

public static final int[] ShapeDrawablePadding

public static final int ShapeDrawablePadding_bottom

public static final int ShapeDrawablePadding_left

public static final int ShapeDrawablePadding_right

public static final int ShapeDrawablePadding_top

public static final int ShapeDrawable_color

public static final int ShapeDrawable_height

public static final int ShapeDrawable_width

public static final int[] SlidingDrawer

public static final int SlidingDrawer_animateOnClick

public static final int SlidingDrawer_bottomOffset

public static final int SlidingDrawer_content

public static final int SlidingDrawer_handle

public static final int SlidingDrawer_orientation

public static final int SlidingDrawer_topOffset

public static final int[] Spinner

public static final int Spinner_prompt

public static final int[] StateListDrawable

public static final int StateListDrawable_constantSize

public static final int StateListDrawable_variablePadding

public static final int StateListDrawable_visible

public static final int[] TabWidget

public static final int[] TableLayout

public static final int TableLayout_collapseColumns

public static final int TableLayout_shrinkColumns

public static final int TableLayout_stretchColumns

public static final int[] TableRow

public static final int[] TableRow_Cell

public static final int TableRow_Cell_layout_column

public static final int TableRow_Cell_layout_span

public static final int[] TextAppearance

public static final int TextAppearance_textColor

public static final int TextAppearance_textColorHighlight

public static final int TextAppearance_textColorHint

public static final int TextAppearance_textColorLink

public static final int TextAppearance_textSize

public static final int TextAppearance_textStyle

public static final int TextAppearance_typeface

public static final int[] TextSwitcher

public static final int[] TextView

public static final int TextView_autoLink

public static final int TextView_autoText

public static final int TextView_bufferType

public static final int TextView_capitalize

public static final int TextView_cursorVisible

public static final int TextView_digits

public static final int TextView_drawableBottom

public static final int TextView_drawableLeft

public static final int TextView_drawablePadding

public static final int TextView_drawableRight

public static final int TextView_drawableTop

public static final int TextView_editable

public static final int TextView_ellipsize

public static final int TextView_ems

public static final int TextView_enabled

public static final int TextView_freezesText

public static final int TextView_gravity

public static final int TextView_height

public static final int TextView_hint

public static final int TextView_includeFontPadding

public static final int TextView_inputMethod

public static final int TextView_lineSpacingExtra

public static final int TextView_lineSpacingMultiplier

public static final int TextView_lines

public static final int TextView_linksClickable

public static final int TextView_maxEms

public static final int TextView_maxHeight

public static final int TextView_maxLength

public static final int TextView_maxLines

public static final int TextView_maxWidth

public static final int TextView_minEms

public static final int TextView_minHeight

public static final int TextView_minLines

public static final int TextView_minWidth

public static final int TextView_numeric

public static final int TextView_password

public static final int TextView_phoneNumber

public static final int TextView_scrollHorizontally

public static final int TextView_selectAllOnFocus

public static final int TextView_shadowColor

public static final int TextView_shadowDx

public static final int TextView_shadowDy

public static final int TextView_shadowRadius

public static final int TextView_singleLine

public static final int TextView_text

public static final int TextView_textAppearance

public static final int TextView_textColor

public static final int TextView_textColorHighlight

public static final int TextView_textColorHint

public static final int TextView_textColorLink

public static final int TextView_textScaleX

public static final int TextView_textSize

public static final int TextView_textStyle

public static final int TextView_typeface

public static final int TextView_width

public static final int[] Theme

public static final int Theme_absListViewStyle

public static final int Theme_alertDialogStyle

public static final int Theme_autoCompleteTextViewStyle

public static final int Theme_backgroundDimAmount

public static final int Theme_buttonStyle

public static final int Theme_buttonStyleInset

public static final int Theme_buttonStyleSmall

public static final int Theme_buttonStyleToggle

public static final int Theme_checkBoxPreferenceStyle

public static final int Theme_checkboxStyle

public static final int Theme_colorBackground

public static final int Theme_colorForeground

public static final int Theme_colorForegroundInverse

public static final int Theme_dialogPreferenceStyle

public static final int Theme_disabledAlpha

public static final int Theme_dropDownHintAppearance

public static final int Theme_dropDownItemStyle

public static final int Theme_dropDownListViewStyle

public static final int Theme_editTextPreferenceStyle

public static final int Theme_editTextStyle

public static final int Theme_expandableListPreferredChildIndicatorLeft

public static final int Theme_expandableListPreferredChildIndicatorRight

public static final int Theme_expandableListPreferredChildPaddingLeft

public static final int Theme_expandableListPreferredItemIndicatorLeft

public static final int Theme_expandableListPreferredItemIndicatorRight

public static final int Theme_expandableListPreferredItemPaddingLeft

public static final int Theme_expandableListViewStyle

public static final int Theme_galleryItemBackground

public static final int Theme_galleryStyle

public static final int Theme_gridViewStyle

public static final int Theme_imageButtonStyle

public static final int Theme_imageWellStyle

public static final int Theme_listChoiceIndicatorMultiple

public static final int Theme_listChoiceIndicatorSingle

public static final int Theme_listDivider

public static final int Theme_listPreferredItemHeight

public static final int Theme_listSeparatorTextViewStyle

public static final int Theme_listViewStyle

public static final int Theme_listViewWhiteStyle

public static final int Theme_mapViewStyle

public static final int Theme_panelBackground

public static final int Theme_panelColorBackground

public static final int Theme_panelColorForeground

public static final int Theme_panelFullBackground

public static final int Theme_panelTextAppearance

public static final int Theme_popupWindowStyle

public static final int Theme_preferenceCategoryStyle

public static final int Theme_preferenceInformationStyle

public static final int Theme_preferenceLayoutChild

public static final int Theme_preferenceScreenStyle

public static final int Theme_preferenceStyle

public static final int Theme_progressBarStyle

public static final int Theme_progressBarStyleHorizontal

public static final int Theme_progressBarStyleLarge

public static final int Theme_progressBarStyleSmall

public static final int Theme_progressBarStyleSmallTitle

public static final int Theme_radioButtonStyle

public static final int Theme_ratingBarStyle

public static final int Theme_ratingBarStyleIndicator

public static final int Theme_ratingBarStyleSmall

public static final int Theme_ringtonePreferenceStyle

public static final int Theme_scrollViewStyle

public static final int Theme_seekBarStyle

public static final int Theme_spinnerDropDownItemStyle

public static final int Theme_spinnerItemStyle

public static final int Theme_spinnerStyle

public static final int Theme_starStyle

public static final int Theme_tabWidgetStyle

public static final int Theme_textAppearance

public static final int Theme_textAppearanceButton

public static final int Theme_textAppearanceInverse

public static final int Theme_textAppearanceLarge

public static final int Theme_textAppearanceLargeInverse

public static final int Theme_textAppearanceMedium

public static final int Theme_textAppearanceMediumInverse

public static final int Theme_textAppearanceSmall

public static final int Theme_textAppearanceSmallInverse

public static final int Theme_textCheckMark

public static final int Theme_textCheckMarkInverse

public static final int Theme_textColorHintInverse

public static final int Theme_textColorPrimary

public static final int Theme_textColorPrimaryDisableOnly

public static final int Theme_textColorPrimaryInverse

public static final int Theme_textColorPrimaryInverseNoDisable

public static final int Theme_textColorPrimaryNoDisable

public static final int Theme_textColorSecondary

public static final int Theme_textColorSecondaryInverse

public static final int Theme_textColorSecondaryInverseNoDisable

public static final int Theme_textColorSecondaryNoDisable

public static final int Theme_textColorTertiary

public static final int Theme_textColorTertiaryInverse

public static final int Theme_textViewStyle

public static final int Theme_webViewStyle

public static final int Theme_windowAnimationStyle

public static final int Theme_windowBackground

public static final int Theme_windowContentOverlay

public static final int Theme_windowFrame

public static final int Theme_windowFullscreen

public static final int Theme_windowIsFloating

public static final int Theme_windowIsTranslucent

public static final int Theme_windowNoTitle

public static final int Theme_windowTitleBackgroundStyle

public static final int Theme_windowTitleSize

public static final int Theme_windowTitleStyle

public static final int Theme_yesNoPreferenceStyle

public static final int[] ToggleButton

public static final int ToggleButton_disabledAlpha

public static final int ToggleButton_textOff

public static final int ToggleButton_textOn

public static final int[] TranslateAnimation

public static final int TranslateAnimation_fromXDelta

public static final int TranslateAnimation_fromYDelta

public static final int TranslateAnimation_toXDelta

public static final int TranslateAnimation_toYDelta

public static final int[] TwoLineListItem

public static final int TwoLineListItem_mode

public static final int[] VerticalSlider_Layout

public static final int VerticalSlider_Layout_layout_scale

public static final int[] View

public static final int[] ViewAnimator

public static final int ViewAnimator_inAnimation

public static final int ViewAnimator_outAnimation

public static final int[] ViewDrawableStates

public static final int ViewDrawableStates_state_enabled

public static final int ViewDrawableStates_state_focused

public static final int ViewDrawableStates_state_pressed

public static final int ViewDrawableStates_state_selected

public static final int ViewDrawableStates_state_window_focused

public static final int[] ViewFlipper

public static final int ViewFlipper_flipInterval

public static final int[] ViewGroup

public static final int[] ViewGroup_Layout

public static final int ViewGroup_Layout_layout_height

public static final int ViewGroup_Layout_layout_width

public static final int[] ViewGroup_MarginLayout

public static final int ViewGroup_MarginLayout_layout_height

public static final int ViewGroup_MarginLayout_layout_margin

public static final int ViewGroup_MarginLayout_layout_marginBottom

public static final int ViewGroup_MarginLayout_layout_marginLeft

public static final int ViewGroup_MarginLayout_layout_marginRight

public static final int ViewGroup_MarginLayout_layout_marginTop

public static final int ViewGroup_MarginLayout_layout_width

public static final int ViewGroup_addStatesFromChildren

public static final int ViewGroup_alwaysDrawnWithCache

public static final int ViewGroup_animationCache

public static final int ViewGroup_clipChildren

public static final int ViewGroup_clipToPadding

public static final int ViewGroup_descendantFocusability

public static final int ViewGroup_layoutAnimation

public static final int ViewGroup_persistentDrawingCache

public static final int[] ViewStub

public static final int ViewStub_inflatedId

public static final int ViewStub_layout

public static final int[] ViewSwitcher

public static final int View_background

public static final int View_clickable

public static final int View_drawingCacheQuality

public static final int View_duplicateParentState

public static final int View_fadingEdge

public static final int View_fadingEdgeLength

public static final int View_fitsSystemWindows

public static final int View_focusable

public static final int View_focusableInTouchMode

public static final int View_id

public static final int View_keepScreenOn

public static final int View_longClickable

public static final int View_minHeight

public static final int View_minWidth

public static final int View_nextFocusDown

public static final int View_nextFocusLeft

public static final int View_nextFocusRight

public static final int View_nextFocusUp

public static final int View_padding

public static final int View_paddingBottom

public static final int View_paddingLeft

public static final int View_paddingRight

public static final int View_paddingTop

public static final int View_saveEnabled

public static final int View_scrollX

public static final int View_scrollY

public static final int View_scrollbarAlwaysDrawHorizontalTrack

public static final int View_scrollbarAlwaysDrawVerticalTrack

public static final int View_scrollbarSize

public static final int View_scrollbarStyle

public static final int View_scrollbarThumbHorizontal

public static final int View_scrollbarThumbVertical

public static final int View_scrollbarTrackHorizontal

public static final int View_scrollbarTrackVertical

public static final int View_scrollbars

public static final int View_soundEffectsEnabled

public static final int View_tag

public static final int View_visibility

public static final int[] VolumePreference

public static final int VolumePreference_streamType

public static final int[] Window

public static final int[] WindowAnimation

public static final int WindowAnimation_activityCloseEnterAnimation

public static final int WindowAnimation_activityCloseExitAnimation

public static final int WindowAnimation_activityOpenEnterAnimation

public static final int WindowAnimation_activityOpenExitAnimation

public static final int WindowAnimation_taskCloseEnterAnimation

public static final int WindowAnimation_taskCloseExitAnimation

public static final int WindowAnimation_taskOpenEnterAnimation

public static final int WindowAnimation_taskOpenExitAnimation

public static final int WindowAnimation_taskToBackEnterAnimation

public static final int WindowAnimation_taskToBackExitAnimation

public static final int WindowAnimation_taskToFrontEnterAnimation

public static final int WindowAnimation_taskToFrontExitAnimation

public static final int WindowAnimation_windowEnterAnimation

public static final int WindowAnimation_windowExitAnimation

public static final int WindowAnimation_windowHideAnimation

public static final int WindowAnimation_windowShowAnimation

public static final int Window_textColor

public static final int Window_windowAnimationStyle

public static final int Window_windowBackground

public static final int Window_windowContentOverlay

public static final int Window_windowFrame

public static final int Window_windowFullscreen

public static final int Window_windowIsFloating

public static final int Window_windowIsTranslucent

public static final int Window_windowNoTitle
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =xml )
@dalvik.annotation.EnclosingClass (value =Landroid/R; )
public final class android.R$xml extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/R$styleable;Landroid/R$xml;Landroid/R$style;Landroid/R$string;Landroid/R$raw;Landroid/R$plurals;Landroid/R$layout;Landroid/R$id;Landroid/R$drawable;Landroid/R$dimen;Landroid/R$color;Landroid/R$attr;Landroid/R$array;Landroid/R$anim; )
public final class android.R extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =AccountUpdater )
@dalvik.annotation.EnclosingClass (value =Landroid/accounts/AccountMonitor; )
 class android.accounts.AccountMonitor$AccountUpdater extends java.lang.Thread

----------------FIELDS----------------

private android.os.IBinder mService

final android.accounts.AccountMonitor this$0
----------------METHODS----------------

public void <init>(
android.accounts.AccountMonitor
android.os.IBinder)

public void run()

________________CLASS________________


public abstract class android.content.BroadcastReceiver extends java.lang.Object

----------------FIELDS----------------

private boolean mAbortBroadcast

private boolean mDebugUnregister

private boolean mOrderedHint

private int mResultCode

private java.lang.String mResultData

private android.os.Bundle mResultExtras
----------------METHODS----------------

public void <init>()

public final void abortBroadcast()

 void checkSynchronousHint()

public final void clearAbortBroadcast()

public final boolean getAbortBroadcast()

public final boolean getDebugUnregister()

public final int getResultCode()

public final java.lang.String getResultData()

public final android.os.Bundle getResultExtras(
boolean)

public abstract void onReceive(
android.content.Context
android.content.Intent)

public final void setDebugUnregister(
boolean)

public final void setOrderedHint(
boolean)

public final void setResult(
int
java.lang.String
android.os.Bundle)

public final void setResultCode(
int)

public final void setResultData(
java.lang.String)

public final void setResultExtras(
android.os.Bundle)

________________CLASS________________


public abstract interface class android.content.ServiceConnection extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onServiceConnected(
android.content.ComponentName
android.os.IBinder)

public abstract void onServiceDisconnected(
android.content.ComponentName)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/accounts/AccountMonitor$AccountUpdater; )
public class android.accounts.AccountMonitor extends android.content.BroadcastReceiver implements android.content.ServiceConnection

----------------FIELDS----------------

private boolean mClosed

private final android.content.Context mContext

private final android.accounts.AccountMonitorListener mListener
----------------METHODS----------------

public void <init>(
android.content.Context
android.accounts.AccountMonitorListener)

static android.content.Context access$000(
android.accounts.AccountMonitor)

static android.accounts.AccountMonitorListener access$100(
android.accounts.AccountMonitor)

private void notifyListener()

public void close()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public void onReceive(
android.content.Context
android.content.Intent)

public void onServiceConnected(
android.content.ComponentName
android.os.IBinder)

public void onServiceDisconnected(
android.content.ComponentName)

________________CLASS________________


public abstract interface class android.accounts.AccountMonitorListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onAccountsUpdated(
java.lang.String[])

________________CLASS________________


public class android.accounts.AccountsServiceConstants extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACCOUNTS_SERVICE_ACTION

public static final java.lang.String LOGIN_ACCOUNTS_CHANGED_ACTION

public static final java.lang.String LOGIN_ACCOUNTS_MISSING_ACTION
----------------METHODS----------------

private void <init>()

________________CLASS________________


public abstract interface class android.os.IInterface extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.os.IBinder asBinder()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/accounts/IAccountsService$Stub; )
public abstract interface class android.accounts.IAccountsService extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String[] getAccounts()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/accounts/IAccountsService$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.accounts.IAccountsService$Stub$Proxy extends java.lang.Object implements android.accounts.IAccountsService

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String[] getAccounts()

public java.lang.String getInterfaceDescriptor()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/IBinder$DeathRecipient; )
public abstract interface class android.os.IBinder extends java.lang.Object

----------------FIELDS----------------

public static final int DUMP_TRANSACTION

public static final int FIRST_CALL_TRANSACTION

public static final int FLAG_ONEWAY

public static final int INTERFACE_TRANSACTION

public static final int LAST_CALL_TRANSACTION

public static final int PING_TRANSACTION
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getInterfaceDescriptor()

public abstract boolean isBinderAlive()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void linkToDeath(
android.os.IBinder$DeathRecipient
int)

public abstract boolean pingBinder()

public abstract android.os.IInterface queryLocalInterface(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean transact(
int
android.os.Parcel
android.os.Parcel
int)

public abstract boolean unlinkToDeath(
android.os.IBinder$DeathRecipient
int)

________________CLASS________________


public class android.os.Binder extends java.lang.Object implements android.os.IBinder

----------------FIELDS----------------

private static final boolean FIND_POTENTIAL_LEAKS

private static final java.lang.String TAG

private java.lang.String mDescriptor

private int mObject

private android.os.IInterface mOwner
----------------METHODS----------------

public void <init>()

public static final native long clearCallingIdentity()

private final native void destroy()

private boolean execTransact(
int
int
int
int)

public static final native void flushPendingCommands()

public static final native int getCallingPid()

public static final native int getCallingUid()

private final native void init()

public static final native void joinThreadPool()

public static final native void restoreCallingIdentity(
long)

public void attachInterface(
android.os.IInterface
java.lang.String)

protected void dump(
java.io.FileDescriptor
java.io.PrintWriter
java.lang.String[])
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public java.lang.String getInterfaceDescriptor()

public boolean isBinderAlive()

public void linkToDeath(
android.os.IBinder$DeathRecipient
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
protected boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

public boolean pingBinder()

public android.os.IInterface queryLocalInterface(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final boolean transact(
int
android.os.Parcel
android.os.Parcel
int)

public boolean unlinkToDeath(
android.os.IBinder$DeathRecipient
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/accounts/IAccountsService$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/accounts/IAccountsService; )
public abstract class android.accounts.IAccountsService$Stub extends android.os.Binder implements android.accounts.IAccountsService

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_getAccounts
----------------METHODS----------------

public void <init>()

public static android.accounts.IAccountsService asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/annotation/SdkConstant$SdkConstantType;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/annotation/SdkConstant; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =SdkConstantType )
public final class android.annotation.SdkConstant$SdkConstantType extends java.lang.Enum

----------------FIELDS----------------

private static final android.annotation.SdkConstant$SdkConstantType[] $VALUES

public static final android.annotation.SdkConstant$SdkConstantType ACTIVITY_INTENT_ACTION

public static final android.annotation.SdkConstant$SdkConstantType BROADCAST_INTENT_ACTION

public static final android.annotation.SdkConstant$SdkConstantType INTENT_CATEGORY

public static final android.annotation.SdkConstant$SdkConstantType SERVICE_ACTION
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.annotation.SdkConstant$SdkConstantType valueOf(
java.lang.String)

public static android.annotation.SdkConstant$SdkConstantType[] values()

________________CLASS________________

@java.lang.annotation.Retention (value =Ljava/lang/annotation/RetentionPolicy;!SOURCE )
@java.lang.annotation.Target (value =Ljava/lang/annotation/ElementType;!FIELD )
@dalvik.annotation.MemberClasses (value =Landroid/annotation/SdkConstant$SdkConstantType; )
public abstract interface class android.annotation.SdkConstant extends java.lang.Object implements java.lang.annotation.Annotation

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.annotation.SdkConstant$SdkConstantType value()

________________CLASS________________

@java.lang.annotation.Retention (value =Ljava/lang/annotation/RetentionPolicy;!SOURCE )
@java.lang.annotation.Target (value =Ljava/lang/annotation/ElementType;!TYPE )
public abstract interface class android.annotation.Widget extends java.lang.Object implements java.lang.annotation.Annotation

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/Activity; )
@dalvik.annotation.InnerClass (accessFlags =26 name =ManagedCursor )
final class android.app.Activity$ManagedCursor extends java.lang.Object

----------------FIELDS----------------

private final android.database.Cursor mCursor

private boolean mReleased

private boolean mUpdated
----------------METHODS----------------

 void <init>(
android.database.Cursor)

static android.database.Cursor access$000(
android.app.Activity$ManagedCursor)

static boolean access$100(
android.app.Activity$ManagedCursor)

static boolean access$102(
android.app.Activity$ManagedCursor
boolean)

static boolean access$200(
android.app.Activity$ManagedCursor)

static boolean access$202(
android.app.Activity$ManagedCursor
boolean)

________________CLASS________________


public abstract class android.content.Context extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACTIVITY_SERVICE

public static final java.lang.String ALARM_SERVICE

public static final java.lang.String AUDIO_SERVICE

public static final int BIND_AUTO_CREATE

public static final int BIND_DEBUG_UNBIND

public static final java.lang.String BLUETOOTH_SERVICE

public static final java.lang.String CLIPBOARD_SERVICE

public static final java.lang.String CONNECTIVITY_SERVICE

public static final int CONTEXT_IGNORE_SECURITY

public static final int CONTEXT_INCLUDE_CODE

public static final java.lang.String KEYGUARD_SERVICE

public static final java.lang.String LAYOUT_INFLATER_SERVICE

public static final java.lang.String LOCATION_SERVICE

public static final int MODE_APPEND

public static final int MODE_PRIVATE

public static final int MODE_WORLD_READABLE

public static final int MODE_WORLD_WRITEABLE

public static final java.lang.String NOTIFICATION_SERVICE

public static final java.lang.String POWER_SERVICE

public static final java.lang.String SEARCH_SERVICE

public static final java.lang.String SENSOR_SERVICE

public static final java.lang.String STATUS_BAR_SERVICE

public static final java.lang.String TELEPHONY_SERVICE

public static final java.lang.String VIBRATOR_SERVICE

public static final java.lang.String WALLPAPER_SERVICE

public static final java.lang.String WIFI_SERVICE

public static final java.lang.String WINDOW_SERVICE
----------------METHODS----------------

public void <init>()

public abstract boolean bindService(
android.content.Intent
android.content.ServiceConnection
int)

public abstract int checkCallingOrSelfPermission(
java.lang.String)

public abstract int checkCallingOrSelfUriPermission(
android.net.Uri
int)

public abstract int checkCallingPermission(
java.lang.String)

public abstract int checkCallingUriPermission(
android.net.Uri
int)

public abstract int checkPermission(
java.lang.String
int
int)

public abstract int checkUriPermission(
android.net.Uri
int
int
int)

public abstract int checkUriPermission(
android.net.Uri
java.lang.String
java.lang.String
int
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void clearWallpaper()
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract android.content.Context createPackageContext(
java.lang.String
int)

public abstract java.lang.String[] databaseList()

public abstract boolean deleteDatabase(
java.lang.String)

public abstract boolean deleteFile(
java.lang.String)

public abstract void enforceCallingOrSelfPermission(
java.lang.String
java.lang.String)

public abstract void enforceCallingOrSelfUriPermission(
android.net.Uri
int
java.lang.String)

public abstract void enforceCallingPermission(
java.lang.String
java.lang.String)

public abstract void enforceCallingUriPermission(
android.net.Uri
int
java.lang.String)

public abstract void enforcePermission(
java.lang.String
int
int
java.lang.String)

public abstract void enforceUriPermission(
android.net.Uri
int
int
int
java.lang.String)

public abstract void enforceUriPermission(
android.net.Uri
java.lang.String
java.lang.String
int
int
int
java.lang.String)

public abstract java.lang.String[] fileList()

public abstract android.content.Context getApplicationContext()

public abstract android.content.res.AssetManager getAssets()

public abstract java.io.File getCacheDir()

public abstract java.lang.ClassLoader getClassLoader()

public abstract android.content.ContentResolver getContentResolver()

public abstract java.io.File getDatabasePath(
java.lang.String)

public abstract java.io.File getDir(
java.lang.String
int)

public abstract java.io.File getFileStreamPath(
java.lang.String)

public abstract java.io.File getFilesDir()

public abstract android.os.Looper getMainLooper()

public abstract java.lang.String getPackageCodePath()

public abstract android.content.pm.PackageManager getPackageManager()

public abstract java.lang.String getPackageName()

public abstract java.lang.String getPackageResourcePath()

public abstract android.content.res.Resources getResources()

public abstract android.content.SharedPreferences getSharedPreferences(
java.lang.String
int)

public final java.lang.String getString(
int)

public final transient java.lang.String getString(
int
java.lang.Object[])

public abstract java.lang.Object getSystemService(
java.lang.String)

public final java.lang.CharSequence getText(
int)

public abstract android.content.res.Resources$Theme getTheme()

public abstract android.graphics.drawable.Drawable getWallpaper()

public abstract int getWallpaperDesiredMinimumHeight()

public abstract int getWallpaperDesiredMinimumWidth()

public abstract void grantUriPermission(
java.lang.String
android.net.Uri
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public final android.content.res.TypedArray obtainStyledAttributes(
int
int[])

public final android.content.res.TypedArray obtainStyledAttributes(
android.util.AttributeSet
int[])

public final android.content.res.TypedArray obtainStyledAttributes(
android.util.AttributeSet
int[]
int
int)

public final android.content.res.TypedArray obtainStyledAttributes(
int[])
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public abstract java.io.FileInputStream openFileInput(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public abstract java.io.FileOutputStream openFileOutput(
java.lang.String
int)

public abstract android.database.sqlite.SQLiteDatabase openOrCreateDatabase(
java.lang.String
int
android.database.sqlite.SQLiteDatabase$CursorFactory)

public abstract android.graphics.drawable.Drawable peekWallpaper()

public abstract android.content.Intent registerReceiver(
android.content.BroadcastReceiver
android.content.IntentFilter)

public abstract android.content.Intent registerReceiver(
android.content.BroadcastReceiver
android.content.IntentFilter
java.lang.String
android.os.Handler)

public abstract void removeStickyBroadcast(
android.content.Intent)

public abstract void revokeUriPermission(
android.net.Uri
int)

public abstract void sendBroadcast(
android.content.Intent)

public abstract void sendBroadcast(
android.content.Intent
java.lang.String)

public abstract void sendOrderedBroadcast(
android.content.Intent
java.lang.String)

public abstract void sendOrderedBroadcast(
android.content.Intent
java.lang.String
android.content.BroadcastReceiver
android.os.Handler
int
java.lang.String
android.os.Bundle)

public abstract void sendStickyBroadcast(
android.content.Intent)

public abstract void setTheme(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void setWallpaper(
android.graphics.Bitmap)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void setWallpaper(
java.io.InputStream)

public abstract void startActivity(
android.content.Intent)

public abstract boolean startInstrumentation(
android.content.ComponentName
java.lang.String
android.os.Bundle)

public abstract android.content.ComponentName startService(
android.content.Intent)

public abstract boolean stopService(
android.content.Intent)

public abstract void unbindService(
android.content.ServiceConnection)

public abstract void unregisterReceiver(
android.content.BroadcastReceiver)

________________CLASS________________


public class android.content.ContextWrapper extends android.content.Context

----------------FIELDS----------------

 android.content.Context mBase
----------------METHODS----------------

public void <init>(
android.content.Context)

protected void attachBaseContext(
android.content.Context)

public boolean bindService(
android.content.Intent
android.content.ServiceConnection
int)

public int checkCallingOrSelfPermission(
java.lang.String)

public int checkCallingOrSelfUriPermission(
android.net.Uri
int)

public int checkCallingPermission(
java.lang.String)

public int checkCallingUriPermission(
android.net.Uri
int)

public int checkPermission(
java.lang.String
int
int)

public int checkUriPermission(
android.net.Uri
int
int
int)

public int checkUriPermission(
android.net.Uri
java.lang.String
java.lang.String
int
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void clearWallpaper()
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public android.content.Context createPackageContext(
java.lang.String
int)

public java.lang.String[] databaseList()

public boolean deleteDatabase(
java.lang.String)

public boolean deleteFile(
java.lang.String)

public void enforceCallingOrSelfPermission(
java.lang.String
java.lang.String)

public void enforceCallingOrSelfUriPermission(
android.net.Uri
int
java.lang.String)

public void enforceCallingPermission(
java.lang.String
java.lang.String)

public void enforceCallingUriPermission(
android.net.Uri
int
java.lang.String)

public void enforcePermission(
java.lang.String
int
int
java.lang.String)

public void enforceUriPermission(
android.net.Uri
int
int
int
java.lang.String)

public void enforceUriPermission(
android.net.Uri
java.lang.String
java.lang.String
int
int
int
java.lang.String)

public java.lang.String[] fileList()

public android.content.Context getApplicationContext()

public android.content.res.AssetManager getAssets()

public android.content.Context getBaseContext()

public java.io.File getCacheDir()

public java.lang.ClassLoader getClassLoader()

public android.content.ContentResolver getContentResolver()

public java.io.File getDatabasePath(
java.lang.String)

public java.io.File getDir(
java.lang.String
int)

public java.io.File getFileStreamPath(
java.lang.String)

public java.io.File getFilesDir()

public android.os.Looper getMainLooper()

public java.lang.String getPackageCodePath()

public android.content.pm.PackageManager getPackageManager()

public java.lang.String getPackageName()

public java.lang.String getPackageResourcePath()

public android.content.res.Resources getResources()

public android.content.SharedPreferences getSharedPreferences(
java.lang.String
int)

public java.lang.Object getSystemService(
java.lang.String)

public android.content.res.Resources$Theme getTheme()

public android.graphics.drawable.Drawable getWallpaper()

public int getWallpaperDesiredMinimumHeight()

public int getWallpaperDesiredMinimumWidth()

public void grantUriPermission(
java.lang.String
android.net.Uri
int)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public java.io.FileInputStream openFileInput(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public java.io.FileOutputStream openFileOutput(
java.lang.String
int)

public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(
java.lang.String
int
android.database.sqlite.SQLiteDatabase$CursorFactory)

public android.graphics.drawable.Drawable peekWallpaper()

public android.content.Intent registerReceiver(
android.content.BroadcastReceiver
android.content.IntentFilter)

public android.content.Intent registerReceiver(
android.content.BroadcastReceiver
android.content.IntentFilter
java.lang.String
android.os.Handler)

public void removeStickyBroadcast(
android.content.Intent)

public void revokeUriPermission(
android.net.Uri
int)

public void sendBroadcast(
android.content.Intent)

public void sendBroadcast(
android.content.Intent
java.lang.String)

public void sendOrderedBroadcast(
android.content.Intent
java.lang.String)

public void sendOrderedBroadcast(
android.content.Intent
java.lang.String
android.content.BroadcastReceiver
android.os.Handler
int
java.lang.String
android.os.Bundle)

public void sendStickyBroadcast(
android.content.Intent)

public void setTheme(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void setWallpaper(
android.graphics.Bitmap)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void setWallpaper(
java.io.InputStream)

public void startActivity(
android.content.Intent)

public boolean startInstrumentation(
android.content.ComponentName
java.lang.String
android.os.Bundle)

public android.content.ComponentName startService(
android.content.Intent)

public boolean stopService(
android.content.Intent)

public void unbindService(
android.content.ServiceConnection)

public void unregisterReceiver(
android.content.BroadcastReceiver)

________________CLASS________________


public class android.view.ContextThemeWrapper extends android.content.ContextWrapper

----------------FIELDS----------------

private android.content.Context mBase

private android.view.LayoutInflater mInflater

private android.content.res.Resources$Theme mTheme

private int mThemeResource
----------------METHODS----------------

public void <init>()

public void <init>(
android.content.Context
int)

private void initializeTheme()

protected void attachBaseContext(
android.content.Context)

public java.lang.Object getSystemService(
java.lang.String)

public android.content.res.Resources$Theme getTheme()

protected void onApplyThemeResource(
android.content.res.Resources$Theme
int
boolean)

public void setTheme(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/LayoutInflater; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =Factory )
public abstract interface class android.view.LayoutInflater$Factory extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.view.View onCreateView(
java.lang.String
android.content.Context
android.util.AttributeSet)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/Window; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =Callback )
public abstract interface class android.view.Window$Callback extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean dispatchKeyEvent(
android.view.KeyEvent)

public abstract boolean dispatchTouchEvent(
android.view.MotionEvent)

public abstract boolean dispatchTrackballEvent(
android.view.MotionEvent)

public abstract void onContentChanged()

public abstract boolean onCreatePanelMenu(
int
android.view.Menu)

public abstract android.view.View onCreatePanelView(
int)

public abstract boolean onMenuItemSelected(
int
android.view.MenuItem)

public abstract boolean onMenuOpened(
int
android.view.Menu)

public abstract void onPanelClosed(
int
android.view.Menu)

public abstract boolean onPreparePanel(
int
android.view.View
android.view.Menu)

public abstract boolean onSearchRequested()

public abstract void onWindowAttributesChanged(
android.view.WindowManager$LayoutParams)

public abstract void onWindowFocusChanged(
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/KeyEvent; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =Callback )
public abstract interface class android.view.KeyEvent$Callback extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onKeyDown(
int
android.view.KeyEvent)

public abstract boolean onKeyMultiple(
int
int
android.view.KeyEvent)

public abstract boolean onKeyUp(
int
android.view.KeyEvent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/View; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnCreateContextMenuListener )
public abstract interface class android.view.View$OnCreateContextMenuListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onCreateContextMenu(
android.view.ContextMenu
android.view.View
android.view.ContextMenu$ContextMenuInfo)

________________CLASS________________


public abstract interface class android.content.ComponentCallbacks extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onConfigurationChanged(
android.content.res.Configuration)

public abstract void onLowMemory()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/Activity$ManagedCursor; )
public class android.app.Activity extends android.view.ContextThemeWrapper implements android.view.LayoutInflater$Factory, android.view.Window$Callback, android.view.KeyEvent$Callback, android.view.View$OnCreateContextMenuListener, android.content.ComponentCallbacks

----------------FIELDS----------------

public static final int DEFAULT_KEYS_DIALER

public static final int DEFAULT_KEYS_DISABLE

public static final int DEFAULT_KEYS_SEARCH_GLOBAL

public static final int DEFAULT_KEYS_SEARCH_LOCAL

public static final int DEFAULT_KEYS_SHORTCUT

protected static final int[] FOCUSED_STATE_SET

public static final int RESULT_CANCELED

public static final int RESULT_FIRST_USER

public static final int RESULT_OK

private static final java.lang.String SAVED_DIALOGS_TAG

private static final java.lang.String SAVED_DIALOG_IDS_KEY

private static final java.lang.String SAVED_DIALOG_KEY_PREFIX

private static final java.lang.String SAVED_SEARCH_DIALOG_KEY

private static final java.lang.String TAG

private static final java.lang.String WINDOW_HIERARCHY_TAG

private static long sInstanceCount

 android.content.pm.ActivityInfo mActivityInfo

private android.app.Application mApplication

 boolean mCalled

private android.content.ComponentName mComponent

 int mConfigChangeFlags

 android.content.res.Configuration mCurrentConfig

 android.view.View mDecor

private int mDefaultKeyMode

private android.text.SpannableStringBuilder mDefaultKeySsb

 java.lang.String mEmbeddedID

 boolean mFinished

private final android.os.Handler mHandler

private android.app.Instrumentation mInstrumentation

private android.content.Intent mIntent

private java.lang.Object mLastNonConfigurationInstance

 android.app.ActivityThread mMainThread
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/app/Activity$ManagedCursor;>; )
private final java.util.ArrayList mManagedCursors
@dalvik.annotation.Signature (value =Landroid/util/SparseArray<Landroid/app/Dialog;>; )
private android.util.SparseArray mManagedDialogs

 android.app.Activity mParent

 int mResultCode

 android.content.Intent mResultData

private boolean mResumed

 boolean mStartedActivity

private boolean mStopped

private java.lang.CharSequence mTitle

private int mTitleColor

private boolean mTitleReady

private android.os.IBinder mToken

private java.lang.Thread mUiThread

private android.view.Window mWindow

private android.view.WindowManager mWindowManager
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static long getInstanceCount()

private java.lang.IllegalArgumentException missingDialog(
int)

private void restoreManagedDialogs(
android.os.Bundle)

private void saveManagedDialogs(
android.os.Bundle)

private java.lang.String savedDialogKeyFor(
int)

public void addContentView(
android.view.View
android.view.ViewGroup$LayoutParams)

final void attach(
android.content.Context
android.app.ActivityThread
android.app.Instrumentation
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
android.content.res.Configuration)

public void closeOptionsMenu()

public android.app.PendingIntent createPendingResult(
int
android.content.Intent
int)

public final void dismissDialog(
int)

 void dispatchActivityResult(
java.lang.String
int
int
android.content.Intent)

public boolean dispatchKeyEvent(
android.view.KeyEvent)

public boolean dispatchTouchEvent(
android.view.MotionEvent)

public boolean dispatchTrackballEvent(
android.view.MotionEvent)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public android.view.View findViewById(
int)

public void finish()

public void finishActivity(
int)

public void finishActivityFromChild(
android.app.Activity
int)

public void finishFromChild(
android.app.Activity)

final android.os.IBinder getActivityToken()

public final android.app.Application getApplication()

public android.content.ComponentName getCallingActivity()

public java.lang.String getCallingPackage()

public int getChangingConfigurations()

public android.content.ComponentName getComponentName()

public android.view.View getCurrentFocus()

public android.content.Intent getIntent()

public java.lang.Object getLastNonConfigurationInstance()

public android.view.LayoutInflater getLayoutInflater()

public java.lang.String getLocalClassName()

public android.view.MenuInflater getMenuInflater()

public final android.app.Activity getParent()

public android.content.SharedPreferences getPreferences(
int)

public int getRequestedOrientation()

public java.lang.Object getSystemService(
java.lang.String)

public int getTaskId()

public final java.lang.CharSequence getTitle()

public final int getTitleColor()

public final int getVolumeControlStream()

public int getWallpaperDesiredMinimumHeight()

public int getWallpaperDesiredMinimumWidth()

public android.view.Window getWindow()

public android.view.WindowManager getWindowManager()

public final boolean isChild()

public boolean isFinishing()

final boolean isResumed()

public boolean isTaskRoot()
@java.lang.Deprecated
public void managedCommitUpdates(
android.database.Cursor)

public final android.database.Cursor managedQuery(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String)

public final android.database.Cursor managedQuery(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)

public boolean moveTaskToBack(
boolean)

protected void onActivityResult(
int
int
android.content.Intent)

protected void onApplyThemeResource(
android.content.res.Resources$Theme
int
boolean)

protected void onChildTitleChanged(
android.app.Activity
java.lang.CharSequence)

public void onConfigurationChanged(
android.content.res.Configuration)

public void onContentChanged()

public boolean onContextItemSelected(
android.view.MenuItem)

public void onContextMenuClosed(
android.view.Menu)

protected void onCreate(
android.os.Bundle)

public void onCreateContextMenu(
android.view.ContextMenu
android.view.View
android.view.ContextMenu$ContextMenuInfo)

public java.lang.CharSequence onCreateDescription()

protected android.app.Dialog onCreateDialog(
int)

public boolean onCreateOptionsMenu(
android.view.Menu)

public boolean onCreatePanelMenu(
int
android.view.Menu)

public android.view.View onCreatePanelView(
int)

public boolean onCreateThumbnail(
android.graphics.Bitmap
android.graphics.Canvas)

public android.view.View onCreateView(
java.lang.String
android.content.Context
android.util.AttributeSet)

protected void onDestroy()

public boolean onKeyDown(
int
android.view.KeyEvent)

public boolean onKeyMultiple(
int
int
android.view.KeyEvent)

public boolean onKeyUp(
int
android.view.KeyEvent)

public void onLowMemory()

public boolean onMenuItemSelected(
int
android.view.MenuItem)

public boolean onMenuOpened(
int
android.view.Menu)

protected void onNewIntent(
android.content.Intent)

public boolean onOptionsItemSelected(
android.view.MenuItem)

public void onOptionsMenuClosed(
android.view.Menu)

public void onPanelClosed(
int
android.view.Menu)

protected void onPause()

protected void onPostCreate(
android.os.Bundle)

protected void onPostResume()

protected void onPrepareDialog(
int
android.app.Dialog)

public boolean onPrepareOptionsMenu(
android.view.Menu)

public boolean onPreparePanel(
int
android.view.View
android.view.Menu)

protected void onRestart()

protected void onRestoreInstanceState(
android.os.Bundle)

protected void onResume()

public java.lang.Object onRetainNonConfigurationInstance()

protected void onSaveInstanceState(
android.os.Bundle)

public boolean onSearchRequested()

protected void onStart()

protected void onStop()

protected void onTitleChanged(
java.lang.CharSequence
int)

public boolean onTouchEvent(
android.view.MotionEvent)

public boolean onTrackballEvent(
android.view.MotionEvent)

public void onWindowAttributesChanged(
android.view.WindowManager$LayoutParams)

public void onWindowFocusChanged(
boolean)

public void openContextMenu(
android.view.View)

public void openOptionsMenu()

final void performRestart()

final void performRestoreInstanceState(
android.os.Bundle)

final void performResume()

final void performSaveInstanceState(
android.os.Bundle)

final void performStart()

final void performStop()

public void registerForContextMenu(
android.view.View)

public final void removeDialog(
int)

public final boolean requestWindowFeature(
int)

public final void runOnUiThread(
java.lang.Runnable)

public void setContentView(
int)

public void setContentView(
android.view.View)

public void setContentView(
android.view.View
android.view.ViewGroup$LayoutParams)

public final void setDefaultKeyMode(
int)

public final void setFeatureDrawable(
int
android.graphics.drawable.Drawable)

public final void setFeatureDrawableAlpha(
int
int)

public final void setFeatureDrawableResource(
int
int)

public final void setFeatureDrawableUri(
int
android.net.Uri)

public void setIntent(
android.content.Intent)

final void setParent(
android.app.Activity)

public void setPersistent(
boolean)

public final void setProgress(
int)

public final void setProgressBarIndeterminate(
boolean)

public final void setProgressBarIndeterminateVisibility(
boolean)

public final void setProgressBarVisibility(
boolean)

public void setRequestedOrientation(
int)

public final void setResult(
int)

public final void setResult(
int
android.content.Intent)

public final void setSecondaryProgress(
int)

public void setTitle(
int)

public void setTitle(
java.lang.CharSequence)

public void setTitleColor(
int)

public final void setVolumeControlStream(
int)

public final void showDialog(
int)

public void startActivity(
android.content.Intent)

public void startActivityForResult(
android.content.Intent
int)

public void startActivityFromChild(
android.app.Activity
android.content.Intent
int)

public boolean startActivityIfNeeded(
android.content.Intent
int)

public void startManagingCursor(
android.database.Cursor)

public boolean startNextMatchingActivity(
android.content.Intent)

public void startSearch(
java.lang.String
boolean
android.os.Bundle
boolean)

public void stopManagingCursor(
android.database.Cursor)

public void takeKeyEvents(
boolean)

public void unregisterForContextMenu(
android.view.View)

________________CLASS________________


public class android.app.ActivityGroup extends android.app.Activity

----------------FIELDS----------------

private static final java.lang.String STATES_KEY

protected android.app.LocalActivityManager mLocalActivityManager
----------------METHODS----------------

public void <init>()

public void <init>(
boolean)

 void dispatchActivityResult(
java.lang.String
int
int
android.content.Intent)

public android.app.Activity getCurrentActivity()

public final android.app.LocalActivityManager getLocalActivityManager()

protected void onCreate(
android.os.Bundle)

protected void onDestroy()

protected void onPause()

protected void onResume()

protected void onSaveInstanceState(
android.os.Bundle)

protected void onStop()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityManager; )
 class android.app.ActivityManager$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =Creator )
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>Ljava/lang/Object; )
@dalvik.annotation.EnclosingClass (value =Landroid/os/Parcelable; )
public abstract interface class android.os.Parcelable$Creator extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Landroid/os/Parcel;)TT; )
public abstract java.lang.Object createFromParcel(
android.os.Parcel)
@dalvik.annotation.Signature (value =(I)[TT; )
public abstract java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityManager$MemoryInfo; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/app/ActivityManager$MemoryInfo;>; )
final class android.app.ActivityManager$MemoryInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.app.ActivityManager$MemoryInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.app.ActivityManager$MemoryInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/Parcelable$Creator; )
public abstract interface class android.os.Parcelable extends java.lang.Object

----------------FIELDS----------------

public static final int CONTENTS_FILE_DESCRIPTOR

public static final int PARCELABLE_WRITE_RETURN_VALUE
----------------METHODS----------------

public abstract int describeContents()

public abstract void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityManager; )
@dalvik.annotation.InnerClass (accessFlags =9 name =MemoryInfo )
public class android.app.ActivityManager$MemoryInfo extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/app/ActivityManager$MemoryInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public long availMem

public boolean lowMemory

public long threshold
----------------METHODS----------------

static void <clinit>()

public void <init>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.app.ActivityManager$1)

public int describeContents()

public void readFromParcel(
android.os.Parcel)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityManager$ProcessErrorStateInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/app/ActivityManager$ProcessErrorStateInfo;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.app.ActivityManager$ProcessErrorStateInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.app.ActivityManager$ProcessErrorStateInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.app.ActivityManager$ProcessErrorStateInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =ProcessErrorStateInfo )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityManager; )
public class android.app.ActivityManager$ProcessErrorStateInfo extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------

public static final int CRASHED
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/app/ActivityManager$ProcessErrorStateInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final int NOT_RESPONDING

public static final int NO_ERROR

public int condition

public byte[] crashData

public java.lang.String longMsg

public int pid

public java.lang.String processName

public java.lang.String shortMsg

public java.lang.String tag

public int uid
----------------METHODS----------------

static void <clinit>()

public void <init>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.app.ActivityManager$1)

public int describeContents()

public void readFromParcel(
android.os.Parcel)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityManager$RecentTaskInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/app/ActivityManager$RecentTaskInfo;>; )
final class android.app.ActivityManager$RecentTaskInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.app.ActivityManager$RecentTaskInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.app.ActivityManager$RecentTaskInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =RecentTaskInfo )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityManager; )
public class android.app.ActivityManager$RecentTaskInfo extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/app/ActivityManager$RecentTaskInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public android.content.Intent baseIntent

public int id

public android.content.ComponentName origActivity
----------------METHODS----------------

static void <clinit>()

public void <init>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.app.ActivityManager$1)

public int describeContents()

public void readFromParcel(
android.os.Parcel)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/app/ActivityManager$RunningServiceInfo;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityManager$RunningServiceInfo; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.app.ActivityManager$RunningServiceInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.app.ActivityManager$RunningServiceInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.app.ActivityManager$RunningServiceInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityManager; )
@dalvik.annotation.InnerClass (accessFlags =9 name =RunningServiceInfo )
public class android.app.ActivityManager$RunningServiceInfo extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/app/ActivityManager$RunningServiceInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public long activeSince

public int clientCount

public int crashCount

public boolean foreground

public long lastActivityTime

public int pid

public java.lang.String process

public long restarting

public android.content.ComponentName service

public boolean started
----------------METHODS----------------

static void <clinit>()

public void <init>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.app.ActivityManager$1)

public int describeContents()

public void readFromParcel(
android.os.Parcel)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityManager$RunningTaskInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/app/ActivityManager$RunningTaskInfo;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.app.ActivityManager$RunningTaskInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.app.ActivityManager$RunningTaskInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.app.ActivityManager$RunningTaskInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =RunningTaskInfo )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityManager; )
public class android.app.ActivityManager$RunningTaskInfo extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/app/ActivityManager$RunningTaskInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public android.content.ComponentName baseActivity

public java.lang.CharSequence description

public int id

public int numActivities

public int numRunning

public android.graphics.Bitmap thumbnail

public android.content.ComponentName topActivity
----------------METHODS----------------

static void <clinit>()

public void <init>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.app.ActivityManager$1)

public int describeContents()

public void readFromParcel(
android.os.Parcel)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/ActivityManager$1;Landroid/app/ActivityManager$ProcessErrorStateInfo;Landroid/app/ActivityManager$MemoryInfo;Landroid/app/ActivityManager$RunningServiceInfo;Landroid/app/ActivityManager$RunningTaskInfo;Landroid/app/ActivityManager$RecentTaskInfo; )
public class android.app.ActivityManager extends java.lang.Object

----------------FIELDS----------------

private static boolean DEBUG

public static final int RECENT_WITH_EXCLUDED

private static java.lang.String TAG

private static boolean localLOGV

private final android.content.Context mContext

private final android.os.Handler mHandler
----------------METHODS----------------

static void <clinit>()

 void <init>(
android.content.Context
android.os.Handler)

public boolean clearApplicationUserData(
java.lang.String
android.content.pm.IPackageDataObserver)

public void getMemoryInfo(
android.app.ActivityManager$MemoryInfo)
@dalvik.annotation.Signature (value =()Ljava/util/List<Landroid/app/ActivityManager$ProcessErrorStateInfo;>; )
public java.util.List getProcessesInErrorState()
@dalvik.annotation.Signature (value =(II)Ljava/util/List<Landroid/app/ActivityManager$RecentTaskInfo;>; )
@dalvik.annotation.Throws (value =Ljava/lang/SecurityException; )
public java.util.List getRecentTasks(
int
int)
@dalvik.annotation.Throws (value =Ljava/lang/SecurityException; )
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/app/ActivityManager$RunningServiceInfo;>; )
public java.util.List getRunningServices(
int)
@dalvik.annotation.Throws (value =Ljava/lang/SecurityException; )
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/app/ActivityManager$RunningTaskInfo;>; )
public java.util.List getRunningTasks(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/IActivityManager$1;Landroid/app/IActivityManager$ContentProviderHolder; )
public abstract interface class android.app.IActivityManager extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------

public static final int ACTIVITY_DESTROYED_TRANSACTION

public static final int ACTIVITY_IDLE_TRANSACTION

public static final int ACTIVITY_PAUSED_TRANSACTION

public static final int ACTIVITY_STOPPED_TRANSACTION

public static final int ATTACH_APPLICATION_TRANSACTION

public static final int BIND_SERVICE_TRANSACTION

public static final int BROADCAST_INTENT_TRANSACTION

public static final int BROADCAST_STICKY_CANT_HAVE_PERMISSION

public static final int BROADCAST_SUCCESS

public static final int CANCEL_INTENT_SENDER_TRANSACTION

public static final int CHECK_PERMISSION_TRANSACTION

public static final int CHECK_URI_PERMISSION_TRANSACTION

public static final int CLEAR_APP_DATA_TRANSACTION

public static final int ENTER_SAFE_MODE_TRANSACTION

public static final int FINISH_ACTIVITY_TRANSACTION

public static final int FINISH_INSTRUMENTATION_TRANSACTION

public static final int FINISH_OTHER_INSTANCES_TRANSACTION

public static final int FINISH_RECEIVER_TRANSACTION

public static final int FINISH_SUB_ACTIVITY_TRANSACTION

public static final int GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION

public static final int GET_CALLING_ACTIVITY_TRANSACTION

public static final int GET_CALLING_PACKAGE_TRANSACTION

public static final int GET_CONFIGURATION_TRANSACTION

public static final int GET_CONTENT_PROVIDER_TRANSACTION

public static final int GET_INTENT_SENDER_TRANSACTION

public static final int GET_MEMORY_INFO_TRANSACTION

public static final int GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION

public static final int GET_PACKAGE_FOR_TOKEN_TRANSACTION

public static final int GET_PROCESSES_IN_ERROR_STATE_TRANSACTION

public static final int GET_PROCESS_LIMIT_TRANSACTION

public static final int GET_RECENT_TASKS_TRANSACTION

public static final int GET_REQUESTED_ORIENTATION_TRANSACTION

public static final int GET_SERVICES_TRANSACTION

public static final int GET_TASKS_TRANSACTION

public static final int GET_TASK_FOR_ACTIVITY_TRANSACTION

public static final int GOING_TO_SLEEP_TRANSACTION

public static final int GRANT_URI_PERMISSION_TRANSACTION

public static final int HANDLE_APPLICATION_ERROR_TRANSACTION

public static final int INTENT_SENDER_ACTIVITY

public static final int INTENT_SENDER_ACTIVITY_RESULT

public static final int INTENT_SENDER_BROADCAST

public static final int INTENT_SENDER_SERVICE

public static final int KILL_PIDS_FOR_MEMORY_TRANSACTION

public static final int MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION

public static final int MOVE_TASK_BACKWARDS_TRANSACTION

public static final int MOVE_TASK_TO_BACK_TRANSACTION

public static final int MOVE_TASK_TO_FRONT_TRANSACTION

public static final int NOTE_WAKEUP_ALARM_TRANSACTION

public static final int OPEN_CONTENT_URI_TRANSACTION

public static final int PUBLISH_CONTENT_PROVIDERS_TRANSACTION

public static final int PUBLISH_SERVICE_TRANSACTION

public static final int REGISTER_RECEIVER_TRANSACTION

public static final int REMOVE_CONTENT_PROVIDER_TRANSACTION

public static final int REPORT_PSS_TRANSACTION

public static final int REPORT_THUMBNAIL_TRANSACTION

public static final int RESTART_PACKAGE_TRANSACTION

public static final int REVOKE_URI_PERMISSION_TRANSACTION

public static final int SERVICE_DONE_EXECUTING_TRANSACTION

public static final int SET_ACTIVITY_WATCHER_TRANSACTION

public static final int SET_ALWAYS_FINISH_TRANSACTION

public static final int SET_DEBUG_APP_TRANSACTION

public static final int SET_PERSISTENT_TRANSACTION

public static final int SET_PROCESS_FOREGROUND_TRANSACTION

public static final int SET_PROCESS_LIMIT_TRANSACTION

public static final int SET_REQUESTED_ORIENTATION_TRANSACTION

public static final int SET_SERVICE_FOREGROUND_TRANSACTION

public static final int SHOW_WAITING_FOR_DEBUGGER_TRANSACTION

public static final int SIGNAL_PERSISTENT_PROCESSES_TRANSACTION

public static final int START_ACTIVITY_TRANSACTION

public static final int START_CLASS_NOT_FOUND

public static final int START_DELIVERED_TO_TOP

public static final int START_FORWARD_AND_REQUEST_CONFLICT

public static final int START_INSTRUMENTATION_TRANSACTION

public static final int START_INTENT_NOT_RESOLVED

public static final int START_NEXT_MATCHING_ACTIVITY_TRANSACTION

public static final int START_PERMISSION_DENIED

public static final int START_RETURN_INTENT_TO_CALLER

public static final int START_RUNNING_TRANSACTION

public static final int START_SERVICE_TRANSACTION

public static final int START_SUCCESS

public static final int START_TASK_TO_FRONT

public static final int STOP_SERVICE_TOKEN_TRANSACTION

public static final int STOP_SERVICE_TRANSACTION

public static final int SYSTEM_READY_TRANSACTION

public static final int UNBIND_FINISHED_TRANSACTION

public static final int UNBIND_SERVICE_TRANSACTION

public static final int UNBROADCAST_INTENT_TRANSACTION

public static final int UNHANDLED_BACK_TRANSACTION

public static final int UNREGISTER_RECEIVER_TRANSACTION

public static final int UPDATE_CONFIGURATION_TRANSACTION

public static final int WAKING_UP_TRANSACTION

public static final java.lang.String descriptor
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void activityDestroyed(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void activityIdle(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void activityPaused(
android.os.IBinder
android.os.Bundle)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void activityStopped(
android.os.IBinder
android.graphics.Bitmap
java.lang.CharSequence)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void attachApplication(
android.app.IApplicationThread)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int bindService(
android.app.IApplicationThread
android.os.IBinder
android.content.Intent
java.lang.String
android.app.IServiceConnection
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int broadcastIntent(
android.app.IApplicationThread
android.content.Intent
java.lang.String
android.app.IIntentReceiver
int
java.lang.String
android.os.Bundle
java.lang.String
boolean
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void cancelIntentSender(
android.app.IIntentSender)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int checkPermission(
java.lang.String
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int checkUriPermission(
android.net.Uri
int
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean clearApplicationUserData(
java.lang.String
android.content.pm.IPackageDataObserver)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void enterSafeMode()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean finishActivity(
android.os.IBinder
int
android.content.Intent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void finishInstrumentation(
android.app.IApplicationThread
int
android.os.Bundle)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void finishOtherInstances(
android.os.IBinder
android.content.ComponentName)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void finishReceiver(
android.os.IBinder
int
java.lang.String
android.os.Bundle
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void finishSubActivity(
android.os.IBinder
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.ComponentName getActivityClassForToken(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.ComponentName getCallingActivity(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getCallingPackage(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.res.Configuration getConfiguration()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.app.IActivityManager$ContentProviderHolder getContentProvider(
android.app.IApplicationThread
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.app.IIntentSender getIntentSender(
int
java.lang.String
android.os.IBinder
java.lang.String
int
android.content.Intent
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void getMemoryInfo(
android.app.ActivityManager$MemoryInfo)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getPackageForIntentSender(
android.app.IIntentSender)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getPackageForToken(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getProcessLimit()
@dalvik.annotation.Signature (value =()Ljava/util/List<Landroid/app/ActivityManager$ProcessErrorStateInfo;>; )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.util.List getProcessesInErrorState()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(II)Ljava/util/List<Landroid/app/ActivityManager$RecentTaskInfo;>; )
public abstract java.util.List getRecentTasks(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getRequestedOrientation(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.util.List getServices(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getTaskForActivity(
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.util.List getTasks(
int
int
android.app.IThumbnailReceiver)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void goingToSleep()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void grantUriPermission(
android.app.IApplicationThread
java.lang.String
android.net.Uri
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int handleApplicationError(
android.os.IBinder
int
java.lang.String
java.lang.String
java.lang.String
byte[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean killPidsForMemory(
int[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean moveActivityTaskToBack(
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void moveTaskBackwards(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void moveTaskToBack(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void moveTaskToFront(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void noteWakeupAlarm(
android.app.IIntentSender)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.os.ParcelFileDescriptor openContentUri(
android.net.Uri)
@dalvik.annotation.Signature (value =(Landroid/app/IApplicationThread;Ljava/util/List<Landroid/app/IActivityManager$ContentProviderHolder;>;)V )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void publishContentProviders(
android.app.IApplicationThread
java.util.List)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void publishService(
android.os.IBinder
android.content.Intent
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.Intent registerReceiver(
android.app.IApplicationThread
android.app.IIntentReceiver
android.content.IntentFilter
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void removeContentProvider(
android.app.IApplicationThread
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void reportPss(
android.app.IApplicationThread
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void reportThumbnail(
android.os.IBinder
android.graphics.Bitmap
java.lang.CharSequence)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void restartPackage(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void revokeUriPermission(
android.app.IApplicationThread
android.net.Uri
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void serviceDoneExecuting(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setActivityWatcher(
android.app.IActivityWatcher)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setAlwaysFinish(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setDebugApp(
java.lang.String
boolean
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setPersistent(
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setProcessForeground(
android.os.IBinder
int
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setProcessLimit(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setRequestedOrientation(
android.os.IBinder
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setServiceForeground(
android.content.ComponentName
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void showWaitingForDebugger(
android.app.IApplicationThread
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void signalPersistentProcesses(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int startActivity(
android.app.IApplicationThread
android.content.Intent
java.lang.String
android.net.Uri[]
int
android.os.IBinder
java.lang.String
int
boolean
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean startInstrumentation(
android.content.ComponentName
java.lang.String
int
android.os.Bundle
android.app.IInstrumentationWatcher)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean startNextMatchingActivity(
android.os.IBinder
android.content.Intent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void startRunning(
java.lang.String
java.lang.String
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.ComponentName startService(
android.app.IApplicationThread
android.content.Intent
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int stopService(
android.app.IApplicationThread
android.content.Intent
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean stopServiceToken(
android.content.ComponentName
android.os.IBinder
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void systemReady()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void unbindFinished(
android.os.IBinder
android.content.Intent
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean unbindService(
android.app.IServiceConnection)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void unbroadcastIntent(
android.app.IApplicationThread
android.content.Intent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void unhandledBack()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void unregisterReceiver(
android.app.IIntentReceiver)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void updateConfiguration(
android.content.res.Configuration)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void wakingUp()

________________CLASS________________


public abstract class android.app.ActivityManagerNative extends android.os.Binder implements android.app.IActivityManager

----------------FIELDS----------------

private static android.app.IActivityManager gDefault
----------------METHODS----------------

public void <init>()

public static android.app.IActivityManager asInterface(
android.os.IBinder)

public static void broadcastStickyIntent(
android.content.Intent
java.lang.String)

public static android.app.IActivityManager getDefault()

public static void noteWakeupAlarm(
android.app.PendingIntent)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________


 class android.app.ActivityManagerProxy extends java.lang.Object implements android.app.IActivityManager

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

public void <init>(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void activityDestroyed(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void activityIdle(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void activityPaused(
android.os.IBinder
android.os.Bundle)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void activityStopped(
android.os.IBinder
android.graphics.Bitmap
java.lang.CharSequence)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void attachApplication(
android.app.IApplicationThread)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int bindService(
android.app.IApplicationThread
android.os.IBinder
android.content.Intent
java.lang.String
android.app.IServiceConnection
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int broadcastIntent(
android.app.IApplicationThread
android.content.Intent
java.lang.String
android.app.IIntentReceiver
int
java.lang.String
android.os.Bundle
java.lang.String
boolean
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void cancelIntentSender(
android.app.IIntentSender)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int checkPermission(
java.lang.String
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int checkUriPermission(
android.net.Uri
int
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean clearApplicationUserData(
java.lang.String
android.content.pm.IPackageDataObserver)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void enterSafeMode()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean finishActivity(
android.os.IBinder
int
android.content.Intent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void finishInstrumentation(
android.app.IApplicationThread
int
android.os.Bundle)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void finishOtherInstances(
android.os.IBinder
android.content.ComponentName)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void finishReceiver(
android.os.IBinder
int
java.lang.String
android.os.Bundle
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void finishSubActivity(
android.os.IBinder
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.ComponentName getActivityClassForToken(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.ComponentName getCallingActivity(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getCallingPackage(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.res.Configuration getConfiguration()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.app.IActivityManager$ContentProviderHolder getContentProvider(
android.app.IApplicationThread
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.app.IIntentSender getIntentSender(
int
java.lang.String
android.os.IBinder
java.lang.String
int
android.content.Intent
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void getMemoryInfo(
android.app.ActivityManager$MemoryInfo)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getPackageForIntentSender(
android.app.IIntentSender)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getPackageForToken(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getProcessLimit()
@dalvik.annotation.Signature (value =()Ljava/util/List<Landroid/app/ActivityManager$ProcessErrorStateInfo;>; )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.util.List getProcessesInErrorState()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(II)Ljava/util/List<Landroid/app/ActivityManager$RecentTaskInfo;>; )
public java.util.List getRecentTasks(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getRequestedOrientation(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.util.List getServices(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getTaskForActivity(
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.util.List getTasks(
int
int
android.app.IThumbnailReceiver)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void goingToSleep()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void grantUriPermission(
android.app.IApplicationThread
java.lang.String
android.net.Uri
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int handleApplicationError(
android.os.IBinder
int
java.lang.String
java.lang.String
java.lang.String
byte[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean killPidsForMemory(
int[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean moveActivityTaskToBack(
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void moveTaskBackwards(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void moveTaskToBack(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void moveTaskToFront(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void noteWakeupAlarm(
android.app.IIntentSender)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.os.ParcelFileDescriptor openContentUri(
android.net.Uri)
@dalvik.annotation.Signature (value =(Landroid/app/IApplicationThread;Ljava/util/List<Landroid/app/IActivityManager$ContentProviderHolder;>;)V )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void publishContentProviders(
android.app.IApplicationThread
java.util.List)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void publishService(
android.os.IBinder
android.content.Intent
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.Intent registerReceiver(
android.app.IApplicationThread
android.app.IIntentReceiver
android.content.IntentFilter
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void removeContentProvider(
android.app.IApplicationThread
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void reportPss(
android.app.IApplicationThread
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void reportThumbnail(
android.os.IBinder
android.graphics.Bitmap
java.lang.CharSequence)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void restartPackage(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void revokeUriPermission(
android.app.IApplicationThread
android.net.Uri
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void serviceDoneExecuting(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setActivityWatcher(
android.app.IActivityWatcher)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setAlwaysFinish(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setDebugApp(
java.lang.String
boolean
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setPersistent(
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setProcessForeground(
android.os.IBinder
int
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setProcessLimit(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setRequestedOrientation(
android.os.IBinder
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setServiceForeground(
android.content.ComponentName
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void showWaitingForDebugger(
android.app.IApplicationThread
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void signalPersistentProcesses(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int startActivity(
android.app.IApplicationThread
android.content.Intent
java.lang.String
android.net.Uri[]
int
android.os.IBinder
java.lang.String
int
boolean
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean startInstrumentation(
android.content.ComponentName
java.lang.String
int
android.os.Bundle
android.app.IInstrumentationWatcher)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean startNextMatchingActivity(
android.os.IBinder
android.content.Intent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void startRunning(
java.lang.String
java.lang.String
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.ComponentName startService(
android.app.IApplicationThread
android.content.Intent
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int stopService(
android.app.IApplicationThread
android.content.Intent
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean stopServiceToken(
android.content.ComponentName
android.os.IBinder
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void systemReady()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void unbindFinished(
android.os.IBinder
android.content.Intent
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean unbindService(
android.app.IServiceConnection)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void unbroadcastIntent(
android.app.IApplicationThread
android.content.Intent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void unhandledBack()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void unregisterReceiver(
android.app.IIntentReceiver)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void updateConfiguration(
android.content.res.Configuration)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void wakingUp()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.app.ActivityThread$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =ActivityRecord )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
final class android.app.ActivityThread$ActivityRecord extends java.lang.Object

----------------FIELDS----------------

 android.app.Activity activity

 android.content.pm.ActivityInfo activityInfo

 java.lang.String embeddedID

 boolean hideForNow

 android.content.Intent intent

 java.lang.Object lastNonConfigurationInstance

 android.content.res.Configuration newConfig

 android.app.ActivityThread$ActivityRecord nextIdle

 android.app.ActivityThread$PackageInfo packageInfo

 android.app.Activity parent

 boolean paused
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/content/Intent;>; )
 java.util.List pendingIntents
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/app/ResultInfo;>; )
 java.util.List pendingResults

 boolean startsNotResumed

 android.os.Bundle state

 boolean stopped

 android.os.IBinder token

 android.view.Window window
----------------METHODS----------------

 void <init>()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
@dalvik.annotation.InnerClass (accessFlags =26 name =AppBindData )
final class android.app.ActivityThread$AppBindData extends java.lang.Object

----------------FIELDS----------------

 android.content.pm.ApplicationInfo appInfo

 android.content.res.Configuration config

 int debugMode

 boolean handlingProfiling

 android.app.ActivityThread$PackageInfo info

 android.os.Bundle instrumentationArgs

 android.content.ComponentName instrumentationName

 android.app.IInstrumentationWatcher instrumentationWatcher

 java.lang.String processName

 java.lang.String profileFile
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/content/pm/ProviderInfo;>; )
 java.util.List providers
----------------METHODS----------------

private void <init>()

 void <init>(
android.app.ActivityThread$1)

public java.lang.String toString()

________________CLASS________________


public abstract interface class android.app.IApplicationThread extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------

public static final int BIND_APPLICATION_TRANSACTION

public static final int DEBUG_OFF

public static final int DEBUG_ON

public static final int DEBUG_WAIT

public static final int DUMP_SERVICE_TRANSACTION

public static final int PROCESS_IN_BACKGROUND_TRANSACTION

public static final int REQUEST_PSS_TRANSACTION

public static final int REQUEST_THUMBNAIL_TRANSACTION

public static final int SCHEDULE_ACTIVITY_CONFIGURATION_CHANGED_TRANSACTION

public static final int SCHEDULE_BIND_SERVICE_TRANSACTION

public static final int SCHEDULE_CONFIGURATION_CHANGED_TRANSACTION

public static final int SCHEDULE_CREATE_SERVICE_TRANSACTION

public static final int SCHEDULE_EXIT_TRANSACTION

public static final int SCHEDULE_FINISH_ACTIVITY_TRANSACTION

public static final int SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION

public static final int SCHEDULE_LOW_MEMORY_TRANSACTION

public static final int SCHEDULE_NEW_INTENT_TRANSACTION

public static final int SCHEDULE_PAUSE_ACTIVITY_TRANSACTION

public static final int SCHEDULE_RECEIVER_TRANSACTION

public static final int SCHEDULE_REGISTERED_RECEIVER_TRANSACTION

public static final int SCHEDULE_RELAUNCH_ACTIVITY_TRANSACTION

public static final int SCHEDULE_RESUME_ACTIVITY_TRANSACTION

public static final int SCHEDULE_SEND_RESULT_TRANSACTION

public static final int SCHEDULE_SERVICE_ARGS_TRANSACTION

public static final int SCHEDULE_STOP_ACTIVITY_TRANSACTION

public static final int SCHEDULE_STOP_SERVICE_TRANSACTION

public static final int SCHEDULE_UNBIND_SERVICE_TRANSACTION

public static final int SCHEDULE_WINDOW_VISIBILITY_TRANSACTION

public static final int UPDATE_TIME_ZONE_TRANSACTION

public static final java.lang.String descriptor
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/util/List<Landroid/content/pm/ProviderInfo;>;Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/IInstrumentationWatcher;ILandroid/content/res/Configuration;Ljava/util/Map<Ljava/lang/String;Landroid/os/IBinder;>;)V )
public abstract void bindApplication(
java.lang.String
android.content.pm.ApplicationInfo
java.util.List
android.content.ComponentName
java.lang.String
android.os.Bundle
android.app.IInstrumentationWatcher
int
android.content.res.Configuration
java.util.Map)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void dumpService(
java.io.FileDescriptor
android.os.IBinder
java.lang.String[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void processInBackground()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void requestPss()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void requestThumbnail(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scheduleActivityConfigurationChanged(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scheduleBindService(
android.os.IBinder
android.content.Intent
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scheduleConfigurationChanged(
android.content.res.Configuration)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scheduleCreateService(
android.os.IBinder
android.content.pm.ServiceInfo)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scheduleDestroyActivity(
android.os.IBinder
boolean
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scheduleExit()
@dalvik.annotation.Signature (value =(Landroid/content/Intent;Landroid/os/IBinder;Landroid/content/pm/ActivityInfo;Landroid/os/Bundle;Ljava/util/List<Landroid/app/ResultInfo;>;Ljava/util/List<Landroid/content/Intent;>;Z)V )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scheduleLaunchActivity(
android.content.Intent
android.os.IBinder
android.content.pm.ActivityInfo
android.os.Bundle
java.util.List
java.util.List
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scheduleLowMemory()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/content/Intent;>;Landroid/os/IBinder;)V )
public abstract void scheduleNewIntent(
java.util.List
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void schedulePauseActivity(
android.os.IBinder
boolean
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scheduleReceiver(
android.content.Intent
android.content.pm.ActivityInfo
int
java.lang.String
android.os.Bundle
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scheduleRegisteredReceiver(
android.app.IIntentReceiver
android.content.Intent
int
java.lang.String
android.os.Bundle
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Landroid/os/IBinder;Ljava/util/List<Landroid/app/ResultInfo;>;Ljava/util/List<Landroid/content/Intent;>;IZ)V )
public abstract void scheduleRelaunchActivity(
android.os.IBinder
java.util.List
java.util.List
int
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scheduleResumeActivity(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Landroid/os/IBinder;Ljava/util/List<Landroid/app/ResultInfo;>;)V )
public abstract void scheduleSendResult(
android.os.IBinder
java.util.List)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scheduleServiceArgs(
android.os.IBinder
int
android.content.Intent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scheduleStopActivity(
android.os.IBinder
boolean
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scheduleStopService(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scheduleUnbindService(
android.os.IBinder
android.content.Intent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scheduleWindowVisibility(
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void updateTimeZone()

________________CLASS________________


public abstract class android.app.ApplicationThreadNative extends android.os.Binder implements android.app.IApplicationThread

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static android.app.IApplicationThread asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
@dalvik.annotation.InnerClass (accessFlags =18 name =ApplicationThread )
final class android.app.ActivityThread$ApplicationThread extends android.app.ApplicationThreadNative

----------------FIELDS----------------

private static final java.lang.String HEAP_COLUMN

private static final java.lang.String ONE_COUNT_COLUMN

private static final java.lang.String TWO_COUNT_COLUMNS

final android.app.ActivityThread this$0
----------------METHODS----------------

private void <init>(
android.app.ActivityThread)

 void <init>(
android.app.ActivityThread
android.app.ActivityThread$1)

private transient void printRow(
java.io.PrintWriter
java.lang.String
java.lang.Object[])
@dalvik.annotation.Signature (value =(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/util/List<Landroid/content/pm/ProviderInfo;>;Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/IInstrumentationWatcher;ILandroid/content/res/Configuration;Ljava/util/Map<Ljava/lang/String;Landroid/os/IBinder;>;)V )
public final void bindApplication(
java.lang.String
android.content.pm.ApplicationInfo
java.util.List
android.content.ComponentName
java.lang.String
android.os.Bundle
android.app.IInstrumentationWatcher
int
android.content.res.Configuration
java.util.Map)

protected void dump(
java.io.FileDescriptor
java.io.PrintWriter
java.lang.String[])

public void dumpService(
java.io.FileDescriptor
android.os.IBinder
java.lang.String[])

public void processInBackground()

public void requestPss()

public void requestThumbnail(
android.os.IBinder)

public void scheduleActivityConfigurationChanged(
android.os.IBinder)

public final void scheduleBindService(
android.os.IBinder
android.content.Intent
boolean)

public void scheduleConfigurationChanged(
android.content.res.Configuration)

public final void scheduleCreateService(
android.os.IBinder
android.content.pm.ServiceInfo)

public final void scheduleDestroyActivity(
android.os.IBinder
boolean
int)

public final void scheduleExit()
@dalvik.annotation.Signature (value =(Landroid/content/Intent;Landroid/os/IBinder;Landroid/content/pm/ActivityInfo;Landroid/os/Bundle;Ljava/util/List<Landroid/app/ResultInfo;>;Ljava/util/List<Landroid/content/Intent;>;Z)V )
public final void scheduleLaunchActivity(
android.content.Intent
android.os.IBinder
android.content.pm.ActivityInfo
android.os.Bundle
java.util.List
java.util.List
boolean)

public void scheduleLowMemory()
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/content/Intent;>;Landroid/os/IBinder;)V )
public final void scheduleNewIntent(
java.util.List
android.os.IBinder)

public final void schedulePauseActivity(
android.os.IBinder
boolean
int)

public final void scheduleReceiver(
android.content.Intent
android.content.pm.ActivityInfo
int
java.lang.String
android.os.Bundle
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void scheduleRegisteredReceiver(
android.app.IIntentReceiver
android.content.Intent
int
java.lang.String
android.os.Bundle
boolean)
@dalvik.annotation.Signature (value =(Landroid/os/IBinder;Ljava/util/List<Landroid/app/ResultInfo;>;Ljava/util/List<Landroid/content/Intent;>;IZ)V )
public final void scheduleRelaunchActivity(
android.os.IBinder
java.util.List
java.util.List
int
boolean)

public final void scheduleResumeActivity(
android.os.IBinder)
@dalvik.annotation.Signature (value =(Landroid/os/IBinder;Ljava/util/List<Landroid/app/ResultInfo;>;)V )
public final void scheduleSendResult(
android.os.IBinder
java.util.List)

public final void scheduleServiceArgs(
android.os.IBinder
int
android.content.Intent)

public final void scheduleStopActivity(
android.os.IBinder
boolean
int)

public final void scheduleStopService(
android.os.IBinder)

public final void scheduleUnbindService(
android.os.IBinder
android.content.Intent)

public final void scheduleWindowVisibility(
android.os.IBinder
boolean)

public void updateTimeZone()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
@dalvik.annotation.InnerClass (accessFlags =26 name =BindServiceData )
final class android.app.ActivityThread$BindServiceData extends java.lang.Object

----------------FIELDS----------------

 android.content.Intent intent

 boolean rebind

 android.os.IBinder token
----------------METHODS----------------

private void <init>()

 void <init>(
android.app.ActivityThread$1)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
@dalvik.annotation.InnerClass (accessFlags =26 name =ContextCleanupInfo )
final class android.app.ActivityThread$ContextCleanupInfo extends java.lang.Object

----------------FIELDS----------------

 android.app.ApplicationContext context

 java.lang.String what

 java.lang.String who
----------------METHODS----------------

private void <init>()

 void <init>(
android.app.ActivityThread$1)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =CreateServiceData )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
final class android.app.ActivityThread$CreateServiceData extends java.lang.Object

----------------FIELDS----------------

 android.content.pm.ServiceInfo info

 android.content.Intent intent

 android.os.IBinder token
----------------METHODS----------------

private void <init>()

 void <init>(
android.app.ActivityThread$1)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
@dalvik.annotation.InnerClass (accessFlags =26 name =DumpServiceInfo )
final class android.app.ActivityThread$DumpServiceInfo extends java.lang.Object

----------------FIELDS----------------

 java.lang.String[] args

 boolean dumped

 java.io.FileDescriptor fd

 android.os.IBinder service
----------------METHODS----------------

private void <init>()

 void <init>(
android.app.ActivityThread$1)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/os/MessageQueue; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =IdleHandler )
public abstract interface class android.os.MessageQueue$IdleHandler extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean queueIdle()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16 name =GcIdler )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
final class android.app.ActivityThread$GcIdler extends java.lang.Object implements android.os.MessageQueue$IdleHandler

----------------FIELDS----------------

final android.app.ActivityThread this$0
----------------METHODS----------------

 void <init>(
android.app.ActivityThread)

public final boolean queueIdle()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/Handler$1;Landroid/os/Handler$MessengerImpl; )
public class android.os.Handler extends java.lang.Object

----------------FIELDS----------------

private static final boolean FIND_POTENTIAL_LEAKS

private static final java.lang.String TAG

final android.os.Looper mLooper

 android.os.IMessenger mMessenger

final android.os.MessageQueue mQueue
----------------METHODS----------------

public void <init>()

public void <init>(
android.os.Looper)

private final android.os.Message getPostMessage(
java.lang.Runnable)

private final android.os.Message getPostMessage(
java.lang.Runnable
java.lang.Object)

private final void handleCallback(
android.os.Message)

public void dispatchMessage(
android.os.Message)

public final void dump(
android.util.Printer
java.lang.String)

final android.os.IMessenger getIMessenger()

public final android.os.Looper getLooper()

public void handleMessage(
android.os.Message)

public final boolean hasMessages(
int)

public final boolean hasMessages(
int
java.lang.Object)

public final android.os.Message obtainMessage()

public final android.os.Message obtainMessage(
int)

public final android.os.Message obtainMessage(
int
int
int)

public final android.os.Message obtainMessage(
int
int
int
java.lang.Object)

public final android.os.Message obtainMessage(
int
java.lang.Object)

public final boolean post(
java.lang.Runnable)

public final boolean postAtFrontOfQueue(
java.lang.Runnable)

public final boolean postAtTime(
java.lang.Runnable
long)

public final boolean postAtTime(
java.lang.Runnable
java.lang.Object
long)

public final boolean postDelayed(
java.lang.Runnable
long)

public final void removeCallbacks(
java.lang.Runnable)

public final void removeCallbacks(
java.lang.Runnable
java.lang.Object)

public final void removeCallbacksAndMessages(
java.lang.Object)

public final void removeMessages(
int)

public final void removeMessages(
int
java.lang.Object)

public final boolean sendEmptyMessage(
int)

public final boolean sendEmptyMessageAtTime(
int
long)

public final boolean sendEmptyMessageDelayed(
int
long)

public final boolean sendMessage(
android.os.Message)

public final boolean sendMessageAtFrontOfQueue(
android.os.Message)

public boolean sendMessageAtTime(
android.os.Message
long)

public final boolean sendMessageDelayed(
android.os.Message
long)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
@dalvik.annotation.InnerClass (accessFlags =18 name =H )
final class android.app.ActivityThread$H extends android.os.Handler

----------------FIELDS----------------

public static final int ACTIVITY_CONFIGURATION_CHANGED

public static final int BIND_APPLICATION

public static final int BIND_SERVICE

public static final int CLEAN_UP_CONTEXT

public static final int CONFIGURATION_CHANGED

public static final int CREATE_SERVICE

public static final int DESTROY_ACTIVITY

public static final int DUMP_SERVICE

public static final int EXIT_APPLICATION

public static final int GC_WHEN_IDLE

public static final int HIDE_WINDOW

public static final int LAUNCH_ACTIVITY

public static final int LOW_MEMORY

public static final int NEW_INTENT

public static final int PAUSE_ACTIVITY

public static final int PAUSE_ACTIVITY_FINISHING

public static final int RECEIVER

public static final int RELAUNCH_ACTIVITY

public static final int REQUEST_THUMBNAIL

public static final int RESUME_ACTIVITY

public static final int SEND_RESULT

public static final int SERVICE_ARGS

public static final int SHOW_WINDOW

public static final int STOP_ACTIVITY_HIDE

public static final int STOP_ACTIVITY_SHOW

public static final int STOP_SERVICE

public static final int UNBIND_SERVICE

final android.app.ActivityThread this$0
----------------METHODS----------------

private void <init>(
android.app.ActivityThread)

 void <init>(
android.app.ActivityThread
android.app.ActivityThread$1)

 java.lang.String codeToString(
int)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =18 name =Idler )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
final class android.app.ActivityThread$Idler extends java.lang.Object implements android.os.MessageQueue$IdleHandler

----------------FIELDS----------------

final android.app.ActivityThread this$0
----------------METHODS----------------

private void <init>(
android.app.ActivityThread)

 void <init>(
android.app.ActivityThread
android.app.ActivityThread$1)

public final boolean queueIdle()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =NewIntentData )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
final class android.app.ActivityThread$NewIntentData extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/content/Intent;>; )
 java.util.List intents

 android.os.IBinder token
----------------METHODS----------------

private void <init>()

 void <init>(
android.app.ActivityThread$1)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16 name =Args )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread$PackageInfo$ReceiverDispatcher; )
final class android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

private int mCurCode

private java.lang.String mCurData

private android.content.Intent mCurIntent

private android.os.Bundle mCurMap

private boolean mCurOrdered

final android.app.ActivityThread$PackageInfo$ReceiverDispatcher this$0
----------------METHODS----------------

 void <init>(
android.app.ActivityThread$PackageInfo$ReceiverDispatcher)

static android.content.Intent access$102(
android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args
android.content.Intent)

static int access$200(
android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args)

static int access$202(
android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args
int)

static java.lang.String access$300(
android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args)

static java.lang.String access$302(
android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args
java.lang.String)

static android.os.Bundle access$400(
android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args)

static android.os.Bundle access$402(
android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args
android.os.Bundle)

static boolean access$502(
android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args
boolean)

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/IIntentReceiver$Stub; )
public abstract interface class android.app.IIntentReceiver extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void performReceive(
android.content.Intent
int
java.lang.String
android.os.Bundle
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/app/IIntentReceiver$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IIntentReceiver; )
public abstract class android.app.IIntentReceiver$Stub extends android.os.Binder implements android.app.IIntentReceiver

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_performReceive
----------------METHODS----------------

public void <init>()

public static android.app.IIntentReceiver asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =24 name =InnerReceiver )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread$PackageInfo$ReceiverDispatcher; )
final class android.app.ActivityThread$PackageInfo$ReceiverDispatcher$InnerReceiver extends android.app.IIntentReceiver$Stub

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/lang/ref/WeakReference<Landroid/app/ActivityThread$PackageInfo$ReceiverDispatcher;>; )
final java.lang.ref.WeakReference mDispatcher

final android.app.ActivityThread$PackageInfo$ReceiverDispatcher mStrongRef
----------------METHODS----------------

 void <init>(
android.app.ActivityThread$PackageInfo$ReceiverDispatcher
boolean)

public void performReceive(
android.content.Intent
int
java.lang.String
android.os.Bundle
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/ActivityThread$PackageInfo$ReceiverDispatcher$Args;Landroid/app/ActivityThread$PackageInfo$ReceiverDispatcher$InnerReceiver; )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread$PackageInfo; )
@dalvik.annotation.InnerClass (accessFlags =24 name =ReceiverDispatcher )
final class android.app.ActivityThread$PackageInfo$ReceiverDispatcher extends java.lang.Object

----------------FIELDS----------------

final android.os.Handler mActivityThread

final android.content.Context mContext

final android.app.IIntentReceiver$Stub mIIntentReceiver

final android.app.Instrumentation mInstrumentation

final android.app.IntentReceiverLeaked mLocation

final android.content.BroadcastReceiver mReceiver

final boolean mRegistered

 java.lang.RuntimeException mUnregisterLocation
----------------METHODS----------------

 void <init>(
android.content.BroadcastReceiver
android.content.Context
android.os.Handler
android.app.Instrumentation
boolean)

 android.app.IIntentReceiver getIIntentReceiver()

 android.content.BroadcastReceiver getIntentReceiver()

 android.app.IntentReceiverLeaked getLocation()

 java.lang.RuntimeException getUnregisterLocation()

public void performReceive(
android.content.Intent
int
java.lang.String
android.os.Bundle
boolean)

 void setUnregisterLocation(
java.lang.RuntimeException)

 void validate(
android.content.Context
android.os.Handler)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread$PackageInfo$ServiceDispatcher; )
@dalvik.annotation.InnerClass (accessFlags =10 name =ConnectionInfo )
 class android.app.ActivityThread$PackageInfo$ServiceDispatcher$ConnectionInfo extends java.lang.Object

----------------FIELDS----------------

 android.os.IBinder binder

 android.os.IBinder$DeathRecipient deathMonitor
----------------METHODS----------------

private void <init>()

 void <init>(
android.app.ActivityThread$1)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =DeathRecipient )
@dalvik.annotation.EnclosingClass (value =Landroid/os/IBinder; )
public abstract interface class android.os.IBinder$DeathRecipient extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void binderDied()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread$PackageInfo$ServiceDispatcher; )
@dalvik.annotation.InnerClass (accessFlags =18 name =DeathMonitor )
final class android.app.ActivityThread$PackageInfo$ServiceDispatcher$DeathMonitor extends java.lang.Object implements android.os.IBinder$DeathRecipient

----------------FIELDS----------------

final android.content.ComponentName mName

final android.os.IBinder mService

final android.app.ActivityThread$PackageInfo$ServiceDispatcher this$0
----------------METHODS----------------

 void <init>(
android.app.ActivityThread$PackageInfo$ServiceDispatcher
android.content.ComponentName
android.os.IBinder)

public void binderDied()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/IServiceConnection$Stub; )
public abstract interface class android.app.IServiceConnection extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void connected(
android.content.ComponentName
android.os.IBinder)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/app/IServiceConnection$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IServiceConnection; )
public abstract class android.app.IServiceConnection$Stub extends android.os.Binder implements android.app.IServiceConnection

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_connected
----------------METHODS----------------

public void <init>()

public static android.app.IServiceConnection asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =InnerConnection )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread$PackageInfo$ServiceDispatcher; )
 class android.app.ActivityThread$PackageInfo$ServiceDispatcher$InnerConnection extends android.app.IServiceConnection$Stub

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/lang/ref/WeakReference<Landroid/app/ActivityThread$PackageInfo$ServiceDispatcher;>; )
final java.lang.ref.WeakReference mDispatcher
----------------METHODS----------------

 void <init>(
android.app.ActivityThread$PackageInfo$ServiceDispatcher)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void connected(
android.content.ComponentName
android.os.IBinder)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread$PackageInfo$ServiceDispatcher; )
@dalvik.annotation.InnerClass (accessFlags =18 name =RunConnection )
final class android.app.ActivityThread$PackageInfo$ServiceDispatcher$RunConnection extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final int mCommand

final android.content.ComponentName mName

final android.os.IBinder mService

final android.app.ActivityThread$PackageInfo$ServiceDispatcher this$0
----------------METHODS----------------

 void <init>(
android.app.ActivityThread$PackageInfo$ServiceDispatcher
android.content.ComponentName
android.os.IBinder
int)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =24 name =ServiceDispatcher )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread$PackageInfo; )
@dalvik.annotation.MemberClasses (value =Landroid/app/ActivityThread$PackageInfo$ServiceDispatcher$DeathMonitor;Landroid/app/ActivityThread$PackageInfo$ServiceDispatcher$RunConnection;Landroid/app/ActivityThread$PackageInfo$ServiceDispatcher$InnerConnection;Landroid/app/ActivityThread$PackageInfo$ServiceDispatcher$ConnectionInfo; )
final class android.app.ActivityThread$PackageInfo$ServiceDispatcher extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/content/ComponentName;Landroid/app/ActivityThread$PackageInfo$ServiceDispatcher$ConnectionInfo;>; )
private final java.util.HashMap mActiveConnections

private final android.os.Handler mActivityThread

private final android.content.ServiceConnection mConnection

private final android.content.Context mContext

private boolean mDied

private final int mFlags

private final android.app.ActivityThread$PackageInfo$ServiceDispatcher$InnerConnection mIServiceConnection

private final android.app.ServiceConnectionLeaked mLocation

private java.lang.RuntimeException mUnbindLocation
----------------METHODS----------------

 void <init>(
android.content.ServiceConnection
android.content.Context
android.os.Handler
int)

public void connected(
android.content.ComponentName
android.os.IBinder)

public void death(
android.content.ComponentName
android.os.IBinder)

public void doConnected(
android.content.ComponentName
android.os.IBinder)

public void doDeath(
android.content.ComponentName
android.os.IBinder)

 void doForget()

 int getFlags()

 android.app.IServiceConnection getIServiceConnection()

 android.app.ServiceConnectionLeaked getLocation()

 android.content.ServiceConnection getServiceConnection()

 java.lang.RuntimeException getUnbindLocation()

 void setUnbindLocation(
java.lang.RuntimeException)

 void validate(
android.content.Context
android.os.Handler)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =PackageInfo )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
@dalvik.annotation.MemberClasses (value =Landroid/app/ActivityThread$PackageInfo$ServiceDispatcher;Landroid/app/ActivityThread$PackageInfo$ReceiverDispatcher; )
public final class android.app.ActivityThread$PackageInfo extends java.lang.Object

----------------FIELDS----------------

private final android.app.ActivityThread mActivityThread

private final java.lang.String mAppDir

private android.app.Application mApplication

private final android.content.pm.ApplicationInfo mApplicationInfo

private final java.lang.ClassLoader mBaseClassLoader

private java.lang.ClassLoader mClassLoader

 int mClientCount

private final java.lang.String mDataDir

private final java.io.File mDataDirFile

private final boolean mIncludeCode

private final java.lang.String mPackageName
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/content/Context;Ljava/util/HashMap<Landroid/content/BroadcastReceiver;Landroid/app/ActivityThread$PackageInfo$ReceiverDispatcher;>;>; )
private final java.util.HashMap mReceivers

private final java.lang.String mResDir

private android.content.res.Resources mResources

private final boolean mSecurityViolation
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/content/Context;Ljava/util/HashMap<Landroid/content/ServiceConnection;Landroid/app/ActivityThread$PackageInfo$ServiceDispatcher;>;>; )
private final java.util.HashMap mServices

private final java.lang.String[] mSharedLibraries
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/content/Context;Ljava/util/HashMap<Landroid/content/ServiceConnection;Landroid/app/ActivityThread$PackageInfo$ServiceDispatcher;>;>; )
private final java.util.HashMap mUnboundServices
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/content/Context;Ljava/util/HashMap<Landroid/content/BroadcastReceiver;Landroid/app/ActivityThread$PackageInfo$ReceiverDispatcher;>;>; )
private final java.util.HashMap mUnregisteredReceivers
----------------METHODS----------------

public void <init>(
android.app.ActivityThread
android.content.pm.ApplicationInfo
android.app.ActivityThread
java.lang.ClassLoader
boolean
boolean)

public void <init>(
android.app.ActivityThread
java.lang.String
android.content.Context)

static android.content.res.Resources access$3700(
android.app.ActivityThread$PackageInfo)

private static java.lang.String combineLibs(
java.lang.String[]
java.lang.String[])

private static java.lang.String[] getLibrariesFor(
java.lang.String)

public android.app.IIntentReceiver forgetReceiverDispatcher(
android.content.Context
android.content.BroadcastReceiver)

public final android.app.IServiceConnection forgetServiceDispatcher(
android.content.Context
android.content.ServiceConnection)

public java.lang.String getAppDir()

public android.content.res.AssetManager getAssets(
android.app.ActivityThread)

public java.lang.ClassLoader getClassLoader()

public java.lang.String getDataDir()

public java.io.File getDataDirFile()

public java.lang.String getPackageName()

public android.app.IIntentReceiver getReceiverDispatcher(
android.content.BroadcastReceiver
android.content.Context
android.os.Handler
android.app.Instrumentation
boolean)

public java.lang.String getResDir()

public android.content.res.Resources getResources(
android.app.ActivityThread)

public final android.app.IServiceConnection getServiceDispatcher(
android.content.ServiceConnection
android.content.Context
android.os.Handler
int)

public boolean isSecurityViolation()

public android.app.Application makeApplication()

public void removeContextRegistrations(
android.content.Context
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
@dalvik.annotation.InnerClass (accessFlags =18 name =ProviderRecord )
final class android.app.ActivityThread$ProviderRecord extends java.lang.Object implements android.os.IBinder$DeathRecipient

----------------FIELDS----------------

final android.content.ContentProvider mLocalProvider

final java.lang.String mName

final android.content.IContentProvider mProvider

final android.app.ActivityThread this$0
----------------METHODS----------------

 void <init>(
android.app.ActivityThread
java.lang.String
android.content.IContentProvider
android.content.ContentProvider)

public void binderDied()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =18 name =ProviderRefCount )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
final class android.app.ActivityThread$ProviderRefCount extends java.lang.Object

----------------FIELDS----------------

public int count

final android.app.ActivityThread this$0
----------------METHODS----------------

 void <init>(
android.app.ActivityThread
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
@dalvik.annotation.InnerClass (accessFlags =26 name =ReceiverData )
final class android.app.ActivityThread$ReceiverData extends java.lang.Object

----------------FIELDS----------------

 android.content.pm.ActivityInfo info

 android.content.Intent intent

 boolean resultAbort

 int resultCode

 java.lang.String resultData

 android.os.Bundle resultExtras

 boolean sync
----------------METHODS----------------

private void <init>()

 void <init>(
android.app.ActivityThread$1)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =ResultData )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
final class android.app.ActivityThread$ResultData extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/app/ResultInfo;>; )
 java.util.List results

 android.os.IBinder token
----------------METHODS----------------

private void <init>()

 void <init>(
android.app.ActivityThread$1)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =ServiceArgsData )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
final class android.app.ActivityThread$ServiceArgsData extends java.lang.Object

----------------FIELDS----------------

 android.content.Intent args

 int startId

 android.os.IBinder token
----------------METHODS----------------

private void <init>()

 void <init>(
android.app.ActivityThread$1)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =StopInfo )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ActivityThread; )
 class android.app.ActivityThread$StopInfo extends java.lang.Object

----------------FIELDS----------------

 java.lang.CharSequence description

 android.graphics.Bitmap thumbnail
----------------METHODS----------------

private void <init>()

 void <init>(
android.app.ActivityThread$1)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/ActivityThread$1;Landroid/app/ActivityThread$ProviderRefCount;Landroid/app/ActivityThread$StopInfo;Landroid/app/ActivityThread$GcIdler;Landroid/app/ActivityThread$Idler;Landroid/app/ActivityThread$H;Landroid/app/ActivityThread$ApplicationThread;Landroid/app/ActivityThread$ContextCleanupInfo;Landroid/app/ActivityThread$ResultData;Landroid/app/ActivityThread$DumpServiceInfo;Landroid/app/ActivityThread$AppBindData;Landroid/app/ActivityThread$ServiceArgsData;Landroid/app/ActivityThread$BindServiceData;Landroid/app/ActivityThread$CreateServiceData;Landroid/app/ActivityThread$ReceiverData;Landroid/app/ActivityThread$NewIntentData;Landroid/app/ActivityThread$ProviderRecord;Landroid/app/ActivityThread$ActivityRecord;Landroid/app/ActivityThread$PackageInfo; )
public final class android.app.ActivityThread extends java.lang.Object

----------------FIELDS----------------

private static final boolean DEBUG

private static final boolean DEBUG_BROADCAST

private static final int LOG_ON_PAUSE_CALLED

private static final int LOG_ON_RESUME_CALLED

private static final long MIN_TIME_BETWEEN_GCS

private static final java.util.regex.Pattern PATTERN_SEMICOLON

private static final int SQLITE_MEM_RELEASED_EVENT_LOG_TAG

private static final java.lang.String TAG

private static final boolean localLOGV

private static android.app.ApplicationContext mSystemContext

static android.content.pm.IPackageManager sPackageManager

static final java.lang.ThreadLocal sThreadLocal
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/ref/WeakReference<Landroid/content/res/Resources;>;>; )
 java.util.HashMap mActiveResources
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/os/IBinder;Landroid/app/ActivityThread$ActivityRecord;>; )
final java.util.HashMap mActivities
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/app/Application;>; )
final java.util.ArrayList mAllApplications

final android.app.ActivityThread$ApplicationThread mAppThread

 android.app.ActivityThread$AppBindData mBoundApplication

 android.content.res.Configuration mConfiguration

 android.view.Display mDisplay

final android.app.ActivityThread$GcIdler mGcIdler

 boolean mGcIdlerScheduled

final android.app.ActivityThread$H mH

 android.app.Application mInitialApplication

 android.app.Instrumentation mInstrumentation

 java.lang.String mInstrumentationAppDir

 java.lang.String mInstrumentationAppPackage

 java.lang.String mInstrumentedAppDir
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/os/IBinder;Landroid/app/ActivityThread$ProviderRecord;>; )
final java.util.HashMap mLocalProviders

final android.os.Looper mLooper

 android.app.ActivityThread$ActivityRecord mNewActivities

 int mNumVisibleActivities
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/ref/WeakReference<Landroid/app/ActivityThread$PackageInfo;>;>; )
final java.util.HashMap mPackages

 android.content.res.Configuration mPendingConfiguration
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Landroid/app/ActivityThread$ProviderRecord;>; )
final java.util.HashMap mProviderMap
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/os/IBinder;Landroid/app/ActivityThread$ProviderRefCount;>; )
final java.util.HashMap mProviderRefCountMap
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/app/ActivityThread$ActivityRecord;>; )
final java.util.ArrayList mRelaunchingActivities
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/ref/WeakReference<Landroid/app/ActivityThread$PackageInfo;>;>; )
final java.util.HashMap mResourcePackages
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/os/IBinder;Landroid/app/Service;>; )
final java.util.HashMap mServices

 boolean mSystemThread

private int mThumbnailHeight

private int mThumbnailWidth
----------------METHODS----------------

static void <clinit>()

 void <init>()

static android.app.ApplicationContext access$000()

static android.app.ApplicationContext access$002(
android.app.ApplicationContext)

static void access$1800(
android.app.ActivityThread
android.app.ActivityThread$ActivityRecord)

static void access$1900(
android.app.ActivityThread
android.app.ActivityThread$ActivityRecord
int)

static void access$2000(
android.app.ActivityThread
android.os.IBinder
boolean
int)

static void access$2100(
android.app.ActivityThread
android.os.IBinder
boolean
int)

static void access$2200(
android.app.ActivityThread
android.os.IBinder
boolean)

static void access$2300(
android.app.ActivityThread
android.app.ActivityThread$ResultData)

static void access$2400(
android.app.ActivityThread
android.os.IBinder
boolean
int
boolean)

static void access$2500(
android.app.ActivityThread
android.app.ActivityThread$AppBindData)

static void access$2600(
android.app.ActivityThread
android.app.ActivityThread$NewIntentData)

static void access$2700(
android.app.ActivityThread
android.app.ActivityThread$ReceiverData)

static void access$2800(
android.app.ActivityThread
android.app.ActivityThread$CreateServiceData)

static void access$2900(
android.app.ActivityThread
android.app.ActivityThread$BindServiceData)

static void access$3000(
android.app.ActivityThread
android.app.ActivityThread$BindServiceData)

static void access$3100(
android.app.ActivityThread
android.app.ActivityThread$ServiceArgsData)

static void access$3200(
android.app.ActivityThread
android.os.IBinder)

static void access$3300(
android.app.ActivityThread
android.os.IBinder)

static void access$3400(
android.app.ActivityThread
android.app.ActivityThread$DumpServiceInfo)

static void access$700(
android.app.ActivityThread
int
java.lang.Object
int)

static void access$800(
android.app.ActivityThread
int
java.lang.Object
int
int)

static void access$900(
android.app.ActivityThread
int
java.lang.Object)

private final void attach(
boolean)

private final android.graphics.Bitmap createThumbnailBitmap(
android.app.ActivityThread$ActivityRecord)

public static final android.app.ActivityThread currentActivityThread()

public static final java.lang.String currentPackageName()
@dalvik.annotation.Signature (value =(Landroid/app/ActivityThread$ActivityRecord;Ljava/util/List<Landroid/content/Intent;>;)V )
private final void deliverNewIntents(
android.app.ActivityThread$ActivityRecord
java.util.List)
@dalvik.annotation.Signature (value =(Landroid/app/ActivityThread$ActivityRecord;Ljava/util/List<Landroid/app/ResultInfo;>;)V )
private final void deliverResults(
android.app.ActivityThread$ActivityRecord
java.util.List)

private final void detach()

private final android.app.ActivityThread$PackageInfo getPackageInfo(
android.content.pm.ApplicationInfo
java.lang.ClassLoader
boolean
boolean)

public static android.content.pm.IPackageManager getPackageManager()

private final android.content.IContentProvider getProvider(
android.content.Context
java.lang.String)

private final void handleBindApplication(
android.app.ActivityThread$AppBindData)

private final void handleBindService(
android.app.ActivityThread$BindServiceData)

private final void handleCreateService(
android.app.ActivityThread$CreateServiceData)

private final void handleDestroyActivity(
android.os.IBinder
boolean
int
boolean)

private void handleDumpService(
android.app.ActivityThread$DumpServiceInfo)

private final void handleLaunchActivity(
android.app.ActivityThread$ActivityRecord)

private final void handleNewIntent(
android.app.ActivityThread$NewIntentData)

private final void handlePauseActivity(
android.os.IBinder
boolean
int)

private final void handleReceiver(
android.app.ActivityThread$ReceiverData)

private final void handleRelaunchActivity(
android.app.ActivityThread$ActivityRecord
int)

private final void handleRequestThumbnail(
android.os.IBinder)

private final void handleSendResult(
android.app.ActivityThread$ResultData)

private final void handleServiceArgs(
android.app.ActivityThread$ServiceArgsData)

private final void handleStopActivity(
android.os.IBinder
boolean
int)

private final void handleStopService(
android.os.IBinder)

private final void handleUnbindService(
android.app.ActivityThread$BindServiceData)

private final void handleWindowVisibility(
android.os.IBinder
boolean)
@dalvik.annotation.Signature (value =(Landroid/content/Context;Ljava/util/List<Landroid/content/pm/ProviderInfo;>;)V )
private final void installContentProviders(
android.content.Context
java.util.List)

private final android.content.IContentProvider installProvider(
android.content.Context
android.content.IContentProvider
android.content.pm.ProviderInfo
boolean)

public static final void main(
java.lang.String[])

private final void performConfigurationChanged(
android.content.ComponentCallbacks
android.content.res.Configuration)

private final android.app.ActivityThread$ActivityRecord performDestroyActivity(
android.os.IBinder
boolean
int
boolean)

private final android.app.Activity performLaunchActivity(
android.app.ActivityThread$ActivityRecord)

private final void performStopActivityInner(
android.app.ActivityThread$ActivityRecord
android.app.ActivityThread$StopInfo
boolean)

private final void queueOrSendMessage(
int
java.lang.Object)

private final void queueOrSendMessage(
int
java.lang.Object
int)

private final void queueOrSendMessage(
int
java.lang.Object
int
int)

public static final android.app.ActivityThread systemMain()

private final void updateVisibility(
android.app.ActivityThread$ActivityRecord
boolean)

public final android.content.IContentProvider acquireProvider(
android.content.Context
java.lang.String)
@dalvik.annotation.Signature (value =(ZLandroid/content/res/Configuration;)Ljava/util/ArrayList<Landroid/content/ComponentCallbacks;>; )
 java.util.ArrayList collectComponentCallbacksLocked(
boolean
android.content.res.Configuration)

 void doGcIfNeeded()

final void finishInstrumentation(
int
android.os.Bundle)

public final android.app.Activity getActivity(
android.os.IBinder)

public android.app.Application getApplication()

public android.app.ActivityThread$ApplicationThread getApplicationThread()

public android.content.res.Configuration getConfiguration()

 android.util.DisplayMetrics getDisplayMetricsLocked()

final android.os.Handler getHandler()

public android.app.Instrumentation getInstrumentation()

public android.os.Looper getLooper()

public final android.app.ActivityThread$PackageInfo getPackageInfo(
android.content.pm.ApplicationInfo
int)

public final android.app.ActivityThread$PackageInfo getPackageInfo(
java.lang.String
int)

public final android.app.ActivityThread$PackageInfo getPackageInfoNoCheck(
android.content.pm.ApplicationInfo)

public java.lang.String getProfileFilePath()

public android.app.ApplicationContext getSystemContext()

 android.content.res.Resources getTopLevelResources(
java.lang.String)

final void handleActivityConfigurationChanged(
android.os.IBinder)

final void handleConfigurationChanged(
android.content.res.Configuration)

final void handleLowMemory()

final void handleResumeActivity(
android.os.IBinder
boolean)

public final boolean hasPackageInfo(
java.lang.String)

public final void installSystemProviders(
java.util.List)

public boolean isProfiling()

public final android.app.ActivityThread$ActivityRecord performDestroyActivity(
android.os.IBinder
boolean)
@dalvik.annotation.Signature (value =(Landroid/os/IBinder;Ljava/util/List<Landroid/content/Intent;>;)V )
public final void performNewIntents(
android.os.IBinder
java.util.List)

final android.os.Bundle performPauseActivity(
android.app.ActivityThread$ActivityRecord
boolean
boolean)

final android.os.Bundle performPauseActivity(
android.os.IBinder
boolean
boolean)

final void performRestartActivity(
android.os.IBinder)

public final android.app.ActivityThread$ActivityRecord performResumeActivity(
android.os.IBinder
boolean)

final void performStopActivity(
android.os.IBinder)

public final boolean releaseProvider(
android.content.IContentProvider)

final void removeDeadProvider(
java.lang.String
android.content.IContentProvider)

final void removeDeadProviderLocked(
java.lang.String
android.content.IContentProvider)

public final void removeProviderLocked(
android.content.IContentProvider)

public final android.content.pm.ActivityInfo resolveActivityInfo(
android.content.Intent)

final void scheduleContextCleanup(
android.app.ApplicationContext
java.lang.String
java.lang.String)

 void scheduleGcIdler()

public final void sendActivityResult(
android.os.IBinder
java.lang.String
int
int
android.content.Intent)

public final android.app.Activity startActivityNow(
android.app.Activity
java.lang.String
android.content.Intent
android.content.pm.ActivityInfo
android.os.IBinder
android.os.Bundle)

public final android.app.Activity startActivityNow(
android.app.Activity
java.lang.String
android.content.Intent
android.os.IBinder
android.os.Bundle)

 void unscheduleGcIdler()

________________CLASS________________


public class android.app.AlarmManager extends java.lang.Object

----------------FIELDS----------------

public static final int ELAPSED_REALTIME

public static final int ELAPSED_REALTIME_WAKEUP

public static final int RTC

public static final int RTC_WAKEUP

private static android.app.IAlarmManager mService
----------------METHODS----------------

static void <clinit>()

 void <init>()

public void cancel(
android.app.PendingIntent)

public void set(
int
long
android.app.PendingIntent)

public void setRepeating(
int
long
long
android.app.PendingIntent)

public void setTimeZone(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/AlertDialog; )
@dalvik.annotation.InnerClass (accessFlags =9 name =Builder )
public class android.app.AlertDialog$Builder extends java.lang.Object

----------------FIELDS----------------

private final com.android.internal.app.AlertController$AlertParams P
----------------METHODS----------------

public void <init>(
android.content.Context)

public android.app.AlertDialog create()

public android.app.AlertDialog$Builder setAdapter(
android.widget.ListAdapter
android.content.DialogInterface$OnClickListener)

public android.app.AlertDialog$Builder setCancelable(
boolean)

public android.app.AlertDialog$Builder setCursor(
android.database.Cursor
android.content.DialogInterface$OnClickListener
java.lang.String)

public android.app.AlertDialog$Builder setCustomTitle(
android.view.View)

public android.app.AlertDialog$Builder setIcon(
int)

public android.app.AlertDialog$Builder setIcon(
android.graphics.drawable.Drawable)

public android.app.AlertDialog$Builder setInverseBackgroundForced(
boolean)

public android.app.AlertDialog$Builder setItems(
int
android.content.DialogInterface$OnClickListener)

public android.app.AlertDialog$Builder setItems(
java.lang.CharSequence[]
android.content.DialogInterface$OnClickListener)

public android.app.AlertDialog$Builder setMessage(
int)

public android.app.AlertDialog$Builder setMessage(
java.lang.CharSequence)

public android.app.AlertDialog$Builder setMultiChoiceItems(
int
boolean[]
android.content.DialogInterface$OnMultiChoiceClickListener)

public android.app.AlertDialog$Builder setMultiChoiceItems(
android.database.Cursor
java.lang.String
java.lang.String
android.content.DialogInterface$OnMultiChoiceClickListener)

public android.app.AlertDialog$Builder setMultiChoiceItems(
java.lang.CharSequence[]
boolean[]
android.content.DialogInterface$OnMultiChoiceClickListener)

public android.app.AlertDialog$Builder setNegativeButton(
int
android.content.DialogInterface$OnClickListener)

public android.app.AlertDialog$Builder setNegativeButton(
java.lang.CharSequence
android.content.DialogInterface$OnClickListener)

public android.app.AlertDialog$Builder setNeutralButton(
int
android.content.DialogInterface$OnClickListener)

public android.app.AlertDialog$Builder setNeutralButton(
java.lang.CharSequence
android.content.DialogInterface$OnClickListener)

public android.app.AlertDialog$Builder setOnCancelListener(
android.content.DialogInterface$OnCancelListener)

public android.app.AlertDialog$Builder setOnItemSelectedListener(
android.widget.AdapterView$OnItemSelectedListener)

public android.app.AlertDialog$Builder setOnKeyListener(
android.content.DialogInterface$OnKeyListener)

public android.app.AlertDialog$Builder setPositiveButton(
int
android.content.DialogInterface$OnClickListener)

public android.app.AlertDialog$Builder setPositiveButton(
java.lang.CharSequence
android.content.DialogInterface$OnClickListener)

public android.app.AlertDialog$Builder setSingleChoiceItems(
int
int
android.content.DialogInterface$OnClickListener)

public android.app.AlertDialog$Builder setSingleChoiceItems(
android.database.Cursor
int
java.lang.String
android.content.DialogInterface$OnClickListener)

public android.app.AlertDialog$Builder setSingleChoiceItems(
android.widget.ListAdapter
int
android.content.DialogInterface$OnClickListener)

public android.app.AlertDialog$Builder setSingleChoiceItems(
java.lang.CharSequence[]
int
android.content.DialogInterface$OnClickListener)

public android.app.AlertDialog$Builder setTitle(
int)

public android.app.AlertDialog$Builder setTitle(
java.lang.CharSequence)

public android.app.AlertDialog$Builder setView(
android.view.View)

public android.app.AlertDialog show()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/DialogInterface$OnKeyListener;Landroid/content/DialogInterface$OnMultiChoiceClickListener;Landroid/content/DialogInterface$OnClickListener;Landroid/content/DialogInterface$OnDismissListener;Landroid/content/DialogInterface$OnCancelListener; )
public abstract interface class android.content.DialogInterface extends java.lang.Object

----------------FIELDS----------------

public static final int BUTTON1

public static final int BUTTON2

public static final int BUTTON3
----------------METHODS----------------

public abstract void cancel()

public abstract void dismiss()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/Dialog$DismissCancelHandler; )
public class android.app.Dialog extends java.lang.Object implements android.content.DialogInterface, android.view.Window$Callback, android.view.KeyEvent$Callback, android.view.View$OnCreateContextMenuListener

----------------FIELDS----------------

private static final int CANCEL

private static final java.lang.String DIALOG_HIERARCHY_TAG

private static final java.lang.String DIALOG_SHOWING_TAG

private static final int DISMISS

private static final java.lang.String LOG_TAG

private android.os.Message mCancelMessage

protected boolean mCancelable

private boolean mCanceledOnTouchOutside

final android.content.Context mContext

private boolean mCreated

 android.view.View mDecor

private final java.lang.Runnable mDismissAction

private android.os.Handler mDismissCancelHandler

private android.os.Message mDismissMessage

private final android.os.Handler mHandler

private android.content.DialogInterface$OnKeyListener mOnKeyListener

private android.app.Activity mOwnerActivity

private boolean mShowing

private final java.lang.Thread mUiThread

 android.view.Window mWindow

final android.view.WindowManager mWindowManager
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
int)

protected void <init>(
android.content.Context
boolean
android.content.DialogInterface$OnCancelListener)
@java.lang.Deprecated
protected void <init>(
android.content.Context
boolean
android.os.Message)

static void access$000(
android.app.Dialog)

private void dismissDialog()

private boolean isOutOfBounds(
android.view.MotionEvent)

private void sendDismissMessage()

public void addContentView(
android.view.View
android.view.ViewGroup$LayoutParams)

public void cancel()

public void closeOptionsMenu()

public void dismiss()

public boolean dispatchKeyEvent(
android.view.KeyEvent)

 void dispatchOnCreate(
android.os.Bundle)

public boolean dispatchTouchEvent(
android.view.MotionEvent)

public boolean dispatchTrackballEvent(
android.view.MotionEvent)

public android.view.View findViewById(
int)

public final android.content.Context getContext()

public android.view.View getCurrentFocus()

public android.view.LayoutInflater getLayoutInflater()

public final android.app.Activity getOwnerActivity()

public final int getVolumeControlStream()

public android.view.Window getWindow()

public void hide()

public boolean isShowing()

public void onContentChanged()

public boolean onContextItemSelected(
android.view.MenuItem)

public void onContextMenuClosed(
android.view.Menu)

protected void onCreate(
android.os.Bundle)

public void onCreateContextMenu(
android.view.ContextMenu
android.view.View
android.view.ContextMenu$ContextMenuInfo)

public boolean onCreateOptionsMenu(
android.view.Menu)

public boolean onCreatePanelMenu(
int
android.view.Menu)

public android.view.View onCreatePanelView(
int)

public boolean onKeyDown(
int
android.view.KeyEvent)

public boolean onKeyMultiple(
int
int
android.view.KeyEvent)

public boolean onKeyUp(
int
android.view.KeyEvent)

public boolean onMenuItemSelected(
int
android.view.MenuItem)

public boolean onMenuOpened(
int
android.view.Menu)

public boolean onOptionsItemSelected(
android.view.MenuItem)

public void onOptionsMenuClosed(
android.view.Menu)

public void onPanelClosed(
int
android.view.Menu)

public boolean onPrepareOptionsMenu(
android.view.Menu)

public boolean onPreparePanel(
int
android.view.View
android.view.Menu)

public void onRestoreInstanceState(
android.os.Bundle)

public android.os.Bundle onSaveInstanceState()

public boolean onSearchRequested()

protected void onStart()

protected void onStop()

public boolean onTouchEvent(
android.view.MotionEvent)

public boolean onTrackballEvent(
android.view.MotionEvent)

public void onWindowAttributesChanged(
android.view.WindowManager$LayoutParams)

public void onWindowFocusChanged(
boolean)

public void openContextMenu(
android.view.View)

public void openOptionsMenu()

public void registerForContextMenu(
android.view.View)

public final boolean requestWindowFeature(
int)

public void setCancelMessage(
android.os.Message)

public void setCancelable(
boolean)

public void setCanceledOnTouchOutside(
boolean)

public void setContentView(
int)

public void setContentView(
android.view.View)

public void setContentView(
android.view.View
android.view.ViewGroup$LayoutParams)

public void setDismissMessage(
android.os.Message)

public final void setFeatureDrawable(
int
android.graphics.drawable.Drawable)

public final void setFeatureDrawableAlpha(
int
int)

public final void setFeatureDrawableResource(
int
int)

public final void setFeatureDrawableUri(
int
android.net.Uri)

public void setOnCancelListener(
android.content.DialogInterface$OnCancelListener)

public void setOnDismissListener(
android.content.DialogInterface$OnDismissListener)

public void setOnKeyListener(
android.content.DialogInterface$OnKeyListener)

public final void setOwnerActivity(
android.app.Activity)

public void setTitle(
int)

public void setTitle(
java.lang.CharSequence)

public final void setVolumeControlStream(
int)

public void show()

public void takeKeyEvents(
boolean)

public void unregisterForContextMenu(
android.view.View)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/AlertDialog$Builder; )
public class android.app.AlertDialog extends android.app.Dialog implements android.content.DialogInterface

----------------FIELDS----------------

private com.android.internal.app.AlertController mAlert
----------------METHODS----------------

protected void <init>(
android.content.Context)

protected void <init>(
android.content.Context
int)

protected void <init>(
android.content.Context
boolean
android.content.DialogInterface$OnCancelListener)

static com.android.internal.app.AlertController access$000(
android.app.AlertDialog)

protected void onCreate(
android.os.Bundle)

public boolean onKeyDown(
int
android.view.KeyEvent)

public boolean onKeyUp(
int
android.view.KeyEvent)

public void setButton(
java.lang.CharSequence
android.content.DialogInterface$OnClickListener)

public void setButton(
java.lang.CharSequence
android.os.Message)

public void setButton2(
java.lang.CharSequence
android.content.DialogInterface$OnClickListener)

public void setButton2(
java.lang.CharSequence
android.os.Message)

public void setButton3(
java.lang.CharSequence
android.content.DialogInterface$OnClickListener)

public void setButton3(
java.lang.CharSequence
android.os.Message)

public void setCustomTitle(
android.view.View)

public void setIcon(
int)

public void setIcon(
android.graphics.drawable.Drawable)

public void setInverseBackgroundForced(
boolean)

public void setMessage(
java.lang.CharSequence)

public void setTitle(
java.lang.CharSequence)

public void setView(
android.view.View)

________________CLASS________________


public class android.app.AliasActivity extends android.app.Activity

----------------FIELDS----------------

public final java.lang.String ALIAS_META_DATA
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private android.content.Intent parseAlias(
org.xmlpull.v1.XmlPullParser)

protected void onCreate(
android.os.Bundle)

________________CLASS________________


public class android.app.Application extends android.content.ContextWrapper implements android.content.ComponentCallbacks

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

final void attach(
android.content.Context)

public void onConfigurationChanged(
android.content.res.Configuration)

public void onCreate()

public void onLowMemory()

public void onTerminate()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ApplicationContext; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.app.ApplicationContext$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/ContentResolver$ParcelFileDescriptorInner;Landroid/content/ContentResolver$CursorWrapperInner; )
public abstract class android.content.ContentResolver extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String CURSOR_DIR_BASE_TYPE

public static final java.lang.String CURSOR_ITEM_BASE_TYPE

public static final java.lang.String SCHEME_ANDROID_RESOURCE

public static final java.lang.String SCHEME_CONTENT

public static final java.lang.String SCHEME_FILE

public static final java.lang.String SYNC_EXTRAS_ACCOUNT

public static final java.lang.String SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS

public static final java.lang.String SYNC_EXTRAS_EXPEDITED

public static final java.lang.String SYNC_EXTRAS_FORCE

public static final java.lang.String SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS

public static final java.lang.String SYNC_EXTRAS_UPLOAD

private static final java.lang.String TAG

private final android.content.Context mContext
----------------METHODS----------------

public void <init>(
android.content.Context)

public static void validateSyncExtrasBundle(
android.os.Bundle)

protected abstract android.content.IContentProvider acquireProvider(
android.content.Context
java.lang.String)

public final android.content.IContentProvider acquireProvider(
android.net.Uri)

public final android.content.IContentProvider acquireProvider(
java.lang.String)

public final int bulkInsert(
android.net.Uri
android.content.ContentValues[])

public void cancelSync(
android.net.Uri)

public final int delete(
android.net.Uri
java.lang.String
java.lang.String[])

public final java.lang.String getType(
android.net.Uri)

public final android.net.Uri insert(
android.net.Uri
android.content.ContentValues)

public void notifyChange(
android.net.Uri
android.database.ContentObserver)

public void notifyChange(
android.net.Uri
android.database.ContentObserver
boolean)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public final android.os.ParcelFileDescriptor openFileDescriptor(
android.net.Uri
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public final java.io.InputStream openInputStream(
android.net.Uri)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public final java.io.OutputStream openOutputStream(
android.net.Uri)

public final android.database.Cursor query(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)

public final void registerContentObserver(
android.net.Uri
boolean
android.database.ContentObserver)

public abstract boolean releaseProvider(
android.content.IContentProvider)

public void startSync(
android.net.Uri
android.os.Bundle)

public final void unregisterContentObserver(
android.database.ContentObserver)

public final int update(
android.net.Uri
android.content.ContentValues
java.lang.String
java.lang.String[])

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =ApplicationContentResolver )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ApplicationContext; )
final class android.app.ApplicationContext$ApplicationContentResolver extends android.content.ContentResolver

----------------FIELDS----------------

private final android.app.ActivityThread mMainThread
----------------METHODS----------------

public void <init>(
android.content.Context
android.app.ActivityThread)

protected android.content.IContentProvider acquireProvider(
android.content.Context
java.lang.String)

public boolean releaseProvider(
android.content.IContentProvider)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =PackageRemovedReceiver )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ApplicationContext$ApplicationPackageManager; )
final class android.app.ApplicationContext$ApplicationPackageManager$PackageRemovedReceiver extends android.content.BroadcastReceiver

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

 void <init>(
android.app.ApplicationContext$1)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =ResourceName )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ApplicationContext$ApplicationPackageManager; )
final class android.app.ApplicationContext$ApplicationPackageManager$ResourceName extends java.lang.Object

----------------FIELDS----------------

final int iconId

final java.lang.String packageName
----------------METHODS----------------

 void <init>(
android.content.pm.ApplicationInfo
int)

 void <init>(
android.content.pm.ComponentInfo
int)

 void <init>(
android.content.pm.ResolveInfo
int)

 void <init>(
java.lang.String
int)

public boolean equals(
java.lang.Object)

public int hashCode()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract class android.content.pm.PackageManager extends java.lang.Object

----------------FIELDS----------------

public static final int COMPONENT_ENABLED_STATE_DEFAULT

public static final int COMPONENT_ENABLED_STATE_DISABLED

public static final int COMPONENT_ENABLED_STATE_ENABLED

public static final int DONT_DELETE_DATA

public static final int DONT_KILL_APP

public static final int FORWARD_LOCK_PACKAGE

public static final int GET_ACTIVITIES

public static final int GET_DISABLED_COMPONENTS

public static final int GET_GIDS

public static final int GET_INSTRUMENTATION

public static final int GET_INTENT_FILTERS

public static final int GET_META_DATA

public static final int GET_PERMISSIONS

public static final int GET_PROVIDERS

public static final int GET_RECEIVERS

public static final int GET_RESOLVED_FILTER

public static final int GET_SERVICES

public static final int GET_SHARED_LIBRARY_FILES

public static final int GET_SIGNATURES

public static final int GET_URI_PERMISSION_PATTERNS

public static final int INSTALL_FAILED_ALREADY_EXISTS

public static final int INSTALL_FAILED_DEXOPT

public static final int INSTALL_FAILED_DUPLICATE_PACKAGE

public static final int INSTALL_FAILED_INSUFFICIENT_STORAGE

public static final int INSTALL_FAILED_INVALID_APK

public static final int INSTALL_FAILED_INVALID_URI

public static final int INSTALL_FAILED_MISSING_SHARED_LIBRARY

public static final int INSTALL_FAILED_NO_SHARED_USER

public static final int INSTALL_FAILED_OLDER_SDK

public static final int INSTALL_FAILED_REPLACE_COULDNT_DELETE

public static final int INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

public static final int INSTALL_FAILED_UPDATE_INCOMPATIBLE

public static final int INSTALL_PARSE_FAILED_BAD_MANIFEST

public static final int INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME

public static final int INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID

public static final int INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING

public static final int INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES

public static final int INSTALL_PARSE_FAILED_MANIFEST_EMPTY

public static final int INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

public static final int INSTALL_PARSE_FAILED_NOT_APK

public static final int INSTALL_PARSE_FAILED_NO_CERTIFICATES

public static final int INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION

public static final int INSTALL_SUCCEEDED

public static final int MATCH_DEFAULT_ONLY

public static final int PERMISSION_DENIED

public static final int PERMISSION_GRANTED

public static final int PKG_INSTALL_COMPLETE

public static final int PKG_INSTALL_INCOMPLETE

public static final int REPLACE_EXISTING_PACKAGE

public static final int SIGNATURE_FIRST_NOT_SIGNED

public static final int SIGNATURE_MATCH

public static final int SIGNATURE_NEITHER_SIGNED

public static final int SIGNATURE_NO_MATCH

public static final int SIGNATURE_SECOND_NOT_SIGNED

public static final int SIGNATURE_UNKNOWN_PACKAGE
----------------METHODS----------------

public void <init>()

public abstract void addPackageToPreferred(
java.lang.String)

public abstract boolean addPermission(
android.content.pm.PermissionInfo)

public abstract void addPreferredActivity(
android.content.IntentFilter
int
android.content.ComponentName[]
android.content.ComponentName)

public abstract int checkPermission(
java.lang.String
java.lang.String)

public abstract int checkSignatures(
java.lang.String
java.lang.String)

public abstract void clearApplicationUserData(
java.lang.String
android.content.pm.IPackageDataObserver)

public abstract void clearPackagePreferredActivities(
java.lang.String)

public abstract void deleteApplicationCacheFiles(
java.lang.String
android.content.pm.IPackageDataObserver)

public abstract void deletePackage(
java.lang.String
android.content.pm.IPackageDeleteObserver
int)

public abstract void freeApplicationCache(
long
android.content.pm.IPackageDataObserver)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract android.graphics.drawable.Drawable getActivityIcon(
android.content.ComponentName)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract android.graphics.drawable.Drawable getActivityIcon(
android.content.Intent)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract android.content.pm.ActivityInfo getActivityInfo(
android.content.ComponentName
int)
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/PermissionGroupInfo;>; )
public abstract java.util.List getAllPermissionGroups(
int)

public abstract int getApplicationEnabledSetting(
java.lang.String)

public abstract android.graphics.drawable.Drawable getApplicationIcon(
android.content.pm.ApplicationInfo)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract android.graphics.drawable.Drawable getApplicationIcon(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract android.content.pm.ApplicationInfo getApplicationInfo(
java.lang.String
int)

public abstract java.lang.CharSequence getApplicationLabel(
android.content.pm.ApplicationInfo)

public abstract int getComponentEnabledSetting(
android.content.ComponentName)

public abstract android.graphics.drawable.Drawable getDefaultActivityIcon()

public abstract android.graphics.drawable.Drawable getDrawable(
java.lang.String
int
android.content.pm.ApplicationInfo)
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/ApplicationInfo;>; )
public abstract java.util.List getInstalledApplications(
int)
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/PackageInfo;>; )
public abstract java.util.List getInstalledPackages(
int)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract android.content.pm.InstrumentationInfo getInstrumentationInfo(
android.content.ComponentName
int)

public abstract java.lang.String getNameForUid(
int)

public android.content.pm.PackageInfo getPackageArchiveInfo(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract int[] getPackageGids(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract android.content.pm.PackageInfo getPackageInfo(
java.lang.String
int)

public abstract void getPackageSizeInfo(
java.lang.String
android.content.pm.IPackageStatsObserver)

public abstract java.lang.String[] getPackagesForUid(
int)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract android.content.pm.PermissionGroupInfo getPermissionGroupInfo(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract android.content.pm.PermissionInfo getPermissionInfo(
java.lang.String
int)
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/content/IntentFilter;>;Ljava/util/List<Landroid/content/ComponentName;>;Ljava/lang/String;)I )
public abstract int getPreferredActivities(
java.util.List
java.util.List
java.lang.String)
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/PackageInfo;>; )
public abstract java.util.List getPreferredPackages(
int)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract android.content.pm.ActivityInfo getReceiverInfo(
android.content.ComponentName
int)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract android.content.res.Resources getResourcesForActivity(
android.content.ComponentName)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract android.content.res.Resources getResourcesForApplication(
android.content.pm.ApplicationInfo)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract android.content.res.Resources getResourcesForApplication(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract android.content.pm.ServiceInfo getServiceInfo(
android.content.ComponentName
int)

public abstract java.lang.CharSequence getText(
java.lang.String
int
android.content.pm.ApplicationInfo)

public abstract android.content.res.XmlResourceParser getXml(
java.lang.String
int
android.content.pm.ApplicationInfo)

public void installPackage(
android.net.Uri)

public abstract void installPackage(
android.net.Uri
android.content.pm.IPackageInstallObserver
int)
@dalvik.annotation.Signature (value =(Landroid/content/Intent;I)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
public abstract java.util.List queryBroadcastReceivers(
android.content.Intent
int)
@dalvik.annotation.Signature (value =(Ljava/lang/String;II)Ljava/util/List<Landroid/content/pm/ProviderInfo;>; )
public abstract java.util.List queryContentProviders(
java.lang.String
int
int)
@dalvik.annotation.Signature (value =(Ljava/lang/String;I)Ljava/util/List<Landroid/content/pm/InstrumentationInfo;>; )
public abstract java.util.List queryInstrumentation(
java.lang.String
int)
@dalvik.annotation.Signature (value =(Landroid/content/Intent;I)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
public abstract java.util.List queryIntentActivities(
android.content.Intent
int)
@dalvik.annotation.Signature (value =(Landroid/content/ComponentName;[Landroid/content/Intent;Landroid/content/Intent;I)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
public abstract java.util.List queryIntentActivityOptions(
android.content.ComponentName
android.content.Intent[]
android.content.Intent
int)
@dalvik.annotation.Signature (value =(Landroid/content/Intent;I)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
public abstract java.util.List queryIntentServices(
android.content.Intent
int)
@dalvik.annotation.Signature (value =(Ljava/lang/String;I)Ljava/util/List<Landroid/content/pm/PermissionInfo;>; )
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public abstract java.util.List queryPermissionsByGroup(
java.lang.String
int)

public abstract void removePackageFromPreferred(
java.lang.String)

public abstract void removePermission(
java.lang.String)

public abstract android.content.pm.ResolveInfo resolveActivity(
android.content.Intent
int)

public abstract android.content.pm.ProviderInfo resolveContentProvider(
java.lang.String
int)

public abstract android.content.pm.ResolveInfo resolveService(
android.content.Intent
int)

public abstract void setApplicationEnabledSetting(
java.lang.String
int
int)

public abstract void setComponentEnabledSetting(
android.content.ComponentName
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =24 name =ApplicationPackageManager )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ApplicationContext; )
@dalvik.annotation.MemberClasses (value =Landroid/app/ApplicationContext$ApplicationPackageManager$ResourceName;Landroid/app/ApplicationContext$ApplicationPackageManager$PackageRemovedReceiver; )
final class android.app.ApplicationContext$ApplicationPackageManager extends android.content.pm.PackageManager

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/app/ApplicationContext$ApplicationPackageManager$ResourceName;Ljava/lang/ref/WeakReference<Landroid/graphics/drawable/Drawable;>;>; )
private static java.util.HashMap sIconCache

private static android.content.BroadcastReceiver sPackageRemovedReceiver

private static final java.lang.Object sPackageRemovedSync
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/app/ApplicationContext$ApplicationPackageManager$ResourceName;Ljava/lang/ref/WeakReference<Ljava/lang/CharSequence;>;>; )
private static java.util.HashMap sStringCache

private static final java.lang.Object sSync

private final android.app.ApplicationContext mContext

private final android.content.pm.IPackageManager mPM
----------------METHODS----------------

static void <clinit>()

 void <init>(
android.app.ApplicationContext
android.content.pm.IPackageManager)

static java.lang.Object access$200()

static java.util.HashMap access$300()

static java.util.HashMap access$400()

static void configurationChanged()

private void establishPackageRemovedReceiver()

private android.graphics.drawable.Drawable getCachedIcon(
android.app.ApplicationContext$ApplicationPackageManager$ResourceName)

private java.lang.CharSequence getCachedString(
android.app.ApplicationContext$ApplicationPackageManager$ResourceName)

private java.lang.CharSequence getLabel(
android.app.ApplicationContext$ApplicationPackageManager$ResourceName
android.content.pm.ApplicationInfo
int)

private void putCachedIcon(
android.app.ApplicationContext$ApplicationPackageManager$ResourceName
android.graphics.drawable.Drawable)

private void putCachedString(
android.app.ApplicationContext$ApplicationPackageManager$ResourceName
java.lang.CharSequence)

public void addPackageToPreferred(
java.lang.String)

public boolean addPermission(
android.content.pm.PermissionInfo)

public void addPreferredActivity(
android.content.IntentFilter
int
android.content.ComponentName[]
android.content.ComponentName)

public int checkPermission(
java.lang.String
java.lang.String)

public int checkSignatures(
java.lang.String
java.lang.String)

public void clearApplicationUserData(
java.lang.String
android.content.pm.IPackageDataObserver)

public void clearPackagePreferredActivities(
java.lang.String)

public void deleteApplicationCacheFiles(
java.lang.String
android.content.pm.IPackageDataObserver)

public void deletePackage(
java.lang.String
android.content.pm.IPackageDeleteObserver
int)

public void freeApplicationCache(
long
android.content.pm.IPackageDataObserver)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public android.graphics.drawable.Drawable getActivityIcon(
android.content.ComponentName)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public android.graphics.drawable.Drawable getActivityIcon(
android.content.Intent)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public android.content.pm.ActivityInfo getActivityInfo(
android.content.ComponentName
int)
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/PermissionGroupInfo;>; )
public java.util.List getAllPermissionGroups(
int)

public int getApplicationEnabledSetting(
java.lang.String)

public android.graphics.drawable.Drawable getApplicationIcon(
android.content.pm.ApplicationInfo)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public android.graphics.drawable.Drawable getApplicationIcon(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public android.content.pm.ApplicationInfo getApplicationInfo(
java.lang.String
int)

public java.lang.CharSequence getApplicationLabel(
android.content.pm.ApplicationInfo)

public int getComponentEnabledSetting(
android.content.ComponentName)

public android.graphics.drawable.Drawable getDefaultActivityIcon()

public android.graphics.drawable.Drawable getDrawable(
java.lang.String
int
android.content.pm.ApplicationInfo)
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/ApplicationInfo;>; )
public java.util.List getInstalledApplications(
int)
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/PackageInfo;>; )
public java.util.List getInstalledPackages(
int)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public android.content.pm.InstrumentationInfo getInstrumentationInfo(
android.content.ComponentName
int)

public java.lang.String getNameForUid(
int)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public int[] getPackageGids(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public android.content.pm.PackageInfo getPackageInfo(
java.lang.String
int)

public void getPackageSizeInfo(
java.lang.String
android.content.pm.IPackageStatsObserver)

public java.lang.String[] getPackagesForUid(
int)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public android.content.pm.PermissionGroupInfo getPermissionGroupInfo(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public android.content.pm.PermissionInfo getPermissionInfo(
java.lang.String
int)
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/content/IntentFilter;>;Ljava/util/List<Landroid/content/ComponentName;>;Ljava/lang/String;)I )
public int getPreferredActivities(
java.util.List
java.util.List
java.lang.String)
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/PackageInfo;>; )
public java.util.List getPreferredPackages(
int)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public android.content.pm.ActivityInfo getReceiverInfo(
android.content.ComponentName
int)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public android.content.res.Resources getResourcesForActivity(
android.content.ComponentName)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public android.content.res.Resources getResourcesForApplication(
android.content.pm.ApplicationInfo)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public android.content.res.Resources getResourcesForApplication(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public android.content.pm.ServiceInfo getServiceInfo(
android.content.ComponentName
int)

public java.lang.CharSequence getText(
java.lang.String
int
android.content.pm.ApplicationInfo)

public android.content.res.XmlResourceParser getXml(
java.lang.String
int
android.content.pm.ApplicationInfo)

public void installPackage(
android.net.Uri
android.content.pm.IPackageInstallObserver
int)
@dalvik.annotation.Signature (value =(Landroid/content/Intent;I)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
public java.util.List queryBroadcastReceivers(
android.content.Intent
int)
@dalvik.annotation.Signature (value =(Ljava/lang/String;II)Ljava/util/List<Landroid/content/pm/ProviderInfo;>; )
public java.util.List queryContentProviders(
java.lang.String
int
int)
@dalvik.annotation.Signature (value =(Ljava/lang/String;I)Ljava/util/List<Landroid/content/pm/InstrumentationInfo;>; )
public java.util.List queryInstrumentation(
java.lang.String
int)
@dalvik.annotation.Signature (value =(Landroid/content/Intent;I)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
public java.util.List queryIntentActivities(
android.content.Intent
int)
@dalvik.annotation.Signature (value =(Landroid/content/ComponentName;[Landroid/content/Intent;Landroid/content/Intent;I)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
public java.util.List queryIntentActivityOptions(
android.content.ComponentName
android.content.Intent[]
android.content.Intent
int)
@dalvik.annotation.Signature (value =(Landroid/content/Intent;I)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
public java.util.List queryIntentServices(
android.content.Intent
int)
@dalvik.annotation.Signature (value =(Ljava/lang/String;I)Ljava/util/List<Landroid/content/pm/PermissionInfo;>; )
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public java.util.List queryPermissionsByGroup(
java.lang.String
int)

public void removePackageFromPreferred(
java.lang.String)

public void removePermission(
java.lang.String)

public android.content.pm.ResolveInfo resolveActivity(
android.content.Intent
int)

public android.content.pm.ProviderInfo resolveContentProvider(
java.lang.String
int)

public android.content.pm.ResolveInfo resolveService(
android.content.Intent
int)

public void setApplicationEnabledSetting(
java.lang.String
int
int)

public void setComponentEnabledSetting(
android.content.ComponentName
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =Editor )
@dalvik.annotation.EnclosingClass (value =Landroid/content/SharedPreferences; )
public abstract interface class android.content.SharedPreferences$Editor extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.content.SharedPreferences$Editor clear()

public abstract boolean commit()

public abstract android.content.SharedPreferences$Editor putBoolean(
java.lang.String
boolean)

public abstract android.content.SharedPreferences$Editor putFloat(
java.lang.String
float)

public abstract android.content.SharedPreferences$Editor putInt(
java.lang.String
int)

public abstract android.content.SharedPreferences$Editor putLong(
java.lang.String
long)

public abstract android.content.SharedPreferences$Editor putString(
java.lang.String
java.lang.String)

public abstract android.content.SharedPreferences$Editor remove(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =17 name =EditorImpl )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ApplicationContext$SharedPreferencesImpl; )
public final class android.app.ApplicationContext$SharedPreferencesImpl$EditorImpl extends java.lang.Object implements android.content.SharedPreferences$Editor

----------------FIELDS----------------

private boolean mClear
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>; )
private final java.util.Map mModified

final android.app.ApplicationContext$SharedPreferencesImpl this$0
----------------METHODS----------------

public void <init>(
android.app.ApplicationContext$SharedPreferencesImpl)

public android.content.SharedPreferences$Editor clear()

public boolean commit()

public android.content.SharedPreferences$Editor putBoolean(
java.lang.String
boolean)

public android.content.SharedPreferences$Editor putFloat(
java.lang.String
float)

public android.content.SharedPreferences$Editor putInt(
java.lang.String
int)

public android.content.SharedPreferences$Editor putLong(
java.lang.String
long)

public android.content.SharedPreferences$Editor putString(
java.lang.String
java.lang.String)

public android.content.SharedPreferences$Editor remove(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/SharedPreferences$Editor;Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener; )
public abstract interface class android.content.SharedPreferences extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean contains(
java.lang.String)

public abstract android.content.SharedPreferences$Editor edit()
@dalvik.annotation.Signature (value =()Ljava/util/Map<Ljava/lang/String;*>; )
public abstract java.util.Map getAll()

public abstract boolean getBoolean(
java.lang.String
boolean)

public abstract float getFloat(
java.lang.String
float)

public abstract int getInt(
java.lang.String
int)

public abstract long getLong(
java.lang.String
long)

public abstract java.lang.String getString(
java.lang.String
java.lang.String)

public abstract void registerOnSharedPreferenceChangeListener(
android.content.SharedPreferences$OnSharedPreferenceChangeListener)

public abstract void unregisterOnSharedPreferenceChangeListener(
android.content.SharedPreferences$OnSharedPreferenceChangeListener)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/ApplicationContext$SharedPreferencesImpl$EditorImpl; )
@dalvik.annotation.InnerClass (accessFlags =26 name =SharedPreferencesImpl )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ApplicationContext; )
final class android.app.ApplicationContext$SharedPreferencesImpl extends java.lang.Object implements android.content.SharedPreferences

----------------FIELDS----------------

private final java.io.File mFile

private final android.os.FileUtils$FileStatus mFileStatus
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;>; )
private java.util.List mListeners

private java.util.Map mMap

private final int mMode

private long mTimestamp
----------------METHODS----------------

 void <init>(
java.io.File
int
java.util.Map)

static java.util.List access$500(
android.app.ApplicationContext$SharedPreferencesImpl)

static java.util.Map access$600(
android.app.ApplicationContext$SharedPreferencesImpl)

static boolean access$700(
android.app.ApplicationContext$SharedPreferencesImpl)

private boolean writeFileLocked()

public boolean contains(
java.lang.String)

public android.content.SharedPreferences$Editor edit()
@dalvik.annotation.Signature (value =()Ljava/util/Map<Ljava/lang/String;*>; )
public java.util.Map getAll()

public boolean getBoolean(
java.lang.String
boolean)

public float getFloat(
java.lang.String
float)

public int getInt(
java.lang.String
int)

public long getLong(
java.lang.String
long)

public java.lang.String getString(
java.lang.String
java.lang.String)

public boolean hasFileChanged()

public void registerOnSharedPreferenceChangeListener(
android.content.SharedPreferences$OnSharedPreferenceChangeListener)

public void replace(
java.util.Map)

public void unregisterOnSharedPreferenceChangeListener(
android.content.SharedPreferences$OnSharedPreferenceChangeListener)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/IWallpaperServiceCallback$Stub; )
public abstract interface class android.app.IWallpaperServiceCallback extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onWallpaperChanged()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/IWallpaperServiceCallback$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IWallpaperServiceCallback; )
public abstract class android.app.IWallpaperServiceCallback$Stub extends android.os.Binder implements android.app.IWallpaperServiceCallback

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_onWallpaperChanged
----------------METHODS----------------

public void <init>()

public static android.app.IWallpaperServiceCallback asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ApplicationContext; )
@dalvik.annotation.InnerClass (accessFlags =10 name =WallpaperCallback )
 class android.app.ApplicationContext$WallpaperCallback extends android.app.IWallpaperServiceCallback$Stub

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/lang/ref/WeakReference<Landroid/app/ApplicationContext;>; )
private java.lang.ref.WeakReference mContext
----------------METHODS----------------

public void <init>(
android.app.ApplicationContext)

public void onWallpaperChanged()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/ApplicationContext$1;Landroid/app/ApplicationContext$WallpaperCallback;Landroid/app/ApplicationContext$SharedPreferencesImpl;Landroid/app/ApplicationContext$ApplicationPackageManager;Landroid/app/ApplicationContext$ApplicationContentResolver; )
 class android.app.ApplicationContext extends android.content.Context

----------------FIELDS----------------

private static final boolean DEBUG_ICONS

private static final java.lang.String[] EMPTY_FILE_LIST

private static final java.lang.String TAG

private static android.bluetooth.BluetoothDevice sBluetoothDevice

private static android.net.ConnectivityManager sConnectivityManager

private static long sInstanceCount

private static boolean sIsBluetoothDeviceCached

private static android.location.LocationManager sLocationManager

private static android.os.PowerManager sPowerManager
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/io/File;Landroid/app/ApplicationContext$SharedPreferencesImpl;>; )
private static final java.util.HashMap sSharedPrefs

private static final java.lang.Object sSync

private static android.app.IWallpaperService sWallpaperService

private static android.net.wifi.WifiManager sWifiManager

private android.app.ActivityManager mActivityManager

private android.os.IBinder mActivityToken

private android.media.AudioManager mAudioManager

private java.io.File mCacheDir

private android.text.ClipboardManager mClipboardManager

private android.app.ApplicationContext$ApplicationContentResolver mContentResolver

private java.io.File mDatabasesDir

private java.io.File mFilesDir

private android.view.LayoutInflater mLayoutInflater

 android.app.ActivityThread mMainThread

private android.app.NotificationManager mNotificationManager

private android.content.Context mOuterContext

 android.app.ActivityThread$PackageInfo mPackageInfo

private android.content.pm.PackageManager mPackageManager

private java.io.File mPreferencesDir

private android.content.Context mReceiverRestrictedContext

private android.content.res.Resources mResources

private android.app.SearchManager mSearchManager

private android.hardware.SensorManager mSensorManager

private android.app.StatusBarManager mStatusBarManager

private final java.lang.Object mSync

private android.telephony.TelephonyManager mTelephonyManager

private android.content.res.Resources$Theme mTheme

private int mThemeResource

private android.os.Vibrator mVibrator

private android.graphics.drawable.Drawable mWallpaper

private android.app.IWallpaperServiceCallback mWallpaperCallback
----------------METHODS----------------

static void <clinit>()

 void <init>()

public void <init>(
android.app.ApplicationContext)

static android.content.Intent access$100(
android.app.ApplicationContext
android.content.BroadcastReceiver
android.content.IntentFilter
java.lang.String
android.os.Handler
android.content.Context)

static void access$800(
java.lang.String
int
int)

static android.graphics.drawable.Drawable access$902(
android.app.ApplicationContext
android.graphics.drawable.Drawable)

static android.app.ApplicationContext createSystemContext(
android.app.ActivityThread)

private void enforce(
java.lang.String
int
boolean
int
java.lang.String)

private void enforceForUri(
int
int
boolean
int
android.net.Uri
java.lang.String)

private android.app.ActivityManager getActivityManager()

private android.media.AudioManager getAudioManager()

private android.bluetooth.BluetoothDevice getBluetoothDevice()

private android.text.ClipboardManager getClipboardManager()

private android.net.ConnectivityManager getConnectivityManager()

private android.graphics.drawable.Drawable getCurrentWallpaperLocked()

private java.io.File getDataDirFile()

private java.io.File getDatabasesDir()

public static long getInstanceCount()

private android.location.LocationManager getLocationManager()

private android.app.NotificationManager getNotificationManager()

private android.os.PowerManager getPowerManager()

private java.io.File getPreferencesDir()

private android.app.SearchManager getSearchManager()

private android.hardware.SensorManager getSensorManager()

private android.telephony.TelephonyManager getTelephonyManager()

private android.os.Vibrator getVibrator()

private android.app.IWallpaperService getWallpaperService()

private android.net.wifi.WifiManager getWifiManager()

private java.io.File makeFilename(
java.io.File
java.lang.String)

private android.content.Intent registerReceiverInternal(
android.content.BroadcastReceiver
android.content.IntentFilter
java.lang.String
android.os.Handler
android.content.Context)

private static void setFilePermissionsFromMode(
java.lang.String
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private void setWallpaper(
java.io.InputStream
java.io.FileOutputStream)

private java.lang.String uriModeFlagToString(
int)

public boolean bindService(
android.content.Intent
android.content.ServiceConnection
int)

public int checkCallingOrSelfPermission(
java.lang.String)

public int checkCallingOrSelfUriPermission(
android.net.Uri
int)

public int checkCallingPermission(
java.lang.String)

public int checkCallingUriPermission(
android.net.Uri
int)

public int checkPermission(
java.lang.String
int
int)

public int checkUriPermission(
android.net.Uri
int
int
int)

public int checkUriPermission(
android.net.Uri
java.lang.String
java.lang.String
int
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void clearWallpaper()
@dalvik.annotation.Throws (value =Landroid/content/pm/PackageManager$NameNotFoundException; )
public android.content.Context createPackageContext(
java.lang.String
int)

public java.lang.String[] databaseList()

public boolean deleteDatabase(
java.lang.String)

public boolean deleteFile(
java.lang.String)

public void enforceCallingOrSelfPermission(
java.lang.String
java.lang.String)

public void enforceCallingOrSelfUriPermission(
android.net.Uri
int
java.lang.String)

public void enforceCallingPermission(
java.lang.String
java.lang.String)

public void enforceCallingUriPermission(
android.net.Uri
int
java.lang.String)

public void enforcePermission(
java.lang.String
int
int
java.lang.String)

public void enforceUriPermission(
android.net.Uri
int
int
int
java.lang.String)

public void enforceUriPermission(
android.net.Uri
java.lang.String
java.lang.String
int
int
int
java.lang.String)

public java.lang.String[] fileList()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

final android.os.IBinder getActivityToken()

public android.content.Context getApplicationContext()

public android.content.res.AssetManager getAssets()

public java.io.File getCacheDir()

public java.lang.ClassLoader getClassLoader()

public android.content.ContentResolver getContentResolver()

public java.io.File getDatabasePath(
java.lang.String)

public java.io.File getDir(
java.lang.String
int)

public java.io.File getFileStreamPath(
java.lang.String)

public java.io.File getFilesDir()

public android.os.Looper getMainLooper()

final android.content.Context getOuterContext()

public java.lang.String getPackageCodePath()

public android.content.pm.PackageManager getPackageManager()

public java.lang.String getPackageName()

public java.lang.String getPackageResourcePath()

final android.content.Context getReceiverRestrictedContext()

public android.content.res.Resources getResources()

public android.content.SharedPreferences getSharedPreferences(
java.lang.String
int)

public java.lang.Object getSystemService(
java.lang.String)

public android.content.res.Resources$Theme getTheme()

public android.graphics.drawable.Drawable getWallpaper()

public int getWallpaperDesiredMinimumHeight()

public int getWallpaperDesiredMinimumWidth()

public void grantUriPermission(
java.lang.String
android.net.Uri
int)

final void init(
android.app.ActivityThread$PackageInfo
android.os.IBinder
android.app.ActivityThread)

final void init(
android.content.res.Resources
android.app.ActivityThread)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public java.io.FileInputStream openFileInput(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public java.io.FileOutputStream openFileOutput(
java.lang.String
int)

public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(
java.lang.String
int
android.database.sqlite.SQLiteDatabase$CursorFactory)

public android.graphics.drawable.Drawable peekWallpaper()

final void performFinalCleanup(
java.lang.String
java.lang.String)

public android.content.Intent registerReceiver(
android.content.BroadcastReceiver
android.content.IntentFilter)

public android.content.Intent registerReceiver(
android.content.BroadcastReceiver
android.content.IntentFilter
java.lang.String
android.os.Handler)

public void removeStickyBroadcast(
android.content.Intent)

public void revokeUriPermission(
android.net.Uri
int)

final void scheduleFinalCleanup(
java.lang.String
java.lang.String)

public void sendBroadcast(
android.content.Intent)

public void sendBroadcast(
android.content.Intent
java.lang.String)

public void sendOrderedBroadcast(
android.content.Intent
java.lang.String)

public void sendOrderedBroadcast(
android.content.Intent
java.lang.String
android.content.BroadcastReceiver
android.os.Handler
int
java.lang.String
android.os.Bundle)

public void sendStickyBroadcast(
android.content.Intent)

final void setActivityToken(
android.os.IBinder)

final void setOuterContext(
android.content.Context)

public void setTheme(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void setWallpaper(
android.graphics.Bitmap)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void setWallpaper(
java.io.InputStream)

public void startActivity(
android.content.Intent)

public boolean startInstrumentation(
android.content.ComponentName
java.lang.String
android.os.Bundle)

public android.content.ComponentName startService(
android.content.Intent)

public boolean stopService(
android.content.Intent)

public void unbindService(
android.content.ServiceConnection)

public void unregisterReceiver(
android.content.BroadcastReceiver)

________________CLASS________________


 class android.app.ApplicationLoaders extends java.lang.Object

----------------FIELDS----------------

private static final android.app.ApplicationLoaders gApplicationLoaders

private final java.util.HashMap mLoaders
----------------METHODS----------------

static void <clinit>()

 void <init>()

public static android.app.ApplicationLoaders getDefault()

public java.lang.ClassLoader getClassLoader(
java.lang.String
java.lang.String
java.lang.ClassLoader)

________________CLASS________________


 class android.app.ApplicationThreadProxy extends java.lang.Object implements android.app.IApplicationThread

----------------FIELDS----------------

private final android.os.IBinder mRemote
----------------METHODS----------------

public void <init>(
android.os.IBinder)

public final android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/util/List<Landroid/content/pm/ProviderInfo;>;Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/IInstrumentationWatcher;ILandroid/content/res/Configuration;Ljava/util/Map<Ljava/lang/String;Landroid/os/IBinder;>;)V )
public final void bindApplication(
java.lang.String
android.content.pm.ApplicationInfo
java.util.List
android.content.ComponentName
java.lang.String
android.os.Bundle
android.app.IInstrumentationWatcher
int
android.content.res.Configuration
java.util.Map)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void dumpService(
java.io.FileDescriptor
android.os.IBinder
java.lang.String[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void processInBackground()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void requestPss()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void requestThumbnail(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void scheduleActivityConfigurationChanged(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void scheduleBindService(
android.os.IBinder
android.content.Intent
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void scheduleConfigurationChanged(
android.content.res.Configuration)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void scheduleCreateService(
android.os.IBinder
android.content.pm.ServiceInfo)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void scheduleDestroyActivity(
android.os.IBinder
boolean
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void scheduleExit()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Landroid/content/Intent;Landroid/os/IBinder;Landroid/content/pm/ActivityInfo;Landroid/os/Bundle;Ljava/util/List<Landroid/app/ResultInfo;>;Ljava/util/List<Landroid/content/Intent;>;Z)V )
public final void scheduleLaunchActivity(
android.content.Intent
android.os.IBinder
android.content.pm.ActivityInfo
android.os.Bundle
java.util.List
java.util.List
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void scheduleLowMemory()
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/content/Intent;>;Landroid/os/IBinder;)V )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void scheduleNewIntent(
java.util.List
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void schedulePauseActivity(
android.os.IBinder
boolean
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void scheduleReceiver(
android.content.Intent
android.content.pm.ActivityInfo
int
java.lang.String
android.os.Bundle
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void scheduleRegisteredReceiver(
android.app.IIntentReceiver
android.content.Intent
int
java.lang.String
android.os.Bundle
boolean)
@dalvik.annotation.Signature (value =(Landroid/os/IBinder;Ljava/util/List<Landroid/app/ResultInfo;>;Ljava/util/List<Landroid/content/Intent;>;IZ)V )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void scheduleRelaunchActivity(
android.os.IBinder
java.util.List
java.util.List
int
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void scheduleResumeActivity(
android.os.IBinder)
@dalvik.annotation.Signature (value =(Landroid/os/IBinder;Ljava/util/List<Landroid/app/ResultInfo;>;)V )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void scheduleSendResult(
android.os.IBinder
java.util.List)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void scheduleServiceArgs(
android.os.IBinder
int
android.content.Intent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void scheduleStopActivity(
android.os.IBinder
boolean
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void scheduleStopService(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void scheduleUnbindService(
android.os.IBinder
android.content.Intent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public final void scheduleWindowVisibility(
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void updateTimeZone()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/DatePickerDialog; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnDateSetListener )
public abstract interface class android.app.DatePickerDialog$OnDateSetListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onDateSet(
android.widget.DatePicker
int
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnClickListener )
@dalvik.annotation.EnclosingClass (value =Landroid/content/DialogInterface; )
public abstract interface class android.content.DialogInterface$OnClickListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onClick(
android.content.DialogInterface
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/DatePicker; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnDateChangedListener )
public abstract interface class android.widget.DatePicker$OnDateChangedListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onDateChanged(
android.widget.DatePicker
int
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/DatePickerDialog$OnDateSetListener; )
public class android.app.DatePickerDialog extends android.app.AlertDialog implements android.content.DialogInterface$OnClickListener, android.widget.DatePicker$OnDateChangedListener

----------------FIELDS----------------

private static final java.lang.String DAY

private static final java.lang.String MONTH

private static final java.lang.String YEAR

private final java.util.Calendar mCalendar

private final android.app.DatePickerDialog$OnDateSetListener mCallBack

private final java.text.DateFormat mDateFormat

private final android.widget.DatePicker mDatePicker

private int mInitialDay

private int mInitialMonth

private int mInitialYear

private final java.lang.String[] mWeekDays
----------------METHODS----------------

public void <init>(
android.content.Context
int
android.app.DatePickerDialog$OnDateSetListener
int
int
int)

public void <init>(
android.content.Context
android.app.DatePickerDialog$OnDateSetListener
int
int
int)

private void updateTitle(
int
int
int)

public void onClick(
android.content.DialogInterface
int)

public void onDateChanged(
android.widget.DatePicker
int
int
int)

public void onRestoreInstanceState(
android.os.Bundle)

public android.os.Bundle onSaveInstanceState()

public void show()

public void updateDate(
int
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/app/Dialog; )
 class android.app.Dialog$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.app.Dialog this$0
----------------METHODS----------------

 void <init>(
android.app.Dialog)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/Dialog; )
@dalvik.annotation.InnerClass (accessFlags =26 name =DismissCancelHandler )
final class android.app.Dialog$DismissCancelHandler extends android.os.Handler

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/lang/ref/WeakReference<Landroid/content/DialogInterface;>; )
private java.lang.ref.WeakReference mDialog
----------------METHODS----------------

public void <init>(
android.app.Dialog)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnChildClickListener )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/ExpandableListView; )
public abstract interface class android.widget.ExpandableListView$OnChildClickListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onChildClick(
android.widget.ExpandableListView
android.view.View
int
int
long)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/ExpandableListView; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnGroupCollapseListener )
public abstract interface class android.widget.ExpandableListView$OnGroupCollapseListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onGroupCollapse(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnGroupExpandListener )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/ExpandableListView; )
public abstract interface class android.widget.ExpandableListView$OnGroupExpandListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onGroupExpand(
int)

________________CLASS________________


public class android.app.ExpandableListActivity extends android.app.Activity implements android.view.View$OnCreateContextMenuListener, android.widget.ExpandableListView$OnChildClickListener, android.widget.ExpandableListView$OnGroupCollapseListener, android.widget.ExpandableListView$OnGroupExpandListener

----------------FIELDS----------------

 android.widget.ExpandableListAdapter mAdapter

 boolean mFinishedStart

 android.widget.ExpandableListView mList
----------------METHODS----------------

public void <init>()

private void ensureList()

public android.widget.ExpandableListAdapter getExpandableListAdapter()

public android.widget.ExpandableListView getExpandableListView()

public long getSelectedId()

public long getSelectedPosition()

public boolean onChildClick(
android.widget.ExpandableListView
android.view.View
int
int
long)

public void onContentChanged()

public void onCreateContextMenu(
android.view.ContextMenu
android.view.View
android.view.ContextMenu$ContextMenuInfo)

public void onGroupCollapse(
int)

public void onGroupExpand(
int)

protected void onRestoreInstanceState(
android.os.Bundle)

public void setListAdapter(
android.widget.ExpandableListAdapter)

public boolean setSelectedChild(
int
int
boolean)

public void setSelectedGroup(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/IActivityManager; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.app.IActivityManager$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/IActivityManager$ContentProviderHolder; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/app/IActivityManager$ContentProviderHolder;>; )
final class android.app.IActivityManager$ContentProviderHolder$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.app.IActivityManager$ContentProviderHolder createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.app.IActivityManager$ContentProviderHolder[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =ContentProviderHolder )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IActivityManager; )
public class android.app.IActivityManager$ContentProviderHolder extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/app/IActivityManager$ContentProviderHolder;>; )
public static final android.os.Parcelable$Creator CREATOR

public final android.content.pm.ProviderInfo info

public boolean noReleaseNeeded

public final java.lang.String permissionFailure

public android.content.IContentProvider provider
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.pm.ProviderInfo)

public void <init>(
android.content.pm.ProviderInfo
java.lang.String)

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.app.IActivityManager$1)

public int describeContents()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/IActivityPendingResult$Stub; )
public abstract interface class android.app.IActivityPendingResult extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean sendResult(
int
java.lang.String
android.os.Bundle)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IActivityPendingResult$Stub; )
 class android.app.IActivityPendingResult$Stub$Proxy extends java.lang.Object implements android.app.IActivityPendingResult

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean sendResult(
int
java.lang.String
android.os.Bundle)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/IActivityPendingResult; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/app/IActivityPendingResult$Stub$Proxy; )
public abstract class android.app.IActivityPendingResult$Stub extends android.os.Binder implements android.app.IActivityPendingResult

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_sendResult
----------------METHODS----------------

public void <init>()

public static android.app.IActivityPendingResult asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/IActivityWatcher$Stub; )
public abstract interface class android.app.IActivityWatcher extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean activityResuming(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean activityStarting(
android.content.Intent
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean appCrashed(
java.lang.String
int
java.lang.String
java.lang.String
byte[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int appNotResponding(
java.lang.String
int
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IActivityWatcher$Stub; )
 class android.app.IActivityWatcher$Stub$Proxy extends java.lang.Object implements android.app.IActivityWatcher

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean activityResuming(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean activityStarting(
android.content.Intent
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean appCrashed(
java.lang.String
int
java.lang.String
java.lang.String
byte[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int appNotResponding(
java.lang.String
int
java.lang.String)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/app/IActivityWatcher$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IActivityWatcher; )
public abstract class android.app.IActivityWatcher$Stub extends android.os.Binder implements android.app.IActivityWatcher

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_activityResuming

static final int TRANSACTION_activityStarting

static final int TRANSACTION_appCrashed

static final int TRANSACTION_appNotResponding
----------------METHODS----------------

public void <init>()

public static android.app.IActivityWatcher asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/IAlarmManager$Stub; )
public abstract interface class android.app.IAlarmManager extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void remove(
android.app.PendingIntent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void set(
int
long
android.app.PendingIntent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setRepeating(
int
long
long
android.app.PendingIntent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setTimeZone(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IAlarmManager$Stub; )
 class android.app.IAlarmManager$Stub$Proxy extends java.lang.Object implements android.app.IAlarmManager

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void remove(
android.app.PendingIntent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void set(
int
long
android.app.PendingIntent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setRepeating(
int
long
long
android.app.PendingIntent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setTimeZone(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/app/IAlarmManager$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IAlarmManager; )
public abstract class android.app.IAlarmManager$Stub extends android.os.Binder implements android.app.IAlarmManager

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_remove

static final int TRANSACTION_set

static final int TRANSACTION_setRepeating

static final int TRANSACTION_setTimeZone
----------------METHODS----------------

public void <init>()

public static android.app.IAlarmManager asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/IInstrumentationWatcher$Stub; )
public abstract interface class android.app.IInstrumentationWatcher extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void instrumentationFinished(
android.content.ComponentName
int
android.os.Bundle)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void instrumentationStatus(
android.content.ComponentName
int
android.os.Bundle)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IInstrumentationWatcher$Stub; )
 class android.app.IInstrumentationWatcher$Stub$Proxy extends java.lang.Object implements android.app.IInstrumentationWatcher

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void instrumentationFinished(
android.content.ComponentName
int
android.os.Bundle)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void instrumentationStatus(
android.content.ComponentName
int
android.os.Bundle)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/IInstrumentationWatcher$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IInstrumentationWatcher; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.app.IInstrumentationWatcher$Stub extends android.os.Binder implements android.app.IInstrumentationWatcher

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_instrumentationFinished

static final int TRANSACTION_instrumentationStatus
----------------METHODS----------------

public void <init>()

public static android.app.IInstrumentationWatcher asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/IIntentReceiver$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.app.IIntentReceiver$Stub$Proxy extends java.lang.Object implements android.app.IIntentReceiver

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void performReceive(
android.content.Intent
int
java.lang.String
android.os.Bundle
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/IIntentSender$Stub; )
public abstract interface class android.app.IIntentSender extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int send(
int
android.content.Intent
java.lang.String
android.app.IIntentReceiver)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IIntentSender$Stub; )
 class android.app.IIntentSender$Stub$Proxy extends java.lang.Object implements android.app.IIntentSender

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int send(
int
android.content.Intent
java.lang.String
android.app.IIntentReceiver)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/app/IIntentSender$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IIntentSender; )
public abstract class android.app.IIntentSender$Stub extends android.os.Binder implements android.app.IIntentSender

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_send
----------------METHODS----------------

public void <init>()

public static android.app.IIntentSender asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/INotificationManager$Stub; )
public abstract interface class android.app.INotificationManager extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void cancelAllNotifications(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void cancelNotification(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void cancelToast(
java.lang.String
android.app.ITransientNotification)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void enqueueNotification(
java.lang.String
int
android.app.Notification
int[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void enqueueToast(
java.lang.String
android.app.ITransientNotification
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/app/INotificationManager$Stub; )
 class android.app.INotificationManager$Stub$Proxy extends java.lang.Object implements android.app.INotificationManager

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void cancelAllNotifications(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void cancelNotification(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void cancelToast(
java.lang.String
android.app.ITransientNotification)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void enqueueNotification(
java.lang.String
int
android.app.Notification
int[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void enqueueToast(
java.lang.String
android.app.ITransientNotification
int)

public java.lang.String getInterfaceDescriptor()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/INotificationManager$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/app/INotificationManager; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.app.INotificationManager$Stub extends android.os.Binder implements android.app.INotificationManager

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_cancelAllNotifications

static final int TRANSACTION_cancelNotification

static final int TRANSACTION_cancelToast

static final int TRANSACTION_enqueueNotification

static final int TRANSACTION_enqueueToast
----------------METHODS----------------

public void <init>()

public static android.app.INotificationManager asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/ISearchManager$Stub; )
public abstract interface class android.app.ISearchManager extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.server.search.SearchableInfo getSearchableInfo(
android.content.ComponentName
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ISearchManager$Stub; )
 class android.app.ISearchManager$Stub$Proxy extends java.lang.Object implements android.app.ISearchManager

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.server.search.SearchableInfo getSearchableInfo(
android.content.ComponentName
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ISearchManager; )
@dalvik.annotation.MemberClasses (value =Landroid/app/ISearchManager$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.app.ISearchManager$Stub extends android.os.Binder implements android.app.ISearchManager

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_getSearchableInfo
----------------METHODS----------------

public void <init>()

public static android.app.ISearchManager asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/IServiceConnection$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.app.IServiceConnection$Stub$Proxy extends java.lang.Object implements android.app.IServiceConnection

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void connected(
android.content.ComponentName
android.os.IBinder)

public java.lang.String getInterfaceDescriptor()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/IStatusBar$Stub; )
public abstract interface class android.app.IStatusBar extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void activate()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.os.IBinder addIcon(
java.lang.String
java.lang.String
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void deactivate()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void disable(
int
android.os.IBinder
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void removeIcon(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void toggle()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void updateIcon(
android.os.IBinder
java.lang.String
java.lang.String
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IStatusBar$Stub; )
 class android.app.IStatusBar$Stub$Proxy extends java.lang.Object implements android.app.IStatusBar

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void activate()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.os.IBinder addIcon(
java.lang.String
java.lang.String
int
int)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void deactivate()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void disable(
int
android.os.IBinder
java.lang.String)

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void removeIcon(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void toggle()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void updateIcon(
android.os.IBinder
java.lang.String
java.lang.String
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IStatusBar; )
@dalvik.annotation.MemberClasses (value =Landroid/app/IStatusBar$Stub$Proxy; )
public abstract class android.app.IStatusBar$Stub extends android.os.Binder implements android.app.IStatusBar

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_activate

static final int TRANSACTION_addIcon

static final int TRANSACTION_deactivate

static final int TRANSACTION_disable

static final int TRANSACTION_removeIcon

static final int TRANSACTION_toggle

static final int TRANSACTION_updateIcon
----------------METHODS----------------

public void <init>()

public static android.app.IStatusBar asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/IThumbnailReceiver$Stub; )
public abstract interface class android.app.IThumbnailReceiver extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void finished()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void newThumbnail(
int
android.graphics.Bitmap
java.lang.CharSequence)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IThumbnailReceiver$Stub; )
 class android.app.IThumbnailReceiver$Stub$Proxy extends java.lang.Object implements android.app.IThumbnailReceiver

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void finished()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void newThumbnail(
int
android.graphics.Bitmap
java.lang.CharSequence)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/app/IThumbnailReceiver$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IThumbnailReceiver; )
public abstract class android.app.IThumbnailReceiver$Stub extends android.os.Binder implements android.app.IThumbnailReceiver

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_finished

static final int TRANSACTION_newThumbnail
----------------METHODS----------------

public void <init>()

public static android.app.IThumbnailReceiver asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/ITransientNotification$Stub; )
public abstract interface class android.app.ITransientNotification extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void hide()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void show()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ITransientNotification$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.app.ITransientNotification$Stub$Proxy extends java.lang.Object implements android.app.ITransientNotification

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void hide()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void show()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/ITransientNotification$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ITransientNotification; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.app.ITransientNotification$Stub extends android.os.Binder implements android.app.ITransientNotification

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_hide

static final int TRANSACTION_show
----------------METHODS----------------

public void <init>()

public static android.app.ITransientNotification asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/IWallpaperService$Stub; )
public abstract interface class android.app.IWallpaperService extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void clearWallpaper()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getHeightHint()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.os.ParcelFileDescriptor getWallpaper(
android.app.IWallpaperServiceCallback)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getWidthHint()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setDimensionHints(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.os.ParcelFileDescriptor setWallpaper()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/IWallpaperService$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.app.IWallpaperService$Stub$Proxy extends java.lang.Object implements android.app.IWallpaperService

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void clearWallpaper()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getHeightHint()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.os.ParcelFileDescriptor getWallpaper(
android.app.IWallpaperServiceCallback)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getWidthHint()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setDimensionHints(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.os.ParcelFileDescriptor setWallpaper()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IWallpaperService; )
@dalvik.annotation.MemberClasses (value =Landroid/app/IWallpaperService$Stub$Proxy; )
public abstract class android.app.IWallpaperService$Stub extends android.os.Binder implements android.app.IWallpaperService

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_clearWallpaper

static final int TRANSACTION_getHeightHint

static final int TRANSACTION_getWallpaper

static final int TRANSACTION_getWidthHint

static final int TRANSACTION_setDimensionHints

static final int TRANSACTION_setWallpaper
----------------METHODS----------------

public void <init>()

public static android.app.IWallpaperService asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/app/IWallpaperServiceCallback$Stub; )
 class android.app.IWallpaperServiceCallback$Stub$Proxy extends java.lang.Object implements android.app.IWallpaperServiceCallback

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onWallpaperChanged()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/Instrumentation; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.app.Instrumentation$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =ContextMenuRunnable )
 class android.app.Instrumentation$1ContextMenuRunnable extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

private final android.app.Activity activity

private final int flags

private final int identifier

 boolean returnValue

final android.app.Instrumentation this$0
----------------METHODS----------------

public void <init>(
android.app.Instrumentation
android.app.Activity
int
int)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =MenuRunnable )
 class android.app.Instrumentation$1MenuRunnable extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

private final android.app.Activity activity

private final int flags

private final int identifier

 boolean returnValue

final android.app.Instrumentation this$0
----------------METHODS----------------

public void <init>(
android.app.Instrumentation
android.app.Activity
int
int)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =18 name =ActivityGoing )
@dalvik.annotation.EnclosingClass (value =Landroid/app/Instrumentation; )
final class android.app.Instrumentation$ActivityGoing extends java.lang.Object implements android.os.MessageQueue$IdleHandler

----------------FIELDS----------------

private final android.app.Instrumentation$ActivityWaiter mWaiter

final android.app.Instrumentation this$0
----------------METHODS----------------

public void <init>(
android.app.Instrumentation
android.app.Instrumentation$ActivityWaiter)

public final boolean queueIdle()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =ActivityMonitor )
@dalvik.annotation.EnclosingClass (value =Landroid/app/Instrumentation; )
public class android.app.Instrumentation$ActivityMonitor extends java.lang.Object

----------------FIELDS----------------

private final boolean mBlock

private final java.lang.String mClass

 int mHits

 android.app.Activity mLastActivity

private final android.app.Instrumentation$ActivityResult mResult

private final android.content.IntentFilter mWhich
----------------METHODS----------------

public void <init>(
android.content.IntentFilter
android.app.Instrumentation$ActivityResult
boolean)

public void <init>(
java.lang.String
android.app.Instrumentation$ActivityResult
boolean)

public final android.content.IntentFilter getFilter()

public final int getHits()

public final android.app.Activity getLastActivity()

public final android.app.Instrumentation$ActivityResult getResult()

public final boolean isBlocking()

final boolean match(
android.content.Context
android.app.Activity
android.content.Intent)

public final android.app.Activity waitForActivity()

public final android.app.Activity waitForActivityWithTimeout(
long)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/Instrumentation; )
@dalvik.annotation.InnerClass (accessFlags =25 name =ActivityResult )
public final class android.app.Instrumentation$ActivityResult extends java.lang.Object

----------------FIELDS----------------

private final int mResultCode

private final android.content.Intent mResultData
----------------METHODS----------------

public void <init>(
int
android.content.Intent)

public int getResultCode()

public android.content.Intent getResultData()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/Instrumentation; )
@dalvik.annotation.InnerClass (accessFlags =26 name =ActivityWaiter )
final class android.app.Instrumentation$ActivityWaiter extends java.lang.Object

----------------FIELDS----------------

public android.app.Activity activity

public final android.content.Intent intent
----------------METHODS----------------

public void <init>(
android.content.Intent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/Instrumentation; )
@dalvik.annotation.InnerClass (accessFlags =26 name =EmptyRunnable )
final class android.app.Instrumentation$EmptyRunnable extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

 void <init>(
android.app.Instrumentation$1)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =Idler )
@dalvik.annotation.EnclosingClass (value =Landroid/app/Instrumentation; )
final class android.app.Instrumentation$Idler extends java.lang.Object implements android.os.MessageQueue$IdleHandler

----------------FIELDS----------------

private final java.lang.Runnable mCallback

private boolean mIdle
----------------METHODS----------------

public void <init>(
java.lang.Runnable)

public final boolean queueIdle()

public void waitForIdle()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/Instrumentation; )
@dalvik.annotation.InnerClass (accessFlags =18 name =InstrumentationThread )
final class android.app.Instrumentation$InstrumentationThread extends java.lang.Thread

----------------FIELDS----------------

final android.app.Instrumentation this$0
----------------METHODS----------------

public void <init>(
android.app.Instrumentation
java.lang.String)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =SyncRunnable )
@dalvik.annotation.EnclosingClass (value =Landroid/app/Instrumentation; )
final class android.app.Instrumentation$SyncRunnable extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

private boolean mComplete

private final java.lang.Runnable mTarget
----------------METHODS----------------

public void <init>(
java.lang.Runnable)

public void run()

public void waitForComplete()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/Instrumentation$1;Landroid/app/Instrumentation$Idler;Landroid/app/Instrumentation$ActivityGoing;Landroid/app/Instrumentation$ActivityWaiter;Landroid/app/Instrumentation$SyncRunnable;Landroid/app/Instrumentation$EmptyRunnable;Landroid/app/Instrumentation$InstrumentationThread;Landroid/app/Instrumentation$ActivityResult;Landroid/app/Instrumentation$ActivityMonitor; )
public class android.app.Instrumentation extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String REPORT_KEY_IDENTIFIER

public static final java.lang.String REPORT_KEY_STREAMRESULT

private static final java.lang.String TAG
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/app/Instrumentation$ActivityMonitor;>; )
private java.util.List mActivityMonitors

private android.content.Context mAppContext

private boolean mAutomaticPerformanceSnapshots

private android.content.ComponentName mComponent

private android.content.Context mInstrContext

private android.os.MessageQueue mMessageQueue

private android.os.Bundle mPerfMetrics

private long mPreCpuTime

private android.os.Bundle mPrePerfMetrics

private java.lang.Thread mRunner

private long mStart

private final java.lang.Object mSync

private android.app.ActivityThread mThread
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/app/Instrumentation$ActivityWaiter;>; )
private java.util.List mWaitingActivities

private android.app.IInstrumentationWatcher mWatcher
----------------METHODS----------------

public void <init>()

static boolean access$100(
android.app.Instrumentation)

static java.lang.Object access$200(
android.app.Instrumentation)

static java.util.List access$300(
android.app.Instrumentation)

private void addPerfMetricInt(
java.lang.String
int)

private void addPerfMetricLong(
java.lang.String
long)

private void addValue(
java.lang.String
int
android.os.Bundle)

static void checkStartActivityResult(
int
android.content.Intent)
@dalvik.annotation.Throws (value =Ljava/lang/InstantiationException;Ljava/lang/IllegalAccessException;Ljava/lang/ClassNotFoundException; )
@dalvik.annotation.Signature (value =(Ljava/lang/Class<*>;Landroid/content/Context;)Landroid/app/Application; )
public static android.app.Application newApplication(
java.lang.Class
android.content.Context)

private final void validateNotAppThread()

public android.app.Instrumentation$ActivityMonitor addMonitor(
android.content.IntentFilter
android.app.Instrumentation$ActivityResult
boolean)

public android.app.Instrumentation$ActivityMonitor addMonitor(
java.lang.String
android.app.Instrumentation$ActivityResult
boolean)

public void addMonitor(
android.app.Instrumentation$ActivityMonitor)

public void callActivityOnCreate(
android.app.Activity
android.os.Bundle)

public void callActivityOnDestroy(
android.app.Activity)

public void callActivityOnNewIntent(
android.app.Activity
android.content.Intent)

public void callActivityOnPause(
android.app.Activity)

public void callActivityOnPostCreate(
android.app.Activity
android.os.Bundle)

public void callActivityOnRestart(
android.app.Activity)

public void callActivityOnRestoreInstanceState(
android.app.Activity
android.os.Bundle)

public void callActivityOnResume(
android.app.Activity)

public void callActivityOnSaveInstanceState(
android.app.Activity
android.os.Bundle)

public void callActivityOnStart(
android.app.Activity)

public void callActivityOnStop(
android.app.Activity)

public void callApplicationOnCreate(
android.app.Application)

public boolean checkMonitorHit(
android.app.Instrumentation$ActivityMonitor
int)

public void endPerformanceSnapshot()

public android.app.Instrumentation$ActivityResult execStartActivity(
android.content.Context
android.os.IBinder
android.os.IBinder
android.app.Activity
android.content.Intent
int)

public void finish(
int
android.os.Bundle)

public android.os.Bundle getAllocCounts()

public android.os.Bundle getBinderCounts()

public android.content.ComponentName getComponentName()

public android.content.Context getContext()

public android.content.Context getTargetContext()

final void init(
android.app.ActivityThread
android.content.Context
android.content.Context
android.content.ComponentName
android.app.IInstrumentationWatcher)

public boolean invokeContextMenuAction(
android.app.Activity
int
int)

public boolean invokeMenuActionSync(
android.app.Activity
int
int)

public boolean isProfiling()
@dalvik.annotation.Signature (value =(Ljava/lang/Class<*>;Landroid/content/Context;Landroid/os/IBinder;Landroid/app/Application;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/CharSequence;Landroid/app/Activity;Ljava/lang/String;Ljava/lang/Object;)Landroid/app/Activity; )
@dalvik.annotation.Throws (value =Ljava/lang/InstantiationException;Ljava/lang/IllegalAccessException; )
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)
@dalvik.annotation.Throws (value =Ljava/lang/InstantiationException;Ljava/lang/IllegalAccessException;Ljava/lang/ClassNotFoundException; )
public android.app.Activity newActivity(
java.lang.ClassLoader
java.lang.String
android.content.Intent)
@dalvik.annotation.Throws (value =Ljava/lang/InstantiationException;Ljava/lang/IllegalAccessException;Ljava/lang/ClassNotFoundException; )
public android.app.Application newApplication(
java.lang.ClassLoader
java.lang.String
android.content.Context)

public void onCreate(
android.os.Bundle)

public void onDestroy()

public boolean onException(
java.lang.Object
java.lang.Throwable)

public void onStart()

public void removeMonitor(
android.app.Instrumentation$ActivityMonitor)

public void runOnMainSync(
java.lang.Runnable)

public void sendCharacterSync(
int)

public void sendKeyDownUpSync(
int)

public void sendKeySync(
android.view.KeyEvent)

public void sendPointerSync(
android.view.MotionEvent)

public void sendStatus(
int
android.os.Bundle)

public void sendStringSync(
java.lang.String)

public void sendTrackballEventSync(
android.view.MotionEvent)

public void setAutomaticPerformanceSnapshots()

public void setInTouchMode(
boolean)

public void start()

public android.app.Activity startActivitySync(
android.content.Intent)

public void startAllocCounting()

public void startPerformanceSnapshot()

public void startProfiling()

public void stopAllocCounting()

public void stopProfiling()

public void waitForIdle(
java.lang.Runnable)

public void waitForIdleSync()

public android.app.Activity waitForMonitor(
android.app.Instrumentation$ActivityMonitor)

public android.app.Activity waitForMonitorWithTimeout(
android.app.Instrumentation$ActivityMonitor
long)

________________CLASS________________


public class android.util.AndroidRuntimeException extends java.lang.RuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.Exception)

public void <init>(
java.lang.String)

________________CLASS________________


final class android.app.IntentReceiverLeaked extends android.util.AndroidRuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/IOnKeyguardExitResult$Stub; )
public abstract interface class android.view.IOnKeyguardExitResult extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onKeyguardExitResult(
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/IOnKeyguardExitResult; )
@dalvik.annotation.MemberClasses (value =Landroid/view/IOnKeyguardExitResult$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.view.IOnKeyguardExitResult$Stub extends android.os.Binder implements android.view.IOnKeyguardExitResult

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_onKeyguardExitResult
----------------METHODS----------------

public void <init>()

public static android.view.IOnKeyguardExitResult asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.app.KeyguardManager$1 extends android.view.IOnKeyguardExitResult$Stub

----------------FIELDS----------------

final android.app.KeyguardManager this$0

final android.app.KeyguardManager$OnKeyguardExitResult val$callback
----------------METHODS----------------

 void <init>(
android.app.KeyguardManager
android.app.KeyguardManager$OnKeyguardExitResult)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onKeyguardExitResult(
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/KeyguardManager; )
@dalvik.annotation.InnerClass (accessFlags =1 name =KeyguardLock )
public class android.app.KeyguardManager$KeyguardLock extends java.lang.Object

----------------FIELDS----------------

private java.lang.String mTag

private android.os.IBinder mToken

final android.app.KeyguardManager this$0
----------------METHODS----------------

 void <init>(
android.app.KeyguardManager
java.lang.String)

public void disableKeyguard()

public void reenableKeyguard()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnKeyguardExitResult )
@dalvik.annotation.EnclosingClass (value =Landroid/app/KeyguardManager; )
public abstract interface class android.app.KeyguardManager$OnKeyguardExitResult extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onKeyguardExitResult(
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/KeyguardManager$OnKeyguardExitResult;Landroid/app/KeyguardManager$KeyguardLock; )
public class android.app.KeyguardManager extends java.lang.Object

----------------FIELDS----------------

private android.view.IWindowManager mWM
----------------METHODS----------------

 void <init>()

static android.view.IWindowManager access$000(
android.app.KeyguardManager)

public void exitKeyguardSecurely(
android.app.KeyguardManager$OnKeyguardExitResult)

public boolean inKeyguardRestrictedInputMode()

public android.app.KeyguardManager$KeyguardLock newKeyguardLock(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/LauncherActivity; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.app.LauncherActivity$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/Filter$1;Landroid/widget/Filter$RequestArguments;Landroid/widget/Filter$ResultsHandler;Landroid/widget/Filter$RequestHandler;Landroid/widget/Filter$FilterListener;Landroid/widget/Filter$FilterResults; )
public abstract class android.widget.Filter extends java.lang.Object

----------------FIELDS----------------

private static final int FILTER_TOKEN

private static final int FINISH_TOKEN

private static final java.lang.String THREAD_NAME

private android.os.Handler mResultHandler

private android.os.Handler mThreadHandler
----------------METHODS----------------

public void <init>()

static android.os.Handler access$200(
android.widget.Filter)

static android.os.Handler access$300(
android.widget.Filter)

static android.os.Handler access$302(
android.widget.Filter
android.os.Handler)

public java.lang.CharSequence convertResultToString(
java.lang.Object)

public final void filter(
java.lang.CharSequence)

public final void filter(
java.lang.CharSequence
android.widget.Filter$FilterListener)

protected abstract android.widget.Filter$FilterResults performFiltering(
java.lang.CharSequence)

protected abstract void publishResults(
java.lang.CharSequence
android.widget.Filter$FilterResults)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/LauncherActivity$ActivityAdapter; )
@dalvik.annotation.InnerClass (accessFlags =2 name =ArrayFilter )
 class android.app.LauncherActivity$ActivityAdapter$ArrayFilter extends android.widget.Filter

----------------FIELDS----------------

final android.app.LauncherActivity$ActivityAdapter this$1
----------------METHODS----------------

private void <init>(
android.app.LauncherActivity$ActivityAdapter)

 void <init>(
android.app.LauncherActivity$ActivityAdapter
android.app.LauncherActivity$1)

protected android.widget.Filter$FilterResults performFiltering(
java.lang.CharSequence)

protected void publishResults(
java.lang.CharSequence
android.widget.Filter$FilterResults)

________________CLASS________________


public abstract interface class android.widget.Adapter extends java.lang.Object

----------------FIELDS----------------

public static final int IGNORE_ITEM_VIEW_TYPE

public static final int NO_SELECTION
----------------METHODS----------------

public abstract int getCount()

public abstract java.lang.Object getItem(
int)

public abstract long getItemId(
int)

public abstract int getItemViewType(
int)

public abstract android.view.View getView(
int
android.view.View
android.view.ViewGroup)

public abstract int getViewTypeCount()

public abstract boolean hasStableIds()

public abstract boolean isEmpty()

public abstract void registerDataSetObserver(
android.database.DataSetObserver)

public abstract void unregisterDataSetObserver(
android.database.DataSetObserver)

________________CLASS________________


public abstract interface class android.widget.ListAdapter extends java.lang.Object implements android.widget.Adapter

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean areAllItemsEnabled()

public abstract boolean isEnabled(
int)

________________CLASS________________


public abstract interface class android.widget.SpinnerAdapter extends java.lang.Object implements android.widget.Adapter

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.view.View getDropDownView(
int
android.view.View
android.view.ViewGroup)

________________CLASS________________


public abstract class android.widget.BaseAdapter extends java.lang.Object implements android.widget.ListAdapter, android.widget.SpinnerAdapter

----------------FIELDS----------------

private final android.database.DataSetObservable mDataSetObservable
----------------METHODS----------------

public void <init>()

public boolean areAllItemsEnabled()

public android.view.View getDropDownView(
int
android.view.View
android.view.ViewGroup)

public int getItemViewType(
int)

public int getViewTypeCount()

public boolean hasStableIds()

public boolean isEmpty()

public boolean isEnabled(
int)

public void notifyDataSetChanged()

public void notifyDataSetInvalidated()

public void registerDataSetObserver(
android.database.DataSetObserver)

public void unregisterDataSetObserver(
android.database.DataSetObserver)

________________CLASS________________


public abstract interface class android.widget.Filterable extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.widget.Filter getFilter()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/LauncherActivity; )
@dalvik.annotation.InnerClass (accessFlags =2 name =ActivityAdapter )
@dalvik.annotation.MemberClasses (value =Landroid/app/LauncherActivity$ActivityAdapter$ArrayFilter; )
 class android.app.LauncherActivity$ActivityAdapter extends android.widget.BaseAdapter implements android.widget.Filterable

----------------FIELDS----------------

private final java.lang.Object lock
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
protected java.util.List mActivitiesList

protected final android.content.Context mContext

private android.widget.Filter mFilter

protected final android.view.LayoutInflater mInflater

protected final android.content.Intent mIntent
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/content/pm/ResolveInfo;>; )
private java.util.ArrayList mOriginalValues

final android.app.LauncherActivity this$0
----------------METHODS----------------

public void <init>(
android.app.LauncherActivity
android.content.Context
android.content.Intent)

static java.util.ArrayList access$100(
android.app.LauncherActivity$ActivityAdapter)

static java.util.ArrayList access$102(
android.app.LauncherActivity$ActivityAdapter
java.util.ArrayList)

static java.lang.Object access$200(
android.app.LauncherActivity$ActivityAdapter)

private void bindView(
android.view.View
android.content.pm.ResolveInfo)

private char getCandidateLetter(
android.content.pm.ResolveInfo)

public int getCount()

public android.widget.Filter getFilter()

public java.lang.Object getItem(
int)

public long getItemId(
int)

public android.view.View getView(
int
android.view.View
android.view.ViewGroup)

public android.content.Intent intentForPosition(
int)

________________CLASS________________


public class android.app.ListActivity extends android.app.Activity

----------------FIELDS----------------

protected android.widget.ListAdapter mAdapter

private boolean mFinishedStart

private android.os.Handler mHandler

protected android.widget.ListView mList

private android.widget.AdapterView$OnItemClickListener mOnClickListener

private java.lang.Runnable mRequestFocus
----------------METHODS----------------

public void <init>()

private void ensureList()

public android.widget.ListAdapter getListAdapter()

public android.widget.ListView getListView()

public long getSelectedItemId()

public int getSelectedItemPosition()

public void onContentChanged()

protected void onListItemClick(
android.widget.ListView
android.view.View
int
long)

protected void onRestoreInstanceState(
android.os.Bundle)

public void setListAdapter(
android.widget.ListAdapter)

public void setSelection(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/LauncherActivity$1;Landroid/app/LauncherActivity$ActivityAdapter; )
public abstract class android.app.LauncherActivity extends android.app.ListActivity

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

protected abstract android.content.Intent getTargetIntent()

protected void onCreate(
android.os.Bundle)

protected void onListItemClick(
android.widget.ListView
android.view.View
int
long)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ListActivity; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.app.ListActivity$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.app.ListActivity this$0
----------------METHODS----------------

 void <init>(
android.app.ListActivity)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AdapterView; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnItemClickListener )
public abstract interface class android.widget.AdapterView$OnItemClickListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Landroid/widget/AdapterView<*>;Landroid/view/View;IJ)V )
public abstract void onItemClick(
android.widget.AdapterView
android.view.View
int
long)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/app/ListActivity; )
 class android.app.ListActivity$2 extends java.lang.Object implements android.widget.AdapterView$OnItemClickListener

----------------FIELDS----------------

final android.app.ListActivity this$0
----------------METHODS----------------

 void <init>(
android.app.ListActivity)

public void onItemClick(
android.widget.AdapterView
android.view.View
int
long)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/LocalActivityManager; )
@dalvik.annotation.InnerClass (accessFlags =10 name =LocalActivityRecord )
 class android.app.LocalActivityManager$LocalActivityRecord extends android.os.Binder

----------------FIELDS----------------

 android.app.Activity activity

 android.content.pm.ActivityInfo activityInfo

 int curState

final java.lang.String id

 android.os.Bundle instanceState

 android.content.Intent intent

 android.view.Window window
----------------METHODS----------------

 void <init>(
java.lang.String
android.content.Intent)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/LocalActivityManager$LocalActivityRecord; )
public class android.app.LocalActivityManager extends java.lang.Object

----------------FIELDS----------------

static final int CREATED

static final int DESTROYED

static final int INITIALIZING

static final int RESTORED

static final int RESUMED

static final int STARTED

private static final java.lang.String TAG

private static final boolean localLOGV
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Landroid/app/LocalActivityManager$LocalActivityRecord;>; )
private final java.util.Map mActivities
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/app/LocalActivityManager$LocalActivityRecord;>; )
private final java.util.ArrayList mActivityArray

private final android.app.ActivityThread mActivityThread

private int mCurState

private boolean mFinishing

private final android.app.Activity mParent

private android.app.LocalActivityManager$LocalActivityRecord mResumed

private boolean mSingleMode
----------------METHODS----------------

public void <init>(
android.app.Activity
boolean)

private void moveToState(
android.app.LocalActivityManager$LocalActivityRecord
int)

private android.view.Window performDestroy(
android.app.LocalActivityManager$LocalActivityRecord
boolean)

private void performPause(
android.app.LocalActivityManager$LocalActivityRecord
boolean)

public android.view.Window destroyActivity(
java.lang.String
boolean)

public void dispatchCreate(
android.os.Bundle)

public void dispatchDestroy(
boolean)

public void dispatchPause(
boolean)

public void dispatchResume()

public void dispatchStop()

public android.app.Activity getActivity(
java.lang.String)

public android.app.Activity getCurrentActivity()

public java.lang.String getCurrentId()

public void removeAllActivities()

public android.os.Bundle saveInstanceState()

public android.view.Window startActivity(
java.lang.String
android.content.Intent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/Notification; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/app/Notification;>; )
final class android.app.Notification$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.app.Notification createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.app.Notification[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.app.Notification extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/app/Notification;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final int DEFAULT_ALL

public static final int DEFAULT_LIGHTS

public static final int DEFAULT_SOUND

public static final int DEFAULT_VIBRATE

public static final int FLAG_AUTO_CANCEL

public static final int FLAG_INSISTENT

public static final int FLAG_NO_CLEAR

public static final int FLAG_ONGOING_EVENT

public static final int FLAG_ONLY_ALERT_ONCE

public static final int FLAG_SHOW_LIGHTS

public static final int STREAM_DEFAULT

public int audioStreamType

public android.app.PendingIntent contentIntent

public android.widget.RemoteViews contentView

public int defaults

public android.app.PendingIntent deleteIntent

public int flags

public int icon

public int iconLevel

public int ledARGB

public int ledOffMS

public int ledOnMS

public int number

public android.net.Uri sound

public java.lang.CharSequence tickerText

public long[] vibrate

public long when
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
int
java.lang.CharSequence
long)

public void <init>(
android.content.Context
int
java.lang.CharSequence
long
java.lang.CharSequence
java.lang.CharSequence
android.content.Intent)

public void <init>(
android.os.Parcel)

public int describeContents()

public void setLatestEventInfo(
android.content.Context
java.lang.CharSequence
java.lang.CharSequence
android.app.PendingIntent)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public class android.app.NotificationManager extends java.lang.Object

----------------FIELDS----------------

private static boolean DEBUG

private static java.lang.String TAG

private static boolean localLOGV

private static android.app.INotificationManager sService

private android.content.Context mContext
----------------METHODS----------------

static void <clinit>()

 void <init>(
android.content.Context
android.os.Handler)

private static android.app.INotificationManager getService()

public void cancel(
int)

public void cancelAll()

public void notify(
int
android.app.Notification)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/app/PendingIntent;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/app/PendingIntent; )
final class android.app.PendingIntent$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.app.PendingIntent createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.app.PendingIntent[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.util.AndroidException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.Exception)

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/PendingIntent; )
@dalvik.annotation.InnerClass (accessFlags =9 name =CanceledException )
public class android.app.PendingIntent$CanceledException extends android.util.AndroidException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.Exception)

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/PendingIntent; )
@dalvik.annotation.InnerClass (accessFlags =10 name =FinishedDispatcher )
 class android.app.PendingIntent$FinishedDispatcher extends android.app.IIntentReceiver$Stub implements java.lang.Runnable

----------------FIELDS----------------

private final android.os.Handler mHandler

private android.content.Intent mIntent

private final android.app.PendingIntent mPendingIntent

private int mResultCode

private java.lang.String mResultData

private android.os.Bundle mResultExtras

private final android.app.PendingIntent$OnFinished mWho
----------------METHODS----------------

 void <init>(
android.app.PendingIntent
android.app.PendingIntent$OnFinished
android.os.Handler)

public void performReceive(
android.content.Intent
int
java.lang.String
android.os.Bundle
boolean)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnFinished )
@dalvik.annotation.EnclosingClass (value =Landroid/app/PendingIntent; )
public abstract interface class android.app.PendingIntent$OnFinished extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onSendFinished(
android.app.PendingIntent
android.content.Intent
int
java.lang.String
android.os.Bundle)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/PendingIntent$FinishedDispatcher;Landroid/app/PendingIntent$OnFinished;Landroid/app/PendingIntent$CanceledException; )
public final class android.app.PendingIntent extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/app/PendingIntent;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final int FLAG_CANCEL_CURRENT

public static final int FLAG_NO_CREATE

public static final int FLAG_ONE_SHOT

private final android.app.IIntentSender mTarget
----------------METHODS----------------

static void <clinit>()

 void <init>(
android.app.IIntentSender)

 void <init>(
android.os.IBinder)

public static android.app.PendingIntent getActivity(
android.content.Context
int
android.content.Intent
int)

public static android.app.PendingIntent getBroadcast(
android.content.Context
int
android.content.Intent
int)

public static android.app.PendingIntent getService(
android.content.Context
int
android.content.Intent
int)

public static android.app.PendingIntent readPendingIntentOrNullFromParcel(
android.os.Parcel)

public static void writePendingIntentOrNullToParcel(
android.app.PendingIntent
android.os.Parcel)

public void cancel()

public int describeContents()

public boolean equals(
java.lang.Object)

 android.app.IIntentSender getTarget()

public java.lang.String getTargetPackage()

public int hashCode()
@dalvik.annotation.Throws (value =Landroid/app/PendingIntent$CanceledException; )
public void send()
@dalvik.annotation.Throws (value =Landroid/app/PendingIntent$CanceledException; )
public void send(
int)
@dalvik.annotation.Throws (value =Landroid/app/PendingIntent$CanceledException; )
public void send(
int
android.app.PendingIntent$OnFinished
android.os.Handler)
@dalvik.annotation.Throws (value =Landroid/app/PendingIntent$CanceledException; )
public void send(
android.content.Context
int
android.content.Intent)
@dalvik.annotation.Throws (value =Landroid/app/PendingIntent$CanceledException; )
public void send(
android.content.Context
int
android.content.Intent
android.app.PendingIntent$OnFinished
android.os.Handler)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.app.ProgressDialog$1 extends android.os.Handler

----------------FIELDS----------------

final android.app.ProgressDialog this$0
----------------METHODS----------------

 void <init>(
android.app.ProgressDialog)

public void handleMessage(
android.os.Message)

________________CLASS________________


public class android.app.ProgressDialog extends android.app.AlertDialog

----------------FIELDS----------------

public static final int STYLE_HORIZONTAL

public static final int STYLE_SPINNER

private boolean mHasStarted

private int mIncrementBy

private int mIncrementSecondaryBy

private boolean mIndeterminate

private android.graphics.drawable.Drawable mIndeterminateDrawable

private int mMax

private java.lang.CharSequence mMessage

private android.widget.TextView mMessageView

private android.widget.ProgressBar mProgress

private android.graphics.drawable.Drawable mProgressDrawable

private android.widget.TextView mProgressNumber

private android.widget.TextView mProgressPercent

private java.text.NumberFormat mProgressPercentFormat

private int mProgressStyle

private int mProgressVal

private int mSecondaryProgressVal

private android.os.Handler mViewUpdateHandler
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
int)

static android.widget.ProgressBar access$000(
android.app.ProgressDialog)

static android.widget.TextView access$100(
android.app.ProgressDialog)

static java.text.NumberFormat access$200(
android.app.ProgressDialog)

static android.widget.TextView access$300(
android.app.ProgressDialog)

private void onProgressChanged()

public static android.app.ProgressDialog show(
android.content.Context
java.lang.CharSequence
java.lang.CharSequence)

public static android.app.ProgressDialog show(
android.content.Context
java.lang.CharSequence
java.lang.CharSequence
boolean)

public static android.app.ProgressDialog show(
android.content.Context
java.lang.CharSequence
java.lang.CharSequence
boolean
boolean)

public static android.app.ProgressDialog show(
android.content.Context
java.lang.CharSequence
java.lang.CharSequence
boolean
boolean
android.content.DialogInterface$OnCancelListener)

public int getMax()

public int getProgress()

public int getSecondaryProgress()

public void incrementProgressBy(
int)

public void incrementSecondaryProgressBy(
int)

public boolean isIndeterminate()

protected void onCreate(
android.os.Bundle)

public void onStart()

protected void onStop()

public void setIndeterminate(
boolean)

public void setIndeterminateDrawable(
android.graphics.drawable.Drawable)

public void setMax(
int)

public void setMessage(
java.lang.CharSequence)

public void setProgress(
int)

public void setProgressDrawable(
android.graphics.drawable.Drawable)

public void setProgressStyle(
int)

public void setSecondaryProgress(
int)

________________CLASS________________


 class android.app.ReceiverRestrictedContext extends android.content.ContextWrapper

----------------FIELDS----------------
----------------METHODS----------------

 void <init>(
android.content.Context)

public boolean bindService(
android.content.Intent
android.content.ServiceConnection
int)

public android.content.Intent registerReceiver(
android.content.BroadcastReceiver
android.content.IntentFilter)

public android.content.Intent registerReceiver(
android.content.BroadcastReceiver
android.content.IntentFilter
java.lang.String
android.os.Handler)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/ResultInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/app/ResultInfo;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.app.ResultInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.app.ResultInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.app.ResultInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.app.ResultInfo extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/app/ResultInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public final android.content.Intent mData

public final int mRequestCode

public final int mResultCode

public final java.lang.String mResultWho
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.os.Parcel)

public void <init>(
java.lang.String
int
int
android.content.Intent)

public int describeContents()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnGlobalLayoutListener )
@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewTreeObserver; )
public abstract interface class android.view.ViewTreeObserver$OnGlobalLayoutListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onGlobalLayout()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/SearchDialog; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.app.SearchDialog$10 extends java.lang.Object implements android.view.ViewTreeObserver$OnGlobalLayoutListener

----------------FIELDS----------------

final android.app.SearchDialog this$0
----------------METHODS----------------

 void <init>(
android.app.SearchDialog)

public void onGlobalLayout()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/SearchDialog; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.app.SearchDialog$11 extends java.lang.Object implements android.widget.AdapterView$OnItemClickListener

----------------FIELDS----------------

final android.app.SearchDialog this$0
----------------METHODS----------------

 void <init>(
android.app.SearchDialog)

public void onItemClick(
android.widget.AdapterView
android.view.View
int
long)

________________CLASS________________


public abstract interface class android.text.TextWatcher extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void afterTextChanged(
android.text.Editable)

public abstract void beforeTextChanged(
java.lang.CharSequence
int
int
int)

public abstract void onTextChanged(
java.lang.CharSequence
int
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/SearchDialog; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.app.SearchDialog$1 extends java.lang.Object implements android.text.TextWatcher

----------------FIELDS----------------

final android.app.SearchDialog this$0
----------------METHODS----------------

 void <init>(
android.app.SearchDialog)

public void afterTextChanged(
android.text.Editable)

public void beforeTextChanged(
java.lang.CharSequence
int
int
int)

public void onTextChanged(
java.lang.CharSequence
int
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/View; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnKeyListener )
public abstract interface class android.view.View$OnKeyListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onKey(
android.view.View
int
android.view.KeyEvent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/SearchDialog; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.app.SearchDialog$2 extends java.lang.Object implements android.view.View$OnKeyListener

----------------FIELDS----------------

final android.app.SearchDialog this$0
----------------METHODS----------------

 void <init>(
android.app.SearchDialog)

public boolean onKey(
android.view.View
int
android.view.KeyEvent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnClickListener )
@dalvik.annotation.EnclosingClass (value =Landroid/view/View; )
public abstract interface class android.view.View$OnClickListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onClick(
android.view.View)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/SearchDialog; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.app.SearchDialog$3 extends java.lang.Object implements android.view.View$OnClickListener

----------------FIELDS----------------

final android.app.SearchDialog this$0
----------------METHODS----------------

 void <init>(
android.app.SearchDialog)

public void onClick(
android.view.View)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/SearchDialog; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.app.SearchDialog$4 extends java.lang.Object implements android.view.View$OnKeyListener

----------------FIELDS----------------

final android.app.SearchDialog this$0
----------------METHODS----------------

 void <init>(
android.app.SearchDialog)

public boolean onKey(
android.view.View
int
android.view.KeyEvent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/app/SearchDialog; )
 class android.app.SearchDialog$5 extends java.lang.Object implements android.view.View$OnKeyListener

----------------FIELDS----------------

final android.app.SearchDialog this$0
----------------METHODS----------------

 void <init>(
android.app.SearchDialog)

public boolean onKey(
android.view.View
int
android.view.KeyEvent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnFocusChangeListener )
@dalvik.annotation.EnclosingClass (value =Landroid/view/View; )
public abstract interface class android.view.View$OnFocusChangeListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onFocusChange(
android.view.View
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/app/SearchDialog; )
 class android.app.SearchDialog$6 extends java.lang.Object implements android.view.View$OnFocusChangeListener

----------------FIELDS----------------

final android.app.SearchDialog this$0
----------------METHODS----------------

 void <init>(
android.app.SearchDialog)

public void onFocusChange(
android.view.View
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnItemSelectedListener )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/AdapterView; )
public abstract interface class android.widget.AdapterView$OnItemSelectedListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Landroid/widget/AdapterView<*>;Landroid/view/View;IJ)V )
public abstract void onItemSelected(
android.widget.AdapterView
android.view.View
int
long)
@dalvik.annotation.Signature (value =(Landroid/widget/AdapterView<*>;)V )
public abstract void onNothingSelected(
android.widget.AdapterView)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/SearchDialog; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.app.SearchDialog$7 extends java.lang.Object implements android.widget.AdapterView$OnItemSelectedListener

----------------FIELDS----------------

final android.app.SearchDialog this$0
----------------METHODS----------------

 void <init>(
android.app.SearchDialog)

public void onItemSelected(
android.widget.AdapterView
android.view.View
int
long)

public void onNothingSelected(
android.widget.AdapterView)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/SearchDialog; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.app.SearchDialog$8 extends android.content.BroadcastReceiver

----------------FIELDS----------------

final android.app.SearchDialog this$0
----------------METHODS----------------

 void <init>(
android.app.SearchDialog)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/SearchDialog; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.app.SearchDialog$9 extends android.os.Handler

----------------FIELDS----------------

final android.app.SearchDialog this$0
----------------METHODS----------------

 void <init>(
android.app.SearchDialog)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1544 name =CursorFilterClient )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/CursorFilter; )
abstract interface class android.widget.CursorFilter$CursorFilterClient extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void changeCursor(
android.database.Cursor)

public abstract java.lang.CharSequence convertToString(
android.database.Cursor)

public abstract android.database.Cursor getCursor()

public abstract android.database.Cursor runQueryOnBackgroundThread(
java.lang.CharSequence)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/CursorAdapter$1;Landroid/widget/CursorAdapter$MyDataSetObserver;Landroid/widget/CursorAdapter$ChangeObserver; )
public abstract class android.widget.CursorAdapter extends android.widget.BaseAdapter implements android.widget.Filterable, android.widget.CursorFilter$CursorFilterClient

----------------FIELDS----------------

protected boolean mAutoRequery

protected android.widget.CursorAdapter$ChangeObserver mChangeObserver

protected android.content.Context mContext

protected android.database.Cursor mCursor

protected android.widget.CursorFilter mCursorFilter

protected android.database.DataSetObserver mDataSetObserver

protected boolean mDataValid

protected android.widget.FilterQueryProvider mFilterQueryProvider

protected int mRowIDColumn
----------------METHODS----------------

public void <init>(
android.content.Context
android.database.Cursor)

public void <init>(
android.content.Context
android.database.Cursor
boolean)

public abstract void bindView(
android.view.View
android.content.Context
android.database.Cursor)

public void changeCursor(
android.database.Cursor)

public java.lang.CharSequence convertToString(
android.database.Cursor)

public final int getCount()

public android.database.Cursor getCursor()

public android.view.View getDropDownView(
int
android.view.View
android.view.ViewGroup)

public android.widget.Filter getFilter()

public android.widget.FilterQueryProvider getFilterQueryProvider()

public final java.lang.Object getItem(
int)

public final long getItemId(
int)

public android.view.View getView(
int
android.view.View
android.view.ViewGroup)

public boolean hasStableIds()

protected void init(
android.content.Context
android.database.Cursor
boolean)

public android.view.View newDropDownView(
android.content.Context
android.database.Cursor
android.view.ViewGroup)

public abstract android.view.View newView(
android.content.Context
android.database.Cursor
android.view.ViewGroup)

public android.database.Cursor runQueryOnBackgroundThread(
java.lang.CharSequence)

public void setFilterQueryProvider(
android.widget.FilterQueryProvider)

________________CLASS________________


public abstract class android.widget.ResourceCursorAdapter extends android.widget.CursorAdapter

----------------FIELDS----------------

private int mDropDownLayout

private android.view.LayoutInflater mInflater

private int mLayout
----------------METHODS----------------

public void <init>(
android.content.Context
int
android.database.Cursor)

public android.view.View newDropDownView(
android.content.Context
android.database.Cursor
android.view.ViewGroup)

public android.view.View newView(
android.content.Context
android.database.Cursor
android.view.ViewGroup)

public void setDropDownViewResource(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/SimpleCursorAdapter$CursorToStringConverter;Landroid/widget/SimpleCursorAdapter$ViewBinder; )
public class android.widget.SimpleCursorAdapter extends android.widget.ResourceCursorAdapter

----------------FIELDS----------------

private android.widget.SimpleCursorAdapter$CursorToStringConverter mCursorToStringConverter

protected int[] mFrom

private java.lang.String[] mOriginalFrom

private int mStringConversionColumn

protected int[] mTo

private android.widget.SimpleCursorAdapter$ViewBinder mViewBinder
----------------METHODS----------------

public void <init>(
android.content.Context
int
android.database.Cursor
java.lang.String[]
int[])

private void findColumns(
java.lang.String[])

public void bindView(
android.view.View
android.content.Context
android.database.Cursor)

public void changeCursor(
android.database.Cursor)

public java.lang.CharSequence convertToString(
android.database.Cursor)

public android.widget.SimpleCursorAdapter$CursorToStringConverter getCursorToStringConverter()

public int getStringConversionColumn()

public android.widget.SimpleCursorAdapter$ViewBinder getViewBinder()

public void setCursorToStringConverter(
android.widget.SimpleCursorAdapter$CursorToStringConverter)

public void setStringConversionColumn(
int)

public void setViewBinder(
android.widget.SimpleCursorAdapter$ViewBinder)

public void setViewImage(
android.widget.ImageView
java.lang.String)

public void setViewText(
android.widget.TextView
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =SuggestionsCursorAdapter )
@dalvik.annotation.EnclosingClass (value =Landroid/app/SearchDialog; )
 class android.app.SearchDialog$SuggestionsCursorAdapter extends android.widget.SimpleCursorAdapter

----------------FIELDS----------------

private android.content.res.Resources mProviderResources
----------------METHODS----------------

public void <init>(
android.content.Context
int
android.database.Cursor
java.lang.String[]
int[]
android.content.Context)

public android.view.View getView(
int
android.view.View
android.view.ViewGroup)

public void setViewImage(
android.widget.ImageView
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.app.SearchDialog$SuggestionsRunner$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.app.SearchDialog$SuggestionsRunner this$1

final android.database.Cursor val$c

final android.app.SearchDialog$SuggestionsRunner$Request val$useRequest
----------------METHODS----------------

 void <init>(
android.app.SearchDialog$SuggestionsRunner
android.database.Cursor
android.app.SearchDialog$SuggestionsRunner$Request)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =Request )
@dalvik.annotation.EnclosingClass (value =Landroid/app/SearchDialog$SuggestionsRunner; )
 class android.app.SearchDialog$SuggestionsRunner$Request extends java.lang.Object

----------------FIELDS----------------

final boolean cancelRequest

final java.lang.String mQueryText

final android.server.search.SearchableInfo mSearchableInfo

final android.app.SearchDialog$SuggestionsRunner this$1
----------------METHODS----------------

 void <init>(
android.app.SearchDialog$SuggestionsRunner)

 void <init>(
android.app.SearchDialog$SuggestionsRunner
android.server.search.SearchableInfo
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =SuggestionsRunner )
@dalvik.annotation.MemberClasses (value =Landroid/app/SearchDialog$SuggestionsRunner$Request; )
@dalvik.annotation.EnclosingClass (value =Landroid/app/SearchDialog; )
 class android.app.SearchDialog$SuggestionsRunner extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/concurrent/LinkedBlockingQueue<Landroid/app/SearchDialog$SuggestionsRunner$Request;>; )
private final java.util.concurrent.LinkedBlockingQueue mSuggestionsQueue

final android.app.SearchDialog this$0
----------------METHODS----------------

private void <init>(
android.app.SearchDialog)

 void <init>(
android.app.SearchDialog
android.app.SearchDialog$1)

static void access$100(
android.app.SearchDialog$SuggestionsRunner)

private void cancelSuggestions()

public void requestSuggestions(
android.server.search.SearchableInfo
java.lang.String)

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/SearchDialog$SuggestionsCursorAdapter;Landroid/app/SearchDialog$SuggestionsRunner; )
public class android.app.SearchDialog extends android.app.Dialog

----------------FIELDS----------------

static final int DBG_JAM_THREADING

private static final int DBG_LOG_TIMING

private static final java.lang.String INSTANCE_KEY_APPDATA

private static final java.lang.String INSTANCE_KEY_COMPONENT

private static final java.lang.String INSTANCE_KEY_DISPLAY_QUERY

private static final java.lang.String INSTANCE_KEY_DISPLAY_SEL_END

private static final java.lang.String INSTANCE_KEY_DISPLAY_SEL_START

private static final java.lang.String INSTANCE_KEY_GLOBALSEARCH

private static final java.lang.String INSTANCE_KEY_SELECTED_ELEMENT

private static final java.lang.String INSTANCE_KEY_SUGGESTION_QUERY

private static final java.lang.String INSTANCE_KEY_USER_QUERY

private static final int INSTANCE_SELECTED_BUTTON

private static final int INSTANCE_SELECTED_QUERY

static final java.lang.String LOG_TAG

private static final int MESSAGE_DISMISS

private static final java.lang.String[] ONE_LINE_FROM

private static final java.lang.String[] ONE_LINE_ICONS_FROM

private static final int[] ONE_LINE_ICONS_TO

private static final int[] ONE_LINE_TO

private static final java.lang.String[] TWO_LINE_FROM

private static final java.lang.String[] TWO_LINE_ICONS_FROM

private static final int[] TWO_LINE_ICONS_TO

private static final int[] TWO_LINE_TO

private android.content.Context mActivityContext

private android.os.Bundle mAppSearchData

private android.widget.TextView mBadgeLabel

private android.content.BroadcastReceiver mBroadcastReceiver

 android.content.IntentFilter mCloseDialogsFilter

private android.os.Handler mDismissHandler

private android.view.ViewTreeObserver$OnGlobalLayoutListener mGlobalLayoutListener

private boolean mGlobalSearchMode

private android.widget.Button mGoButton

 android.view.View$OnClickListener mGoButtonClickListener

 android.view.View$OnKeyListener mGoButtonKeyListener

private final android.os.Handler mHandler

private java.util.concurrent.atomic.AtomicLong mLastLogTime

private android.content.ComponentName mLaunchComponent

private boolean mLeaveJammedQueryOnRefocus

private boolean mNonUserQuery

 android.content.IntentFilter mPackageFilter

private int mPresetSelection

private java.lang.String mPreviousSuggestionQuery

private android.content.Context mProviderContext

private android.view.View mSearchBarLayout

private android.widget.LinearLayout mSearchEditLayout

private android.widget.EditText mSearchTextField

private android.server.search.SearchableInfo mSearchable

private boolean mSkipNextAnimate

 android.view.View$OnFocusChangeListener mSuggestFocusListener

 android.widget.AdapterView$OnItemSelectedListener mSuggestSelectedListener

private java.lang.String mSuggestionAction

private android.net.Uri mSuggestionData

private java.lang.String mSuggestionQuery

private android.view.animation.Animation mSuggestionsEntry

private android.view.animation.Animation mSuggestionsExit

 android.view.View$OnKeyListener mSuggestionsKeyListener

private android.widget.ListView mSuggestionsList

private android.widget.AdapterView$OnItemClickListener mSuggestionsListItemClickListener

private android.app.SearchDialog$SuggestionsRunner mSuggestionsRunner

 android.view.View$OnKeyListener mTextKeyListener

private android.text.TextWatcher mTextWatcher

private java.lang.String mUserQuery

private int mUserQuerySelEnd

private int mUserQuerySelStart

private android.view.ViewTreeObserver mViewTreeObserver
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

static android.os.Handler access$1000(
android.app.SearchDialog)

static android.server.search.SearchableInfo access$1100(
android.app.SearchDialog)

static boolean access$1200(
android.app.SearchDialog
android.view.View
int
android.view.KeyEvent)

static void access$1300(
android.app.SearchDialog
int
java.lang.String)

static boolean access$1400(
android.app.SearchDialog
android.view.View
int
android.view.KeyEvent)

static android.widget.ListView access$1500(
android.app.SearchDialog)

static void access$1600(
android.app.SearchDialog
boolean
android.widget.AdapterView
int)

static boolean access$1700(
android.app.SearchDialog)

static void access$1800(
android.app.SearchDialog)

static boolean access$1900(
android.app.SearchDialog
android.widget.AdapterView
int)

static void access$200(
android.app.SearchDialog)

static boolean access$300(
android.app.SearchDialog)

static void access$400(
android.app.SearchDialog)

static java.lang.String access$502(
android.app.SearchDialog
java.lang.String)

static android.widget.EditText access$600(
android.app.SearchDialog)

static int access$702(
android.app.SearchDialog
int)

static int access$802(
android.app.SearchDialog
int)

static android.database.Cursor access$900(
android.app.SearchDialog
android.server.search.SearchableInfo
java.lang.String)

private void dbgLogTiming(
java.lang.String)

private void discardListCursor(
android.widget.ListView)

private boolean doSuggestionsKey(
android.view.View
int
android.view.KeyEvent)

private java.lang.String getActionKeyMessage(
android.database.Cursor
android.server.search.SearchableInfo$ActionKeyInfo)

private android.database.Cursor getSuggestions(
android.server.search.SearchableInfo
java.lang.String)
@dalvik.annotation.Signature (value =(Landroid/widget/AdapterView<*>;)Landroid/widget/CursorAdapter; )
private static android.widget.CursorAdapter getSuggestionsAdapter(
android.widget.AdapterView)
@dalvik.annotation.Signature (value =(ZLandroid/widget/AdapterView<*>;I)V )
private void jamSuggestionQuery(
boolean
android.widget.AdapterView
int)

private void launchQuerySearch(
int
java.lang.String)
@dalvik.annotation.Signature (value =(Landroid/widget/AdapterView<*>;I)Z )
private boolean launchSuggestion(
android.widget.AdapterView
int)

private void layoutSuggestionsList()

private boolean refocusingKeyListener(
android.view.View
int
android.view.KeyEvent)

private void sendLaunchIntent(
java.lang.String
android.net.Uri
java.lang.String
android.os.Bundle
int
java.lang.String
android.server.search.SearchableInfo)

private void setupSearchableInfo()

private void showSuggestions(
boolean
boolean)

private void updateQueryHint()

private void updateSearchBadge()

private void updateSearchButton()

private void updateSuggestions()

private void updateWidgetState()

public void dismiss()

public void onConfigurationChanged(
android.content.res.Configuration)

protected void onCreate(
android.os.Bundle)

public boolean onKeyDown(
int
android.view.KeyEvent)

public void onPackageListChange()

public void onRestoreInstanceState(
android.os.Bundle)

public android.os.Bundle onSaveInstanceState()

 void setupSuggestionIntent(
android.database.Cursor
android.server.search.SearchableInfo)

public void show()

public boolean show(
java.lang.String
boolean
android.content.ComponentName
android.os.Bundle
boolean)

 void updateSuggestionsWithCursor(
android.database.Cursor
android.server.search.SearchableInfo)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/SearchManager; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnCancelListener )
public abstract interface class android.app.SearchManager$OnCancelListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onCancel()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnDismissListener )
@dalvik.annotation.EnclosingClass (value =Landroid/app/SearchManager; )
public abstract interface class android.app.SearchManager$OnDismissListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onDismiss()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnDismissListener )
@dalvik.annotation.EnclosingClass (value =Landroid/content/DialogInterface; )
public abstract interface class android.content.DialogInterface$OnDismissListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onDismiss(
android.content.DialogInterface)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnCancelListener )
@dalvik.annotation.EnclosingClass (value =Landroid/content/DialogInterface; )
public abstract interface class android.content.DialogInterface$OnCancelListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onCancel(
android.content.DialogInterface)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/SearchManager$OnCancelListener;Landroid/app/SearchManager$OnDismissListener; )
public class android.app.SearchManager extends java.lang.Object implements android.content.DialogInterface$OnDismissListener, android.content.DialogInterface$OnCancelListener

----------------FIELDS----------------

public static final java.lang.String ACTION_KEY

public static final java.lang.String ACTION_MSG

public static final java.lang.String APP_DATA

public static final char MENU_KEY

public static final int MENU_KEYCODE

public static final java.lang.String QUERY

public static final java.lang.String SUGGEST_COLUMN_FORMAT

public static final java.lang.String SUGGEST_COLUMN_ICON_1

public static final java.lang.String SUGGEST_COLUMN_ICON_2

public static final java.lang.String SUGGEST_COLUMN_INTENT_ACTION

public static final java.lang.String SUGGEST_COLUMN_INTENT_DATA

public static final java.lang.String SUGGEST_COLUMN_INTENT_DATA_ID

public static final java.lang.String SUGGEST_COLUMN_QUERY

public static final java.lang.String SUGGEST_COLUMN_TEXT_1

public static final java.lang.String SUGGEST_COLUMN_TEXT_2

public static final java.lang.String SUGGEST_MIME_TYPE

public static final java.lang.String SUGGEST_URI_PATH_QUERY

private static android.app.ISearchManager mService

private android.app.SearchManager$OnCancelListener mCancelListener

private final android.content.Context mContext

private android.app.SearchManager$OnDismissListener mDismissListener

private final android.os.Handler mHandler

private android.app.SearchDialog mSearchDialog
----------------METHODS----------------

static void <clinit>()

 void <init>(
android.content.Context
android.os.Handler)

public boolean isVisible()

public void onCancel(
android.content.DialogInterface)

 void onConfigurationChanged(
android.content.res.Configuration)

public void onDismiss(
android.content.DialogInterface)

 void restoreSearchDialog(
android.os.Bundle
java.lang.String)

 void saveSearchDialog(
android.os.Bundle
java.lang.String)

public void setOnCancelListener(
android.app.SearchManager$OnCancelListener)

public void setOnDismissListener(
android.app.SearchManager$OnDismissListener)

public void startSearch(
java.lang.String
boolean
android.content.ComponentName
android.os.Bundle
boolean)

public void stopSearch()

________________CLASS________________


public abstract class android.app.Service extends android.content.ContextWrapper implements android.content.ComponentCallbacks

----------------FIELDS----------------

private static final java.lang.String TAG

private android.app.IActivityManager mActivityManager

private android.app.Application mApplication

private java.lang.String mClassName

private android.app.ActivityThread mThread

private android.os.IBinder mToken
----------------METHODS----------------

public void <init>()

public final void attach(
android.content.Context
android.app.ActivityThread
java.lang.String
android.os.IBinder
android.app.Application
java.lang.Object)

protected void dump(
java.io.FileDescriptor
java.io.PrintWriter
java.lang.String[])
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public final android.app.Application getApplication()

final java.lang.String getClassName()

public abstract android.os.IBinder onBind(
android.content.Intent)

public void onConfigurationChanged(
android.content.res.Configuration)

public void onCreate()

public void onDestroy()

public void onLowMemory()

public void onRebind(
android.content.Intent)

public void onStart(
android.content.Intent
int)

public boolean onUnbind(
android.content.Intent)

public final void setForeground(
boolean)

public final void stopSelf()

public final void stopSelf(
int)

public final boolean stopSelfResult(
int)

________________CLASS________________


final class android.app.ServiceConnectionLeaked extends android.util.AndroidRuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________


public class android.app.StatusBarManager extends java.lang.Object

----------------FIELDS----------------

public static final int DISABLE_EXPAND

public static final int DISABLE_NONE

public static final int DISABLE_NOTIFICATION_ALERTS

public static final int DISABLE_NOTIFICATION_ICONS

private android.content.Context mContext

private android.app.IStatusBar mService

private android.os.IBinder mToken
----------------METHODS----------------

 void <init>(
android.content.Context)

public android.os.IBinder addIcon(
java.lang.String
int
int)

public void collapse()

public void disable(
int)

public void expand()

public void removeIcon(
android.os.IBinder)

public void toggle()

public void updateIcon(
android.os.IBinder
java.lang.String
int
int)

________________CLASS________________


final class android.app.SuperNotCalledException extends android.util.AndroidRuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________


public class android.app.TabActivity extends android.app.ActivityGroup

----------------FIELDS----------------

private java.lang.String mDefaultTab

private int mDefaultTabIndex

private android.widget.TabHost mTabHost
----------------METHODS----------------

public void <init>()

private void ensureTabHost()

public android.widget.TabHost getTabHost()

public android.widget.TabWidget getTabWidget()

protected void onChildTitleChanged(
android.app.Activity
java.lang.CharSequence)

public void onContentChanged()

protected void onPostCreate(
android.os.Bundle)

protected void onRestoreInstanceState(
android.os.Bundle)

protected void onSaveInstanceState(
android.os.Bundle)

public void setDefaultTab(
int)

public void setDefaultTab(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/app/TimePickerDialog; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnTimeSetListener )
public abstract interface class android.app.TimePickerDialog$OnTimeSetListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onTimeSet(
android.widget.TimePicker
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TimePicker; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnTimeChangedListener )
public abstract interface class android.widget.TimePicker$OnTimeChangedListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onTimeChanged(
android.widget.TimePicker
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/app/TimePickerDialog$OnTimeSetListener; )
public class android.app.TimePickerDialog extends android.app.AlertDialog implements android.content.DialogInterface$OnClickListener, android.widget.TimePicker$OnTimeChangedListener

----------------FIELDS----------------

private static final java.lang.String HOUR

private static final java.lang.String IS_24_HOUR

private static final java.lang.String MINUTE

private final java.util.Calendar mCalendar

private final android.app.TimePickerDialog$OnTimeSetListener mCallback

private final java.text.DateFormat mDateFormat

 int mInitialHourOfDay

 int mInitialMinute

 boolean mIs24HourView

private final android.widget.TimePicker mTimePicker
----------------METHODS----------------

public void <init>(
android.content.Context
int
android.app.TimePickerDialog$OnTimeSetListener
int
int
boolean)

public void <init>(
android.content.Context
android.app.TimePickerDialog$OnTimeSetListener
int
int
boolean)

private void updateTitle(
int
int)

public void onClick(
android.content.DialogInterface
int)

public void onRestoreInstanceState(
android.os.Bundle)

public android.os.Bundle onSaveInstanceState()

public void onTimeChanged(
android.widget.TimePicker
int
int)

public void updateTime(
int
int)

________________CLASS________________


public abstract class android.bluetooth.AtCommandHandler extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public android.bluetooth.AtCommandResult handleActionCommand()

public android.bluetooth.AtCommandResult handleBasicCommand(
java.lang.String)

public android.bluetooth.AtCommandResult handleReadCommand()

public android.bluetooth.AtCommandResult handleSetCommand(
java.lang.Object[])

public android.bluetooth.AtCommandResult handleTestCommand()

________________CLASS________________


public class android.bluetooth.AtCommandResult extends java.lang.Object

----------------FIELDS----------------

public static final int ERROR

private static final java.lang.String ERROR_STRING

public static final int OK

private static final java.lang.String OK_STRING

public static final int UNSOLICITED

private java.lang.StringBuilder mResponse

private int mResultCode
----------------METHODS----------------

public void <init>(
int)

public void <init>(
java.lang.String)

public static void appendWithCrlf(
java.lang.StringBuilder
java.lang.String)

public void addResponse(
java.lang.String)

public void addResult(
android.bluetooth.AtCommandResult)

public int getResultCode()

public java.lang.String toString()

________________CLASS________________


public class android.bluetooth.AtParser extends java.lang.Object

----------------FIELDS----------------

private static final int TYPE_ACTION

private static final int TYPE_READ

private static final int TYPE_SET

private static final int TYPE_TEST
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Character;Landroid/bluetooth/AtCommandHandler;>; )
private java.util.HashMap mBasicHandlers
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Landroid/bluetooth/AtCommandHandler;>; )
private java.util.HashMap mExtHandlers

private java.lang.String mLastInput
----------------METHODS----------------

public void <init>()

private static java.lang.String clean(
java.lang.String)

private static int findChar(
char
java.lang.String
int)

private static int findEndExtendedName(
java.lang.String
int)

private static java.lang.Object[] generateArgs(
java.lang.String)

private static boolean isAtoZ(
char)

public android.bluetooth.AtCommandResult process(
java.lang.String)

public void register(
java.lang.Character
android.bluetooth.AtCommandHandler)

public void register(
java.lang.String
android.bluetooth.AtCommandHandler)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.bluetooth.BluetoothAudioGateway$1 extends java.lang.Thread

----------------FIELDS----------------

final android.bluetooth.BluetoothAudioGateway this$0
----------------METHODS----------------

 void <init>(
android.bluetooth.BluetoothAudioGateway
java.lang.String)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/bluetooth/BluetoothAudioGateway; )
@dalvik.annotation.InnerClass (accessFlags =1 name =IncomingConnectionInfo )
public class android.bluetooth.BluetoothAudioGateway$IncomingConnectionInfo extends java.lang.Object

----------------FIELDS----------------

public java.lang.String mAddress

public android.bluetooth.BluetoothDevice mBluetooth

public int mRfcommChan

public int mSocketFd

final android.bluetooth.BluetoothAudioGateway this$0
----------------METHODS----------------

 void <init>(
android.bluetooth.BluetoothAudioGateway
android.bluetooth.BluetoothDevice
java.lang.String
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/bluetooth/BluetoothAudioGateway$IncomingConnectionInfo; )
public class android.bluetooth.BluetoothAudioGateway extends java.lang.Object

----------------FIELDS----------------

private static final boolean DBG

public static final int DEFAULT_HF_AG_CHANNEL

public static final int DEFAULT_HS_AG_CHANNEL

public static final int MSG_INCOMING_HANDSFREE_CONNECTION

public static final int MSG_INCOMING_HEADSET_CONNECTION

private static final int SELECT_WAIT_TIMEOUT

private static final java.lang.String TAG

private android.bluetooth.BluetoothDevice mBluetooth

private android.os.Handler mCallback

private java.lang.Thread mConnectThead

private java.lang.String mConnectingHandsfreeAddress

private int mConnectingHandsfreeRfcommChannel

private int mConnectingHandsfreeSocketFd

private java.lang.String mConnectingHeadsetAddress

private int mConnectingHeadsetRfcommChannel

private int mConnectingHeadsetSocketFd

private int mHandsfreeAgRfcommChannel

private int mHeadsetAgRfcommChannel

private volatile boolean mInterrupted

private int mNativeData

private int mTimeoutRemainingMs
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.bluetooth.BluetoothDevice)

public void <init>(
android.bluetooth.BluetoothDevice
int
int)

static boolean access$000(
android.bluetooth.BluetoothAudioGateway)

static boolean access$002(
android.bluetooth.BluetoothAudioGateway
boolean)

static int access$100(
android.bluetooth.BluetoothAudioGateway)

static int access$1000(
android.bluetooth.BluetoothAudioGateway)

static int access$102(
android.bluetooth.BluetoothAudioGateway
int)

static int access$200(
android.bluetooth.BluetoothAudioGateway)

static int access$202(
android.bluetooth.BluetoothAudioGateway
int)

static boolean access$300(
android.bluetooth.BluetoothAudioGateway
int)

static int access$400(
android.bluetooth.BluetoothAudioGateway)

static java.lang.String access$500(
android.bluetooth.BluetoothAudioGateway)

static android.os.Handler access$600(
android.bluetooth.BluetoothAudioGateway)

static android.bluetooth.BluetoothDevice access$700(
android.bluetooth.BluetoothAudioGateway)

static int access$800(
android.bluetooth.BluetoothAudioGateway)

static java.lang.String access$900(
android.bluetooth.BluetoothAudioGateway)

private static native void classInitNative()

private native void cleanupNativeDataNative()

private native void initializeNativeDataNative()

private static void log(
java.lang.String)

private native boolean setUpListeningSocketsNative()

private native void tearDownListeningSocketsNative()

private native boolean waitForHandsfreeConnectNative(
int)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public boolean start(
android.os.Handler)

public void stop()

________________CLASS________________


public class android.bluetooth.BluetoothDevice extends java.lang.Object

----------------FIELDS----------------

private static final int ADDRESS_LENGTH

public static final int MODE_CONNECTABLE

public static final int MODE_DISCOVERABLE

public static final int MODE_OFF

public static final int MODE_UNKNOWN

public static final int RESULT_FAILURE

public static final int RESULT_SUCCESS

private static final java.lang.String TAG

private final android.bluetooth.IBluetoothDevice mService
----------------METHODS----------------

public void <init>(
android.bluetooth.IBluetoothDevice)

public static boolean checkBluetoothAddress(
java.lang.String)

public static byte[] convertPinToBytes(
java.lang.String)

public boolean cancelBondingProcess(
java.lang.String)

public void cancelDiscovery()

public boolean cancelPin(
java.lang.String)

public boolean clearRemoteAlias(
java.lang.String)

public boolean createBonding(
java.lang.String)

public boolean createBonding(
java.lang.String
android.bluetooth.IBluetoothDeviceCallback)

public boolean disable()

public boolean disconnectRemoteDeviceAcl(
java.lang.String)

public boolean enable()

public boolean enable(
android.bluetooth.IBluetoothDeviceCallback)

public java.lang.String getAddress()

public java.lang.String getCompany()

public int getDiscoverableTimeout()

public java.lang.String getMajorClass()

public java.lang.String getManufacturer()

public java.lang.String getMinorClass()

public int getMode()

public java.lang.String getName()

public java.lang.String getRemoteAlias(
java.lang.String)

public int getRemoteClass(
java.lang.String)

public java.lang.String getRemoteCompany(
java.lang.String)

public byte[] getRemoteFeatures(
java.lang.String)

public java.lang.String getRemoteMajorClass(
java.lang.String)

public java.lang.String getRemoteManufacturer(
java.lang.String)

public java.lang.String getRemoteMinorClass(
java.lang.String)

public java.lang.String getRemoteName(
java.lang.String)

public java.lang.String getRemoteRevision(
java.lang.String)

public boolean getRemoteServiceChannel(
java.lang.String
short
android.bluetooth.IBluetoothDeviceCallback)

public java.lang.String[] getRemoteServiceClasses(
java.lang.String)

public java.lang.String getRemoteVersion(
java.lang.String)

public java.lang.String getRevision()

public java.lang.String getVersion()

public boolean hasBonding(
java.lang.String)

public boolean isAclConnected(
java.lang.String)

public boolean isDiscovering()

public boolean isEnabled()

public boolean isPeriodicDiscovery()

public java.lang.String lastSeen(
java.lang.String)

public java.lang.String lastUsed(
java.lang.String)

public java.lang.String[] listAclConnections()

public java.lang.String[] listBondings()

public java.lang.String[] listRemoteDevices()

public boolean removeBonding(
java.lang.String)

public void setDiscoverableTimeout(
int)

public void setMode(
int)

public boolean setName(
java.lang.String)

public boolean setPin(
java.lang.String
byte[])

public boolean setRemoteAlias(
java.lang.String
java.lang.String)

public boolean startDiscovery()

public boolean startDiscovery(
boolean)

public boolean startPeriodicDiscovery()

public boolean stopPeriodicDiscovery()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/bluetooth/BluetoothHeadset; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.bluetooth.BluetoothHeadset$1 extends java.lang.Object implements android.content.ServiceConnection

----------------FIELDS----------------

final android.bluetooth.BluetoothHeadset this$0
----------------METHODS----------------

 void <init>(
android.bluetooth.BluetoothHeadset)

public void onServiceConnected(
android.content.ComponentName
android.os.IBinder)

public void onServiceDisconnected(
android.content.ComponentName)

________________CLASS________________


public class android.bluetooth.BluetoothHeadset extends java.lang.Object

----------------FIELDS----------------

public static final int RESULT_CANCELLED

public static final int RESULT_FAILURE

public static final int RESULT_SUCCESS

public static final int STATE_CONNECTED

public static final int STATE_CONNECTING

public static final int STATE_DISCONNECTED

public static final int STATE_ERROR

private static final java.lang.String TAG

private android.content.ServiceConnection mConnection

private final android.content.Context mContext

private android.bluetooth.IBluetoothHeadset mService
----------------METHODS----------------

public void <init>(
android.content.Context)

static android.bluetooth.IBluetoothHeadset access$002(
android.bluetooth.BluetoothHeadset
android.bluetooth.IBluetoothHeadset)

public void close()

public boolean connectHeadset(
java.lang.String
android.bluetooth.IBluetoothHeadsetCallback)

public boolean disconnectHeadset()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public java.lang.String getHeadsetAddress()

public int getState()

public boolean isConnected(
java.lang.String)

________________CLASS________________


public abstract interface class android.bluetooth.BluetoothIntent extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ADDRESS

public static final java.lang.String ALIAS

public static final java.lang.String BONDING_CREATED_ACTION

public static final java.lang.String BONDING_REMOVED_ACTION

public static final java.lang.String CLASS

public static final java.lang.String DISABLED_ACTION

public static final java.lang.String DISCOVERY_COMPLETED_ACTION

public static final java.lang.String DISCOVERY_STARTED_ACTION

public static final java.lang.String ENABLED_ACTION

public static final java.lang.String HEADSET_PREVIOUS_STATE

public static final java.lang.String HEADSET_STATE

public static final java.lang.String HEADSET_STATE_CHANGED_ACTION

public static final java.lang.String MODE

public static final java.lang.String MODE_CHANGED_ACTION

public static final java.lang.String NAME

public static final java.lang.String NAME_CHANGED_ACTION

public static final java.lang.String PAIRING_CANCEL_ACTION

public static final java.lang.String PAIRING_REQUEST_ACTION

public static final java.lang.String REMOTE_ALIAS_CHANGED_ACTION

public static final java.lang.String REMOTE_ALIAS_CLEARED_ACTION

public static final java.lang.String REMOTE_DEVICE_CLASS_UPDATED_ACTION

public static final java.lang.String REMOTE_DEVICE_CONNECTED_ACTION

public static final java.lang.String REMOTE_DEVICE_DISAPPEARED_ACTION

public static final java.lang.String REMOTE_DEVICE_DISCONNECTED_ACTION

public static final java.lang.String REMOTE_DEVICE_DISCONNECT_REQUESTED_ACTION

public static final java.lang.String REMOTE_DEVICE_FOUND_ACTION

public static final java.lang.String REMOTE_NAME_FAILED_ACTION

public static final java.lang.String REMOTE_NAME_UPDATED_ACTION

public static final java.lang.String RSSI
----------------METHODS----------------

________________CLASS________________


public final class android.bluetooth.Database extends java.lang.Object

----------------FIELDS----------------

private static android.bluetooth.Database mInstance

private static final java.lang.String sLogName
----------------METHODS----------------

static void <clinit>()

private void <init>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native int addServiceRecordFromXmlNative(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native int addServiceRecordNative(
byte[])

private static native void classInitNative()

private native void cleanupNativeDataNative()

public static android.bluetooth.Database getInstance()

private native void initializeNativeDataNative()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native void removeServiceRecordNative(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native void updateServiceRecordFromXmlNative(
int
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native void updateServiceRecordNative(
int
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int addServiceRecord(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int addServiceRecordFromXml(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int advertiseRfcommService(
android.bluetooth.RfcommSocket
java.lang.String
java.util.UUID)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public void removeServiceRecord(
int)

public void updateServiceRecord(
int
byte[])

public void updateServiceRecordFromXml(
int
java.lang.String)

________________CLASS________________


public class android.bluetooth.DeviceClass extends java.lang.Object

----------------FIELDS----------------

public static final int CLASS_UNKNOWN

public static final int MAJOR_CLASS_AUDIO_VIDEO

public static final int MAJOR_CLASS_BITMASK

public static final int MAJOR_CLASS_COMPUTER

public static final int MAJOR_CLASS_IMAGING

public static final int MAJOR_CLASS_MEDICAL

public static final int MAJOR_CLASS_MISC

public static final int MAJOR_CLASS_NETWORKING

public static final int MAJOR_CLASS_PERIPHERAL

public static final int MAJOR_CLASS_PHONE

public static final int MAJOR_CLASS_TOY

public static final int MAJOR_CLASS_UNCATEGORIZED

public static final int MAJOR_CLASS_WEARABLE

public static final int MINOR_CLASS_AUDIO_VIDEO_BITMASK

public static final int MINOR_CLASS_AUDIO_VIDEO_CAMCORDER

public static final int MINOR_CLASS_AUDIO_VIDEO_CAR_AUDIO

public static final int MINOR_CLASS_AUDIO_VIDEO_HANDSFREE

public static final int MINOR_CLASS_AUDIO_VIDEO_HEADPHONES

public static final int MINOR_CLASS_AUDIO_VIDEO_HEADSET

public static final int MINOR_CLASS_AUDIO_VIDEO_HIFI_AUDIO

public static final int MINOR_CLASS_AUDIO_VIDEO_LOUDSPEAKER

public static final int MINOR_CLASS_AUDIO_VIDEO_MICROPHONE

public static final int MINOR_CLASS_AUDIO_VIDEO_PORTABLE_AUDIO

public static final int MINOR_CLASS_AUDIO_VIDEO_SET_TOP_BOX

public static final int MINOR_CLASS_AUDIO_VIDEO_UNCATEGORIZED

public static final int MINOR_CLASS_AUDIO_VIDEO_VCR

public static final int MINOR_CLASS_AUDIO_VIDEO_VIDEO_CAMERA

public static final int MINOR_CLASS_AUDIO_VIDEO_VIDEO_CONFERENCING

public static final int MINOR_CLASS_AUDIO_VIDEO_VIDEO_DISPLAY_AND_LOUDSPEAKER

public static final int MINOR_CLASS_AUDIO_VIDEO_VIDEO_GAMING_TOY

public static final int MINOR_CLASS_AUDIO_VIDEO_VIDEO_MONITOR

public static final int SERVICE_CLASS_AUDIO

public static final int SERVICE_CLASS_BITMASK

public static final int SERVICE_CLASS_CAPTURE

public static final int SERVICE_CLASS_INFORMATION

public static final int SERVICE_CLASS_LIMITED_DISCOVERABILITY

public static final int SERVICE_CLASS_NETWORKING

public static final int SERVICE_CLASS_OBJECT_TRANSFER

public static final int SERVICE_CLASS_POSITIONING

public static final int SERVICE_CLASS_RENDER

public static final int SERVICE_CLASS_TELEPHONY
----------------METHODS----------------

public void <init>()

public static int getMajorClass(
int)

public static int getMinorClass(
int)

public static boolean hasServiceClass(
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.bluetooth.HeadsetBase$1 extends android.bluetooth.AtCommandHandler

----------------FIELDS----------------

final android.bluetooth.HeadsetBase this$0
----------------METHODS----------------

 void <init>(
android.bluetooth.HeadsetBase)

public android.bluetooth.AtCommandResult handleSetCommand(
java.lang.Object[])

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.bluetooth.HeadsetBase$2 extends android.bluetooth.AtCommandHandler

----------------FIELDS----------------

final android.bluetooth.HeadsetBase this$0
----------------METHODS----------------

 void <init>(
android.bluetooth.HeadsetBase)

public android.bluetooth.AtCommandResult handleSetCommand(
java.lang.Object[])

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.bluetooth.HeadsetBase$3 extends java.lang.Thread

----------------FIELDS----------------

final android.bluetooth.HeadsetBase this$0
----------------METHODS----------------

 void <init>(
android.bluetooth.HeadsetBase
java.lang.String)

public void run()

________________CLASS________________


public class android.bluetooth.HeadsetBase extends java.lang.Object

----------------FIELDS----------------

private static final boolean DBG

public static final int DIRECTION_INCOMING

public static final int DIRECTION_OUTGOING

public static final int RFCOMM_DISCONNECTED

private static final java.lang.String TAG

private final java.lang.String mAddress

protected android.bluetooth.AtParser mAtParser

private final android.bluetooth.BluetoothDevice mBluetooth

private final long mConnectTimestamp

private final int mDirection

private java.lang.Thread mEventThread

private android.os.Handler mEventThreadHandler

private volatile boolean mEventThreadInterrupted

private int mNativeData

private final int mRfcommChannel

private int mTimeoutRemainingMs

private android.os.PowerManager$WakeLock mWakeLock
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.os.PowerManager
android.bluetooth.BluetoothDevice
java.lang.String
int)

public void <init>(
android.os.PowerManager
android.bluetooth.BluetoothDevice
java.lang.String
int
int
android.os.Handler)

static boolean access$000(
android.bluetooth.HeadsetBase)

static java.lang.String access$100(
android.bluetooth.HeadsetBase
int)

static int access$200(
android.bluetooth.HeadsetBase)

static android.os.Handler access$300(
android.bluetooth.HeadsetBase)

static void access$400(
android.bluetooth.HeadsetBase)

private void acquireWakeLock()

private static native void classInitNative()

private native void cleanupNativeDataNative()

private native boolean connectAsyncNative()

private native boolean connectNative()

private native void disconnectNative()

private native int getLastReadStatusNative()

private native void initializeNativeDataNative(
int)

private void log(
java.lang.String)

private native java.lang.String readNative(
int)

private void releaseWakeLock()

private native boolean sendURCNative(
java.lang.String)

private void stopEventThread()

private native int waitForAsyncConnectNative(
int)

public boolean connect(
android.os.Handler)

public boolean connectAsync()

public void disconnect()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public java.lang.String getAddress()

public android.bluetooth.AtParser getAtParser()

public long getConnectTimestamp()

public int getDirection()

public java.lang.String getName()

public int getRemainingAsyncConnectWaitingTimeMs()

protected void handleInput(
java.lang.String)

protected void initializeAtParser()

public boolean isConnected()

public boolean sendURC(
java.lang.String)

public void startEventThread()

public int waitForAsyncConnect(
int
android.os.Handler)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/bluetooth/IBluetoothDevice$Stub; )
public abstract interface class android.bluetooth.IBluetoothDevice extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean cancelBondingProcess(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean cancelDiscovery()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean cancelPin(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean clearRemoteAlias(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean createBonding(
java.lang.String
android.bluetooth.IBluetoothDeviceCallback)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean disable()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean disconnectRemoteDeviceAcl(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean enable(
android.bluetooth.IBluetoothDeviceCallback)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getAddress()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getCompany()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getDiscoverableTimeout()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getMajorClass()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getManufacturer()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getMinorClass()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getMode()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getName()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getRemoteAlias(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getRemoteClass(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getRemoteCompany(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract byte[] getRemoteFeatures(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getRemoteMajorClass(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getRemoteManufacturer(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getRemoteMinorClass(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getRemoteName(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getRemoteRevision(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean getRemoteServiceChannel(
java.lang.String
int
android.bluetooth.IBluetoothDeviceCallback)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String[] getRemoteServiceClasses(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getRemoteVersion(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getRevision()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getVersion()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean hasBonding(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean isAclConnected(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean isDiscovering()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean isEnabled()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean isPeriodicDiscovery()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String lastSeen(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String lastUsed(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String[] listAclConnections()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String[] listBondings()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String[] listRemoteDevices()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean removeBonding(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean setDiscoverableTimeout(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean setMode(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean setName(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean setPin(
java.lang.String
byte[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean setRemoteAlias(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean startDiscovery(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean startPeriodicDiscovery()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean stopPeriodicDiscovery()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/bluetooth/IBluetoothDevice$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.bluetooth.IBluetoothDevice$Stub$Proxy extends java.lang.Object implements android.bluetooth.IBluetoothDevice

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean cancelBondingProcess(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean cancelDiscovery()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean cancelPin(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean clearRemoteAlias(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean createBonding(
java.lang.String
android.bluetooth.IBluetoothDeviceCallback)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean disable()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean disconnectRemoteDeviceAcl(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean enable(
android.bluetooth.IBluetoothDeviceCallback)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getAddress()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getCompany()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getDiscoverableTimeout()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getMajorClass()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getManufacturer()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getMinorClass()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getMode()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getName()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getRemoteAlias(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getRemoteClass(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getRemoteCompany(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public byte[] getRemoteFeatures(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getRemoteMajorClass(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getRemoteManufacturer(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getRemoteMinorClass(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getRemoteName(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getRemoteRevision(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean getRemoteServiceChannel(
java.lang.String
int
android.bluetooth.IBluetoothDeviceCallback)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String[] getRemoteServiceClasses(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getRemoteVersion(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getRevision()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getVersion()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean hasBonding(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean isAclConnected(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean isDiscovering()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean isEnabled()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean isPeriodicDiscovery()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String lastSeen(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String lastUsed(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String[] listAclConnections()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String[] listBondings()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String[] listRemoteDevices()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean removeBonding(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean setDiscoverableTimeout(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean setMode(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean setName(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean setPin(
java.lang.String
byte[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean setRemoteAlias(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean startDiscovery(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean startPeriodicDiscovery()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean stopPeriodicDiscovery()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/bluetooth/IBluetoothDevice; )
@dalvik.annotation.MemberClasses (value =Landroid/bluetooth/IBluetoothDevice$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.bluetooth.IBluetoothDevice$Stub extends android.os.Binder implements android.bluetooth.IBluetoothDevice

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_cancelBondingProcess

static final int TRANSACTION_cancelDiscovery

static final int TRANSACTION_cancelPin

static final int TRANSACTION_clearRemoteAlias

static final int TRANSACTION_createBonding

static final int TRANSACTION_disable

static final int TRANSACTION_disconnectRemoteDeviceAcl

static final int TRANSACTION_enable

static final int TRANSACTION_getAddress

static final int TRANSACTION_getCompany

static final int TRANSACTION_getDiscoverableTimeout

static final int TRANSACTION_getMajorClass

static final int TRANSACTION_getManufacturer

static final int TRANSACTION_getMinorClass

static final int TRANSACTION_getMode

static final int TRANSACTION_getName

static final int TRANSACTION_getRemoteAlias

static final int TRANSACTION_getRemoteClass

static final int TRANSACTION_getRemoteCompany

static final int TRANSACTION_getRemoteFeatures

static final int TRANSACTION_getRemoteMajorClass

static final int TRANSACTION_getRemoteManufacturer

static final int TRANSACTION_getRemoteMinorClass

static final int TRANSACTION_getRemoteName

static final int TRANSACTION_getRemoteRevision

static final int TRANSACTION_getRemoteServiceChannel

static final int TRANSACTION_getRemoteServiceClasses

static final int TRANSACTION_getRemoteVersion

static final int TRANSACTION_getRevision

static final int TRANSACTION_getVersion

static final int TRANSACTION_hasBonding

static final int TRANSACTION_isAclConnected

static final int TRANSACTION_isDiscovering

static final int TRANSACTION_isEnabled

static final int TRANSACTION_isPeriodicDiscovery

static final int TRANSACTION_lastSeen

static final int TRANSACTION_lastUsed

static final int TRANSACTION_listAclConnections

static final int TRANSACTION_listBondings

static final int TRANSACTION_listRemoteDevices

static final int TRANSACTION_removeBonding

static final int TRANSACTION_setDiscoverableTimeout

static final int TRANSACTION_setMode

static final int TRANSACTION_setName

static final int TRANSACTION_setPin

static final int TRANSACTION_setRemoteAlias

static final int TRANSACTION_startDiscovery

static final int TRANSACTION_startPeriodicDiscovery

static final int TRANSACTION_stopPeriodicDiscovery
----------------METHODS----------------

public void <init>()

public static android.bluetooth.IBluetoothDevice asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/bluetooth/IBluetoothDeviceCallback$Stub; )
public abstract interface class android.bluetooth.IBluetoothDeviceCallback extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onCreateBondingResult(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onEnableResult(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onGetRemoteServiceChannelResult(
java.lang.String
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/bluetooth/IBluetoothDeviceCallback$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.bluetooth.IBluetoothDeviceCallback$Stub$Proxy extends java.lang.Object implements android.bluetooth.IBluetoothDeviceCallback

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onCreateBondingResult(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onEnableResult(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onGetRemoteServiceChannelResult(
java.lang.String
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/bluetooth/IBluetoothDeviceCallback; )
@dalvik.annotation.MemberClasses (value =Landroid/bluetooth/IBluetoothDeviceCallback$Stub$Proxy; )
public abstract class android.bluetooth.IBluetoothDeviceCallback$Stub extends android.os.Binder implements android.bluetooth.IBluetoothDeviceCallback

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_onCreateBondingResult

static final int TRANSACTION_onEnableResult

static final int TRANSACTION_onGetRemoteServiceChannelResult
----------------METHODS----------------

public void <init>()

public static android.bluetooth.IBluetoothDeviceCallback asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/bluetooth/IBluetoothHeadset$Stub; )
public abstract interface class android.bluetooth.IBluetoothHeadset extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean connectHeadset(
java.lang.String
android.bluetooth.IBluetoothHeadsetCallback)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void disconnectHeadset()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getHeadsetAddress()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getState()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean isConnected(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/bluetooth/IBluetoothHeadset$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.bluetooth.IBluetoothHeadset$Stub$Proxy extends java.lang.Object implements android.bluetooth.IBluetoothHeadset

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean connectHeadset(
java.lang.String
android.bluetooth.IBluetoothHeadsetCallback)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void disconnectHeadset()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getHeadsetAddress()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getState()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean isConnected(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/bluetooth/IBluetoothHeadset; )
@dalvik.annotation.MemberClasses (value =Landroid/bluetooth/IBluetoothHeadset$Stub$Proxy; )
public abstract class android.bluetooth.IBluetoothHeadset$Stub extends android.os.Binder implements android.bluetooth.IBluetoothHeadset

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_connectHeadset

static final int TRANSACTION_disconnectHeadset

static final int TRANSACTION_getHeadsetAddress

static final int TRANSACTION_getState

static final int TRANSACTION_isConnected
----------------METHODS----------------

public void <init>()

public static android.bluetooth.IBluetoothHeadset asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/bluetooth/IBluetoothHeadsetCallback$Stub; )
public abstract interface class android.bluetooth.IBluetoothHeadsetCallback extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onConnectHeadsetResult(
java.lang.String
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/bluetooth/IBluetoothHeadsetCallback$Stub; )
 class android.bluetooth.IBluetoothHeadsetCallback$Stub$Proxy extends java.lang.Object implements android.bluetooth.IBluetoothHeadsetCallback

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onConnectHeadsetResult(
java.lang.String
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/bluetooth/IBluetoothHeadsetCallback$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/bluetooth/IBluetoothHeadsetCallback; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.bluetooth.IBluetoothHeadsetCallback$Stub extends android.os.Binder implements android.bluetooth.IBluetoothHeadsetCallback

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_onConnectHeadsetResult
----------------METHODS----------------

public void <init>()

public static android.bluetooth.IBluetoothHeadsetCallback asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________


public class android.bluetooth.RfcommSocket extends java.lang.Object

----------------FIELDS----------------

private int mAcceptTimeoutRemainingMs

private java.lang.String mAddress

private java.io.FileDescriptor mFd

protected java.io.FileInputStream mInputStream

private boolean mIsBound

private boolean mIsConnecting

private boolean mIsListening

private int mNativeData

protected java.io.FileOutputStream mOutputStream

private int mPort

private int mTimeoutRemainingMs
----------------METHODS----------------

static void <clinit>()

public void <init>()

private native java.io.FileDescriptor acceptNative(
android.bluetooth.RfcommSocket
int)

private native boolean bindNative(
java.lang.String
int)

private static native void classInitNative()

private native void cleanupNativeDataNative()

private native boolean connectAsyncNative(
java.lang.String
int)

private native boolean connectNative(
java.lang.String
int)

private native java.io.FileDescriptor createNative()

private native void destroyNative()

private native void initializeNativeDataNative()

private native boolean interruptAsyncConnectNative()

private native int isConnectedNative()

private native boolean listenNative(
int)

private native boolean shutdownNative(
boolean)

private native int waitForAsyncConnectNative(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.io.FileDescriptor accept(
android.bluetooth.RfcommSocket
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean bind(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean bind(
java.lang.String
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean connect(
java.lang.String
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean connectAsync(
java.lang.String
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.io.FileDescriptor create()

public void destroy()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.io.FileDescriptor getFileDescriptor()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.io.InputStream getInputStream()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.io.OutputStream getOutputStream()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int getPort()

public int getRemainingAcceptWaitingTimeMs()

public int getRemainingAsyncConnectWaitingTimeMs()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void interruptAsyncConnect()

public boolean isConnected()

public boolean isConnecting()

public boolean isInputConnected()

public boolean isListening()

public boolean isOutputConnected()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean listen(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean shutdown()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean shutdownInput()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean shutdownOutput()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int waitForAsyncConnect(
int)

________________CLASS________________


public class android.bluetooth.ScoSocket extends java.lang.Object

----------------FIELDS----------------

private static final boolean DBG

public static final int STATE_ACCEPT

public static final int STATE_CLOSED

public static final int STATE_CONNECTED

public static final int STATE_CONNECTING

public static final int STATE_READY

private static final java.lang.String TAG

private static final boolean VDBG

private int mAcceptedCode

private int mClosedCode

private int mConnectedCode

private android.os.Handler mHandler

private int mNativeData

private int mState

private android.os.PowerManager$WakeLock mWakeLock
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.os.PowerManager
android.os.Handler
int
int
int)

private native boolean acceptNative()

private void acquireWakeLock()

private static native void classInitNative()

private native void closeNative()

private native boolean connectNative(
java.lang.String)

private native void destroyNative()

private native void initNative()

private void log(
java.lang.String)

private void onAccepted(
int)

private void onClosed()

private void onConnected(
int)

private void releaseWakeLock()

public boolean accept()

public void close()

public boolean connect(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public int getState()

________________CLASS________________


public abstract class android.content.AbstractTableMerger extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String SELECT_BY_ID_AND_ACCOUNT

private static final java.lang.String SELECT_MARKED

private static final java.lang.String SELECT_UNSYNCED

private static final java.lang.String TAG

private static boolean TRACE

protected static android.content.ContentValues mSyncMarkValues

private static final java.lang.String[] syncDirtyProjection

private static final java.lang.String[] syncIdAndVersionProjection

protected android.database.sqlite.SQLiteDatabase mDb

protected java.lang.String mDeletedTable

protected android.net.Uri mDeletedTableURL

private volatile boolean mIsMergeCancelled

protected java.lang.String mTable

protected android.net.Uri mTableURL

private android.content.ContentValues mValues
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.database.sqlite.SQLiteDatabase
java.lang.String
android.net.Uri
java.lang.String
android.net.Uri)

private static boolean findInCursor(
android.database.Cursor
int
java.lang.String)

private void findLocalChanges(
android.content.TempProviderSyncResult
android.content.SyncableContentProvider
java.lang.String
android.content.SyncResult)

private void fullyDeleteRowsWithSyncId(
java.lang.String
java.lang.String
android.content.SyncResult)

private void mergeServerDiffs(
android.content.SyncContext
java.lang.String
android.content.SyncableContentProvider
android.content.SyncResult)

protected void cursorRowToContentValues(
android.database.Cursor
android.content.ContentValues)

public void deleteRow(
android.database.Cursor)

public abstract void insertRow(
android.content.ContentProvider
android.database.Cursor)

public void merge(
android.content.SyncContext
java.lang.String
android.content.SyncableContentProvider
android.content.TempProviderSyncResult
android.content.SyncResult
android.content.SyncableContentProvider)

protected abstract void notifyChanges()

public void onMergeCancelled()

public abstract void resolveRow(
long
java.lang.String
android.content.ContentProvider
android.database.Cursor)

public abstract void updateRow(
long
android.content.ContentProvider
android.database.Cursor)

________________CLASS________________


public class android.content.ActivityNotFoundException extends java.lang.RuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =28 name =WorkerArgs )
@dalvik.annotation.EnclosingClass (value =Landroid/content/AsyncQueryHandler; )
public final class android.content.AsyncQueryHandler$WorkerArgs extends java.lang.Object

----------------FIELDS----------------

public java.lang.Object cookie

public android.os.Handler handler

public java.lang.String orderBy

public java.lang.String[] projection

public java.lang.Object result

public java.lang.String selection

public java.lang.String[] selectionArgs

public android.net.Uri uri

public android.content.ContentValues values
----------------METHODS----------------

protected void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4 name =WorkerHandler )
@dalvik.annotation.EnclosingClass (value =Landroid/content/AsyncQueryHandler; )
public class android.content.AsyncQueryHandler$WorkerHandler extends android.os.Handler

----------------FIELDS----------------

final android.content.AsyncQueryHandler this$0
----------------METHODS----------------

public void <init>(
android.content.AsyncQueryHandler
android.os.Looper)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/AsyncQueryHandler$WorkerHandler;Landroid/content/AsyncQueryHandler$WorkerArgs; )
public abstract class android.content.AsyncQueryHandler extends android.os.Handler

----------------FIELDS----------------

private static final int EVENT_ARG_DELETE

private static final int EVENT_ARG_INSERT

private static final int EVENT_ARG_QUERY

private static final int EVENT_ARG_UPDATE

private static final java.lang.String TAG

private static final boolean localLOGV

private static android.os.Looper sLooper

 android.content.ContentResolver mResolver

private android.os.Handler mWorkerThreadHandler
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.ContentResolver)

public final void cancelOperation(
int)

protected android.os.Handler createHandler(
android.os.Looper)

public void handleMessage(
android.os.Message)

protected void onDeleteComplete(
int
java.lang.Object
int)

protected void onInsertComplete(
int
java.lang.Object
android.net.Uri)

protected void onQueryComplete(
int
java.lang.Object
android.database.Cursor)

protected void onUpdateComplete(
int
java.lang.Object
int)

public final void startDelete(
int
java.lang.Object
android.net.Uri
java.lang.String
java.lang.String[])

public final void startInsert(
int
java.lang.Object
android.net.Uri
android.content.ContentValues)

public void startQuery(
int
java.lang.Object
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)

public final void startUpdate(
int
java.lang.Object
android.net.Uri
android.content.ContentValues
java.lang.String
java.lang.String[])

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/ComponentName;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/content/ComponentName; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.content.ComponentName$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.ComponentName createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.ComponentName[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public final class android.content.ComponentName extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/ComponentName;>; )
public static final android.os.Parcelable$Creator CREATOR

private final java.lang.String mClass

private final java.lang.String mPackage
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(Landroid/content/Context;Ljava/lang/Class<*>;)V )
public void <init>(
android.content.Context
java.lang.Class)

public void <init>(
android.content.Context
java.lang.String)

public void <init>(
android.os.Parcel)

private void <init>(
java.lang.String
android.os.Parcel)

public void <init>(
java.lang.String
java.lang.String)

public static android.content.ComponentName readFromParcel(
android.os.Parcel)

public static android.content.ComponentName unflattenFromString(
java.lang.String)

public static void writeToParcel(
android.content.ComponentName
android.os.Parcel)

public int describeContents()

public boolean equals(
java.lang.Object)

public java.lang.String flattenToShortString()

public java.lang.String flattenToString()

public java.lang.String getClassName()

public java.lang.String getPackageName()

public java.lang.String getShortClassName()

public int hashCode()

public java.lang.String toShortString()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public abstract interface class android.content.ContentInsertHandler extends java.lang.Object implements org.xml.sax.ContentHandler

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/xml/sax/SAXException; )
public abstract void insert(
android.content.ContentResolver
java.io.InputStream)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public abstract void insert(
android.content.ContentResolver
java.lang.String)

________________CLASS________________


public abstract interface class android.content.IContentProvider extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------

public static final int BULK_INSERT_TRANSACTION

public static final int DELETE_TRANSACTION

public static final int GET_SYNC_ADAPTER_TRANSACTION

public static final int GET_TYPE_TRANSACTION

public static final int INSERT_TRANSACTION

public static final int OPEN_FILE_TRANSACTION

public static final int QUERY_TRANSACTION

public static final int UPDATE_TRANSACTION

public static final java.lang.String descriptor
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int bulkInsert(
android.net.Uri
android.content.ContentValues[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.database.IBulkCursor bulkQuery(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String
android.database.IContentObserver
android.database.CursorWindow)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int delete(
android.net.Uri
java.lang.String
java.lang.String[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.ISyncAdapter getSyncAdapter()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getType(
android.net.Uri)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.net.Uri insert(
android.net.Uri
android.content.ContentValues)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException;Ljava/io/FileNotFoundException; )
public abstract android.os.ParcelFileDescriptor openFile(
android.net.Uri
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.database.Cursor query(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int update(
android.net.Uri
android.content.ContentValues
java.lang.String
java.lang.String[])

________________CLASS________________


public abstract class android.content.ContentProviderNative extends android.os.Binder implements android.content.IContentProvider

----------------FIELDS----------------

private static final java.lang.String TAG
----------------METHODS----------------

public void <init>()

public static android.content.IContentProvider asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =Transport )
@dalvik.annotation.EnclosingClass (value =Landroid/content/ContentProvider; )
 class android.content.ContentProvider$Transport extends android.content.ContentProviderNative

----------------FIELDS----------------

final android.content.ContentProvider this$0
----------------METHODS----------------

 void <init>(
android.content.ContentProvider)

private void checkReadPermission(
android.net.Uri)

private void checkWritePermission(
android.net.Uri)

public int bulkInsert(
android.net.Uri
android.content.ContentValues[])

public android.database.IBulkCursor bulkQuery(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String
android.database.IContentObserver
android.database.CursorWindow)

public int delete(
android.net.Uri
java.lang.String
java.lang.String[])

 android.content.ContentProvider getContentProvider()

public android.content.ISyncAdapter getSyncAdapter()

public java.lang.String getType(
android.net.Uri)

public android.net.Uri insert(
android.net.Uri
android.content.ContentValues)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public android.os.ParcelFileDescriptor openFile(
android.net.Uri
java.lang.String)

public android.database.Cursor query(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)

public int update(
android.net.Uri
android.content.ContentValues
java.lang.String
java.lang.String[])

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/ContentProvider$Transport; )
public abstract class android.content.ContentProvider extends java.lang.Object implements android.content.ComponentCallbacks

----------------FIELDS----------------

private android.content.Context mContext

private java.lang.String mReadPermission

private android.content.ContentProvider$Transport mTransport

private java.lang.String mWritePermission
----------------METHODS----------------

public void <init>()

public static android.content.ContentProvider coerceToLocalContentProvider(
android.content.IContentProvider)

public void attachInfo(
android.content.Context
android.content.pm.ProviderInfo)

public int bulkInsert(
android.net.Uri
android.content.ContentValues[])

public abstract int delete(
android.net.Uri
java.lang.String
java.lang.String[])

public final android.content.Context getContext()

public android.content.IContentProvider getIContentProvider()

public final java.lang.String getReadPermission()

public android.content.SyncAdapter getSyncAdapter()

public abstract java.lang.String getType(
android.net.Uri)

public final java.lang.String getWritePermission()

public abstract android.net.Uri insert(
android.net.Uri
android.content.ContentValues)

protected boolean isTemporary()

public void onConfigurationChanged(
android.content.res.Configuration)

public abstract boolean onCreate()

public void onLowMemory()
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public android.os.ParcelFileDescriptor openFile(
android.net.Uri
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
protected final android.os.ParcelFileDescriptor openFileHelper(
android.net.Uri
java.lang.String)

public abstract android.database.Cursor query(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)

protected final void setReadPermission(
java.lang.String)

protected final void setWritePermission(
java.lang.String)

public abstract int update(
android.net.Uri
android.content.ContentValues
java.lang.String
java.lang.String[])

________________CLASS________________


final class android.content.ContentProviderProxy extends java.lang.Object implements android.content.IContentProvider

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

public void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int bulkInsert(
android.net.Uri
android.content.ContentValues[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.database.IBulkCursor bulkQuery(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String
android.database.IContentObserver
android.database.CursorWindow)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int delete(
android.net.Uri
java.lang.String
java.lang.String[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.ISyncAdapter getSyncAdapter()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getType(
android.net.Uri)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.net.Uri insert(
android.net.Uri
android.content.ContentValues)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException;Ljava/io/FileNotFoundException; )
public android.os.ParcelFileDescriptor openFile(
android.net.Uri
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.database.Cursor query(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int update(
android.net.Uri
android.content.ContentValues
java.lang.String
java.lang.String[])

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/database/ContentObserver$Transport;Landroid/database/ContentObserver$NotificationRunnable; )
public abstract class android.database.ContentObserver extends java.lang.Object

----------------FIELDS----------------

private java.lang.Object lock

 android.os.Handler mHandler

private android.database.ContentObserver$Transport mTransport
----------------METHODS----------------

public void <init>(
android.os.Handler)

public boolean deliverSelfNotifications()

public final void dispatchChange(
boolean)

public android.database.IContentObserver getContentObserver()

public void onChange(
boolean)

public android.database.IContentObserver releaseContentObserver()

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.content.ContentQueryMap$1 extends android.database.ContentObserver

----------------FIELDS----------------

final android.content.ContentQueryMap this$0
----------------METHODS----------------

 void <init>(
android.content.ContentQueryMap
android.os.Handler)

public void onChange(
boolean)

________________CLASS________________


public class android.content.ContentQueryMap extends java.util.Observable

----------------FIELDS----------------

private java.lang.String[] mColumnNames

private android.database.ContentObserver mContentObserver

private android.database.Cursor mCursor

private boolean mDirty

private android.os.Handler mHandlerForUpdateNotifications

private boolean mKeepUpdated

private int mKeyColumn
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Landroid/content/ContentValues;>; )
private java.util.Map mValues
----------------METHODS----------------

public void <init>(
android.database.Cursor
java.lang.String
boolean
android.os.Handler)

static boolean access$002(
android.content.ContentQueryMap
boolean)

private void readCursorIntoCache()

public void close()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()
@dalvik.annotation.Signature (value =()Ljava/util/Map<Ljava/lang/String;Landroid/content/ContentValues;>; )
public java.util.Map getRows()

public android.content.ContentValues getValues(
java.lang.String)

public void requery()

public void setKeepUpdated(
boolean)

________________CLASS________________


public abstract interface class android.database.Cursor extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@java.lang.Deprecated
public abstract void abortUpdates()

public abstract void close()
@java.lang.Deprecated
public abstract boolean commitUpdates()
@java.lang.Deprecated
@dalvik.annotation.Signature (value =(Ljava/util/Map<+Ljava/lang/Long;+Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>;)Z )
public abstract boolean commitUpdates(
java.util.Map)

public abstract void copyStringToBuffer(
int
android.database.CharArrayBuffer)

public abstract void deactivate()
@java.lang.Deprecated
public abstract boolean deleteRow()

public abstract byte[] getBlob(
int)

public abstract int getColumnCount()

public abstract int getColumnIndex(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public abstract int getColumnIndexOrThrow(
java.lang.String)

public abstract java.lang.String getColumnName(
int)

public abstract java.lang.String[] getColumnNames()

public abstract int getCount()

public abstract double getDouble(
int)

public abstract android.os.Bundle getExtras()

public abstract float getFloat(
int)

public abstract int getInt(
int)

public abstract long getLong(
int)

public abstract int getPosition()

public abstract short getShort(
int)

public abstract java.lang.String getString(
int)

public abstract boolean getWantsAllOnMoveCalls()
@java.lang.Deprecated
public abstract boolean hasUpdates()

public abstract boolean isAfterLast()

public abstract boolean isBeforeFirst()

public abstract boolean isClosed()

public abstract boolean isFirst()

public abstract boolean isLast()

public abstract boolean isNull(
int)

public abstract boolean move(
int)

public abstract boolean moveToFirst()

public abstract boolean moveToLast()

public abstract boolean moveToNext()

public abstract boolean moveToPosition(
int)

public abstract boolean moveToPrevious()

public abstract void registerContentObserver(
android.database.ContentObserver)

public abstract void registerDataSetObserver(
android.database.DataSetObserver)

public abstract boolean requery()

public abstract android.os.Bundle respond(
android.os.Bundle)

public abstract void setNotificationUri(
android.content.ContentResolver
android.net.Uri)
@java.lang.Deprecated
public abstract boolean supportsUpdates()

public abstract void unregisterContentObserver(
android.database.ContentObserver)

public abstract void unregisterDataSetObserver(
android.database.DataSetObserver)
@java.lang.Deprecated
public abstract boolean updateBlob(
int
byte[])
@java.lang.Deprecated
public abstract boolean updateDouble(
int
double)
@java.lang.Deprecated
public abstract boolean updateFloat(
int
float)
@java.lang.Deprecated
public abstract boolean updateInt(
int
int)
@java.lang.Deprecated
public abstract boolean updateLong(
int
long)
@java.lang.Deprecated
public abstract boolean updateShort(
int
short)
@java.lang.Deprecated
public abstract boolean updateString(
int
java.lang.String)
@java.lang.Deprecated
public abstract boolean updateToNull(
int)

________________CLASS________________


public class android.database.CursorWrapper extends java.lang.Object implements android.database.Cursor

----------------FIELDS----------------

private android.database.Cursor mCursor
----------------METHODS----------------

public void <init>(
android.database.Cursor)

public void abortUpdates()

public void close()

public boolean commitUpdates()
@dalvik.annotation.Signature (value =(Ljava/util/Map<+Ljava/lang/Long;+Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>;)Z )
public boolean commitUpdates(
java.util.Map)

public void copyStringToBuffer(
int
android.database.CharArrayBuffer)

public void deactivate()

public boolean deleteRow()

public byte[] getBlob(
int)

public int getColumnCount()

public int getColumnIndex(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public int getColumnIndexOrThrow(
java.lang.String)

public java.lang.String getColumnName(
int)

public java.lang.String[] getColumnNames()

public int getCount()

public double getDouble(
int)

public android.os.Bundle getExtras()

public float getFloat(
int)

public int getInt(
int)

public long getLong(
int)

public int getPosition()

public short getShort(
int)

public java.lang.String getString(
int)

public boolean getWantsAllOnMoveCalls()

public boolean hasUpdates()

public boolean isAfterLast()

public boolean isBeforeFirst()

public boolean isClosed()

public boolean isFirst()

public boolean isLast()

public boolean isNull(
int)

public boolean move(
int)

public boolean moveToFirst()

public boolean moveToLast()

public boolean moveToNext()

public boolean moveToPosition(
int)

public boolean moveToPrevious()

public void registerContentObserver(
android.database.ContentObserver)

public void registerDataSetObserver(
android.database.DataSetObserver)

public boolean requery()

public android.os.Bundle respond(
android.os.Bundle)

public void setNotificationUri(
android.content.ContentResolver
android.net.Uri)

public boolean supportsUpdates()

public void unregisterContentObserver(
android.database.ContentObserver)

public void unregisterDataSetObserver(
android.database.DataSetObserver)

public boolean updateBlob(
int
byte[])

public boolean updateDouble(
int
double)

public boolean updateFloat(
int
float)

public boolean updateInt(
int
int)

public boolean updateLong(
int
long)

public boolean updateShort(
int
short)

public boolean updateString(
int
java.lang.String)

public boolean updateToNull(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/ContentResolver; )
@dalvik.annotation.InnerClass (accessFlags =18 name =CursorWrapperInner )
final class android.content.ContentResolver$CursorWrapperInner extends android.database.CursorWrapper

----------------FIELDS----------------

public static final java.lang.String TAG

private boolean mCloseFlag

private android.content.IContentProvider mContentProvider

final android.content.ContentResolver this$0
----------------METHODS----------------

 void <init>(
android.content.ContentResolver
android.database.Cursor
android.content.IContentProvider)

public void close()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/ParcelFileDescriptor$AutoCloseOutputStream;Landroid/os/ParcelFileDescriptor$AutoCloseInputStream; )
public class android.os.ParcelFileDescriptor extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/os/ParcelFileDescriptor;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final int MODE_CREATE

public static final int MODE_READ_ONLY

public static final int MODE_READ_WRITE

public static final int MODE_TRUNCATE

public static final int MODE_WORLD_READABLE

public static final int MODE_WORLD_WRITEABLE

public static final int MODE_WRITE_ONLY

private boolean mClosed

private final java.io.FileDescriptor mFileDescriptor

private final android.os.ParcelFileDescriptor mParcelDescriptor
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.os.ParcelFileDescriptor)

 void <init>(
java.io.FileDescriptor)

public static android.os.ParcelFileDescriptor fromSocket(
java.net.Socket)

private static native java.io.FileDescriptor getFileDescriptorFromSocket(
java.net.Socket)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public static android.os.ParcelFileDescriptor open(
java.io.File
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()

public int describeContents()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public java.io.FileDescriptor getFileDescriptor()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/ContentResolver; )
@dalvik.annotation.InnerClass (accessFlags =18 name =ParcelFileDescriptorInner )
final class android.content.ContentResolver$ParcelFileDescriptorInner extends android.os.ParcelFileDescriptor

----------------FIELDS----------------

public static final java.lang.String TAG

private android.content.IContentProvider mContentProvider

private boolean mReleaseProviderFlag

final android.content.ContentResolver this$0
----------------METHODS----------------

 void <init>(
android.content.ContentResolver
android.os.ParcelFileDescriptor
android.content.IContentProvider)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/ContentService; )
@dalvik.annotation.InnerClass (accessFlags =25 name =ObserverCall )
public final class android.content.ContentService$ObserverCall extends java.lang.Object

----------------FIELDS----------------

final android.content.ContentService$ObserverNode mNode

final android.database.IContentObserver mObserver

final boolean mSelfNotify
----------------METHODS----------------

 void <init>(
android.content.ContentService$ObserverNode
android.database.IContentObserver
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/ContentService$ObserverNode; )
@dalvik.annotation.InnerClass (accessFlags =2 name =ObserverEntry )
 class android.content.ContentService$ObserverNode$ObserverEntry extends java.lang.Object implements android.os.IBinder$DeathRecipient

----------------FIELDS----------------

public boolean notifyForDescendents

public android.database.IContentObserver observer

final android.content.ContentService$ObserverNode this$0
----------------METHODS----------------

public void <init>(
android.content.ContentService$ObserverNode
android.database.IContentObserver
boolean)

public void binderDied()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =ObserverNode )
@dalvik.annotation.MemberClasses (value =Landroid/content/ContentService$ObserverNode$ObserverEntry; )
@dalvik.annotation.EnclosingClass (value =Landroid/content/ContentService; )
public final class android.content.ContentService$ObserverNode extends java.lang.Object

----------------FIELDS----------------

public static final int DELETE_TYPE

public static final int INSERT_TYPE

public static final int UPDATE_TYPE
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/content/ContentService$ObserverNode;>; )
private java.util.ArrayList mChildren

private java.lang.String mName
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/content/ContentService$ObserverNode$ObserverEntry;>; )
private java.util.ArrayList mObservers
----------------METHODS----------------

public void <init>(
java.lang.String)

static java.util.ArrayList access$000(
android.content.ContentService$ObserverNode)

private void addObserver(
android.net.Uri
int
android.database.IContentObserver
boolean)
@dalvik.annotation.Signature (value =(Landroid/net/Uri;ZLandroid/database/IContentObserver;ZLjava/util/ArrayList<Landroid/content/ContentService$ObserverCall;>;)V )
private void collectMyObservers(
android.net.Uri
boolean
android.database.IContentObserver
boolean
java.util.ArrayList)

private int countUriSegments(
android.net.Uri)

private java.lang.String getUriSegment(
android.net.Uri
int)

public void addObserver(
android.net.Uri
android.database.IContentObserver
boolean)
@dalvik.annotation.Signature (value =(Landroid/net/Uri;ILandroid/database/IContentObserver;ZLjava/util/ArrayList<Landroid/content/ContentService$ObserverCall;>;)V )
public void collectObservers(
android.net.Uri
int
android.database.IContentObserver
boolean
java.util.ArrayList)

public boolean removeObserver(
android.database.IContentObserver)

________________CLASS________________


public abstract interface class android.content.IContentService extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------

public static final int CANCEL_SYNC_TRANSACTION

public static final int NOTIFY_CHANGE_TRANSACTION

public static final int REGISTER_CONTENT_OBSERVER_TRANSACTION

public static final java.lang.String SERVICE_NAME

public static final int START_SYNC_TRANSACTION

public static final int UNREGISTER_CHANGE_OBSERVER_TRANSACTION

public static final java.lang.String descriptor
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void cancelSync(
android.net.Uri)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void notifyChange(
android.net.Uri
android.database.IContentObserver
boolean
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void registerContentObserver(
android.net.Uri
boolean
android.database.IContentObserver)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void startSync(
android.net.Uri
android.os.Bundle)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void unregisterContentObserver(
android.database.IContentObserver)

________________CLASS________________


abstract class android.content.ContentServiceNative extends android.os.Binder implements android.content.IContentService

----------------FIELDS----------------

private static android.content.IContentService gDefault
----------------METHODS----------------

public void <init>()

public static android.content.IContentService asInterface(
android.os.IBinder)

public static android.content.IContentService getDefault()

public android.os.IBinder asBinder()

public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/ContentService$ObserverNode;Landroid/content/ContentService$ObserverCall; )
public final class android.content.ContentService extends android.content.ContentServiceNative

----------------FIELDS----------------

private static final java.lang.String TAG

private android.content.Context mContext

private boolean mFactoryTest

private final android.content.ContentService$ObserverNode mRootNode

private android.content.SyncManager mSyncManager

private final java.lang.Object mSyncManagerLock
----------------METHODS----------------

 void <init>(
android.content.Context
boolean)

private android.content.SyncManager getSyncManager()

public static android.content.IContentService main(
android.content.Context
boolean)

public volatile android.os.IBinder asBinder()

public void cancelSync(
android.net.Uri)

protected void dump(
java.io.FileDescriptor
java.io.PrintWriter
java.lang.String[])

public void notifyChange(
android.net.Uri
android.database.IContentObserver
boolean
boolean)

public volatile boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

public void registerContentObserver(
android.net.Uri
boolean
android.database.IContentObserver)

public void startSync(
android.net.Uri
android.os.Bundle)

public void unregisterContentObserver(
android.database.IContentObserver)

________________CLASS________________


final class android.content.ContentServiceProxy extends java.lang.Object implements android.content.IContentService

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

public void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void cancelSync(
android.net.Uri)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void notifyChange(
android.net.Uri
android.database.IContentObserver
boolean
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void registerContentObserver(
android.net.Uri
boolean
android.database.IContentObserver)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void startSync(
android.net.Uri
android.os.Bundle)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void unregisterContentObserver(
android.database.IContentObserver)

________________CLASS________________


public class android.content.ContentUris extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static android.net.Uri$Builder appendId(
android.net.Uri$Builder
long)

public static long parseId(
android.net.Uri)

public static android.net.Uri withAppendedId(
android.net.Uri
long)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/ContentValues;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/content/ContentValues; )
final class android.content.ContentValues$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.ContentValues createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.ContentValues[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public final class android.content.ContentValues extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/ContentValues;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final java.lang.String TAG
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/Object;>; )
private java.util.HashMap mValues
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
int)

public void <init>(
android.content.ContentValues)
@dalvik.annotation.Signature (value =(Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/Object;>;)V )
private void <init>(
java.util.HashMap)

 void <init>(
java.util.HashMap
android.content.ContentValues$1)

public void clear()

public boolean containsKey(
java.lang.String)

public int describeContents()

public boolean equals(
java.lang.Object)

public java.lang.Object get(
java.lang.String)

public java.lang.Boolean getAsBoolean(
java.lang.String)

public java.lang.Byte getAsByte(
java.lang.String)

public byte[] getAsByteArray(
java.lang.String)

public java.lang.Double getAsDouble(
java.lang.String)

public java.lang.Float getAsFloat(
java.lang.String)

public java.lang.Integer getAsInteger(
java.lang.String)

public java.lang.Long getAsLong(
java.lang.String)

public java.lang.Short getAsShort(
java.lang.String)

public java.lang.String getAsString(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/String;)Ljava/util/ArrayList<Ljava/lang/String;>; )
@java.lang.Deprecated
public java.util.ArrayList getStringArrayList(
java.lang.String)

public int hashCode()

public void put(
java.lang.String
java.lang.Boolean)

public void put(
java.lang.String
java.lang.Byte)

public void put(
java.lang.String
java.lang.Double)

public void put(
java.lang.String
java.lang.Float)

public void put(
java.lang.String
java.lang.Integer)

public void put(
java.lang.String
java.lang.Long)

public void put(
java.lang.String
java.lang.Short)

public void put(
java.lang.String
java.lang.String)

public void put(
java.lang.String
byte[])

public void putAll(
android.content.ContentValues)

public void putNull(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;)V )
@java.lang.Deprecated
public void putStringArrayList(
java.lang.String
java.util.ArrayList)

public void remove(
java.lang.String)

public int size()

public java.lang.String toString()
@dalvik.annotation.Signature (value =()Ljava/util/Set<Ljava/util/Map$Entry<Ljava/lang/String;Ljava/lang/Object;>;>; )
public java.util.Set valueSet()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public class android.content.DefaultDataHandler extends java.lang.Object implements android.content.ContentInsertHandler

----------------FIELDS----------------

private static final java.lang.String ARG

private static final java.lang.String COL

private static final java.lang.String DEL

private static final java.lang.String POSTFIX

private static final java.lang.String ROW

private static final java.lang.String SELECT

private static final java.lang.String URI_STR

private android.content.ContentResolver mContentResolver
@dalvik.annotation.Signature (value =Ljava/util/Stack<Landroid/net/Uri;>; )
private java.util.Stack mUris

private android.content.ContentValues mValues
----------------METHODS----------------

public void <init>()

private android.net.Uri insertRow()
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
private void parseRow(
org.xml.sax.Attributes)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void characters(
char[]
int
int)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void endDocument()
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void endElement(
java.lang.String
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void endPrefixMapping(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void ignorableWhitespace(
char[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/xml/sax/SAXException; )
public void insert(
android.content.ContentResolver
java.io.InputStream)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void insert(
android.content.ContentResolver
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void processingInstruction(
java.lang.String
java.lang.String)

public void setDocumentLocator(
org.xml.sax.Locator)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void skippedEntity(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void startDocument()
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void startElement(
java.lang.String
java.lang.String
java.lang.String
org.xml.sax.Attributes)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void startPrefixMapping(
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnKeyListener )
@dalvik.annotation.EnclosingClass (value =Landroid/content/DialogInterface; )
public abstract interface class android.content.DialogInterface$OnKeyListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onKey(
android.content.DialogInterface
int
android.view.KeyEvent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnMultiChoiceClickListener )
@dalvik.annotation.EnclosingClass (value =Landroid/content/DialogInterface; )
public abstract interface class android.content.DialogInterface$OnMultiChoiceClickListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onClick(
android.content.DialogInterface
int
boolean)

________________CLASS________________


public final class android.content.Formatter extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static java.lang.String formatFileSize(
android.content.Context
long)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/ISyncAdapter$Stub; )
public abstract interface class android.content.ISyncAdapter extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void cancelSync()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void startSync(
android.content.ISyncContext
java.lang.String
android.os.Bundle)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/content/ISyncAdapter$Stub; )
 class android.content.ISyncAdapter$Stub$Proxy extends java.lang.Object implements android.content.ISyncAdapter

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void cancelSync()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void startSync(
android.content.ISyncContext
java.lang.String
android.os.Bundle)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/ISyncAdapter; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/content/ISyncAdapter$Stub$Proxy; )
public abstract class android.content.ISyncAdapter$Stub extends android.os.Binder implements android.content.ISyncAdapter

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_cancelSync

static final int TRANSACTION_startSync
----------------METHODS----------------

public void <init>()

public static android.content.ISyncAdapter asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/ISyncContext$Stub; )
public abstract interface class android.content.ISyncContext extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onFinished(
android.content.SyncResult)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void sendHeartbeat()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/ISyncContext$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.content.ISyncContext$Stub$Proxy extends java.lang.Object implements android.content.ISyncContext

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onFinished(
android.content.SyncResult)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void sendHeartbeat()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/ISyncContext$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/content/ISyncContext; )
public abstract class android.content.ISyncContext$Stub extends android.os.Binder implements android.content.ISyncContext

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_onFinished

static final int TRANSACTION_sendHeartbeat
----------------METHODS----------------

public void <init>()

public static android.content.ISyncContext asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/content/Intent; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/Intent;>; )
final class android.content.Intent$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.Intent createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.Intent[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/Intent; )
@dalvik.annotation.InnerClass (accessFlags =25 name =FilterComparison )
public final class android.content.Intent$FilterComparison extends java.lang.Object

----------------FIELDS----------------

private final int mHashCode

private final android.content.Intent mIntent
----------------METHODS----------------

public void <init>(
android.content.Intent)

public boolean equals(
java.lang.Object)

public android.content.Intent getIntent()

public int hashCode()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/Intent$ShortcutIconResource; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/Intent$ShortcutIconResource;>; )
final class android.content.Intent$ShortcutIconResource$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.Intent$ShortcutIconResource createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.Intent$ShortcutIconResource[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =ShortcutIconResource )
@dalvik.annotation.EnclosingClass (value =Landroid/content/Intent; )
public class android.content.Intent$ShortcutIconResource extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/Intent$ShortcutIconResource;>; )
public static final android.os.Parcelable$Creator CREATOR

public java.lang.String packageName

public java.lang.String resourceName
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.content.Intent$ShortcutIconResource fromContext(
android.content.Context
int)

public int describeContents()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/Intent$FilterComparison;Landroid/content/Intent$ShortcutIconResource; )
public class android.content.Intent extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------

public static final java.lang.String ACTION_AIRPLANE_MODE_CHANGED

public static final java.lang.String ACTION_ALARM_CHANGED

public static final java.lang.String ACTION_ALL_APPS

public static final java.lang.String ACTION_ANSWER

public static final java.lang.String ACTION_ATTACH_DATA

public static final java.lang.String ACTION_BATTERY_CHANGED

public static final java.lang.String ACTION_BATTERY_LOW

public static final java.lang.String ACTION_BOOT_COMPLETED

public static final java.lang.String ACTION_BUG_REPORT

public static final java.lang.String ACTION_CALL

public static final java.lang.String ACTION_CALL_BUTTON

public static final java.lang.String ACTION_CALL_EMERGENCY

public static final java.lang.String ACTION_CALL_PRIVILEGED

public static final java.lang.String ACTION_CAMERA_BUTTON

public static final java.lang.String ACTION_CHOOSER

public static final java.lang.String ACTION_CLOSE_SYSTEM_DIALOGS

public static final java.lang.String ACTION_CONFIGURATION_CHANGED

public static final java.lang.String ACTION_CREATE_SHORTCUT

public static final java.lang.String ACTION_DATE_CHANGED

public static final java.lang.String ACTION_DEFAULT

public static final java.lang.String ACTION_DELETE

public static final java.lang.String ACTION_DEVICE_STORAGE_LOW

public static final java.lang.String ACTION_DEVICE_STORAGE_OK

public static final java.lang.String ACTION_DIAL

public static final java.lang.String ACTION_EDIT

public static final java.lang.String ACTION_FACTORY_TEST

public static final java.lang.String ACTION_GET_CONTENT

public static final java.lang.String ACTION_GTALK_SERVICE_CONNECTED

public static final java.lang.String ACTION_GTALK_SERVICE_DISCONNECTED

public static final java.lang.String ACTION_HEADSET_PLUG

public static final java.lang.String ACTION_INSERT

public static final java.lang.String ACTION_INSERT_OR_EDIT

public static final java.lang.String ACTION_MAIN

public static final java.lang.String ACTION_MANAGE_PACKAGE_STORAGE

public static final java.lang.String ACTION_MEDIA_BAD_REMOVAL

public static final java.lang.String ACTION_MEDIA_BUTTON

public static final java.lang.String ACTION_MEDIA_EJECT

public static final java.lang.String ACTION_MEDIA_MOUNTED

public static final java.lang.String ACTION_MEDIA_REMOVED

public static final java.lang.String ACTION_MEDIA_SCANNER_FINISHED

public static final java.lang.String ACTION_MEDIA_SCANNER_SCAN_FILE

public static final java.lang.String ACTION_MEDIA_SCANNER_STARTED

public static final java.lang.String ACTION_MEDIA_SHARED

public static final java.lang.String ACTION_MEDIA_UNMOUNTABLE

public static final java.lang.String ACTION_MEDIA_UNMOUNTED

public static final java.lang.String ACTION_NEW_OUTGOING_CALL

public static final java.lang.String ACTION_PACKAGE_ADDED

public static final java.lang.String ACTION_PACKAGE_CHANGED

public static final java.lang.String ACTION_PACKAGE_INSTALL

public static final java.lang.String ACTION_PACKAGE_REMOVED

public static final java.lang.String ACTION_PACKAGE_RESTARTED

public static final java.lang.String ACTION_PICK

public static final java.lang.String ACTION_PICK_ACTIVITY

public static final java.lang.String ACTION_PROVIDER_CHANGED

public static final java.lang.String ACTION_REBOOT

public static final java.lang.String ACTION_RUN

public static final java.lang.String ACTION_SCREEN_OFF

public static final java.lang.String ACTION_SCREEN_ON

public static final java.lang.String ACTION_SEARCH

public static final java.lang.String ACTION_SEND

public static final java.lang.String ACTION_SENDTO

public static final java.lang.String ACTION_SET_WALLPAPER

public static final java.lang.String ACTION_SYNC

public static final java.lang.String ACTION_SYNC_STATE_CHANGED

public static final java.lang.String ACTION_TIMEZONE_CHANGED

public static final java.lang.String ACTION_TIME_CHANGED

public static final java.lang.String ACTION_TIME_TICK

public static final java.lang.String ACTION_UID_REMOVED

public static final java.lang.String ACTION_UMS_CONNECTED

public static final java.lang.String ACTION_UMS_DISCONNECTED

public static final java.lang.String ACTION_VIEW

public static final java.lang.String ACTION_VOICE_COMMAND

public static final java.lang.String ACTION_WALLPAPER_CHANGED

public static final java.lang.String ACTION_WEB_SEARCH

public static final java.lang.String CATEGORY_ALTERNATIVE

public static final java.lang.String CATEGORY_BROWSABLE

public static final java.lang.String CATEGORY_DEFAULT

public static final java.lang.String CATEGORY_DEVELOPMENT_PREFERENCE

public static final java.lang.String CATEGORY_EMBED

public static final java.lang.String CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST

public static final java.lang.String CATEGORY_GADGET

public static final java.lang.String CATEGORY_HOME

public static final java.lang.String CATEGORY_LAUNCHER

public static final java.lang.String CATEGORY_MONKEY

public static final java.lang.String CATEGORY_OPENABLE

public static final java.lang.String CATEGORY_PREFERENCE

public static final java.lang.String CATEGORY_SAMPLE_CODE

public static final java.lang.String CATEGORY_SELECTED_ALTERNATIVE

public static final java.lang.String CATEGORY_TAB

public static final java.lang.String CATEGORY_TEST

public static final java.lang.String CATEGORY_UNIT_TEST
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/Intent;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final java.lang.String EXTRA_ALARM_COUNT

public static final java.lang.String EXTRA_BCC

public static final java.lang.String EXTRA_CC

public static final java.lang.String EXTRA_DONT_KILL_APP

public static final java.lang.String EXTRA_EMAIL

public static final java.lang.String EXTRA_INTENT

public static final java.lang.String EXTRA_KEY_EVENT

public static final java.lang.String EXTRA_PHONE_NUMBER

public static final java.lang.String EXTRA_SHORTCUT_ICON

public static final java.lang.String EXTRA_SHORTCUT_ICON_RESOURCE

public static final java.lang.String EXTRA_SHORTCUT_INTENT

public static final java.lang.String EXTRA_SHORTCUT_NAME

public static final java.lang.String EXTRA_STREAM

public static final java.lang.String EXTRA_SUBJECT

public static final java.lang.String EXTRA_TEMPLATE

public static final java.lang.String EXTRA_TEXT

public static final java.lang.String EXTRA_TITLE

public static final java.lang.String EXTRA_UID

public static final int FILL_IN_ACTION

public static final int FILL_IN_CATEGORIES

public static final int FILL_IN_COMPONENT

public static final int FILL_IN_DATA

public static final int FLAG_ACTIVITY_BROUGHT_TO_FRONT

public static final int FLAG_ACTIVITY_CLEAR_TOP

public static final int FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

public static final int FLAG_ACTIVITY_FORWARD_RESULT

public static final int FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

public static final int FLAG_ACTIVITY_MULTIPLE_TASK

public static final int FLAG_ACTIVITY_NEW_TASK

public static final int FLAG_ACTIVITY_NO_HISTORY

public static final int FLAG_ACTIVITY_PREVIOUS_IS_TOP

public static final int FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

public static final int FLAG_ACTIVITY_SINGLE_TOP

public static final int FLAG_DEBUG_LOG_RESOLUTION

public static final int FLAG_FROM_BACKGROUND

public static final int FLAG_GRANT_READ_URI_PERMISSION

public static final int FLAG_GRANT_WRITE_URI_PERMISSION

public static final int FLAG_RECEIVER_REGISTERED_ONLY

private java.lang.String mAction
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private java.util.HashSet mCategories

private android.content.ComponentName mComponent

private android.net.Uri mData

private android.os.Bundle mExtras

private int mFlags

private java.lang.String mType
----------------METHODS----------------

static void <clinit>()

public void <init>()
@dalvik.annotation.Signature (value =(Landroid/content/Context;Ljava/lang/Class<*>;)V )
public void <init>(
android.content.Context
java.lang.Class)

public void <init>(
android.content.Intent)

private void <init>(
android.content.Intent
boolean)

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.content.Intent$1)

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
android.net.Uri)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Landroid/net/Uri;Landroid/content/Context;Ljava/lang/Class<*>;)V )
public void <init>(
java.lang.String
android.net.Uri
android.content.Context
java.lang.Class)

public static android.content.Intent createChooser(
android.content.Intent
java.lang.CharSequence)
@dalvik.annotation.Throws (value =Ljava/net/URISyntaxException; )
public static android.content.Intent getIntent(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/net/URISyntaxException; )
public static android.content.Intent getIntentOld(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private static void parseExtra(
android.content.res.Resources
android.content.Intent
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static android.content.Intent parseIntent(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

public android.content.Intent addCategory(
java.lang.String)

public android.content.Intent addFlags(
int)

public java.lang.Object clone()

public android.content.Intent cloneFilter()

public int describeContents()

public int fillIn(
android.content.Intent
int)

public boolean filterEquals(
android.content.Intent)

public int filterHashCode()

public java.lang.String getAction()

public boolean[] getBooleanArrayExtra(
java.lang.String)

public boolean getBooleanExtra(
java.lang.String
boolean)

public android.os.Bundle getBundleExtra(
java.lang.String)

public byte[] getByteArrayExtra(
java.lang.String)

public byte getByteExtra(
java.lang.String
byte)
@dalvik.annotation.Signature (value =()Ljava/util/Set<Ljava/lang/String;>; )
public java.util.Set getCategories()

public char[] getCharArrayExtra(
java.lang.String)

public char getCharExtra(
java.lang.String
char)

public java.lang.CharSequence getCharSequenceExtra(
java.lang.String)

public android.content.ComponentName getComponent()

public android.net.Uri getData()

public java.lang.String getDataString()

public double[] getDoubleArrayExtra(
java.lang.String)

public double getDoubleExtra(
java.lang.String
double)
@java.lang.Deprecated
public java.lang.Object getExtra(
java.lang.String)
@java.lang.Deprecated
public java.lang.Object getExtra(
java.lang.String
java.lang.Object)

public android.os.Bundle getExtras()

public int getFlags()

public float[] getFloatArrayExtra(
java.lang.String)

public float getFloatExtra(
java.lang.String
float)
@java.lang.Deprecated
public android.os.IBinder getIBinderExtra(
java.lang.String)

public int[] getIntArrayExtra(
java.lang.String)

public int getIntExtra(
java.lang.String
int)
@dalvik.annotation.Signature (value =(Ljava/lang/String;)Ljava/util/ArrayList<Ljava/lang/Integer;>; )
public java.util.ArrayList getIntegerArrayListExtra(
java.lang.String)

public long[] getLongArrayExtra(
java.lang.String)

public long getLongExtra(
java.lang.String
long)

public android.os.Parcelable[] getParcelableArrayExtra(
java.lang.String)
@dalvik.annotation.Signature (value =<T::Landroid/os/Parcelable;>(Ljava/lang/String;)Ljava/util/ArrayList<TT;>; )
public java.util.ArrayList getParcelableArrayListExtra(
java.lang.String)
@dalvik.annotation.Signature (value =<T::Landroid/os/Parcelable;>(Ljava/lang/String;)TT; )
public android.os.Parcelable getParcelableExtra(
java.lang.String)

public java.lang.String getScheme()

public java.io.Serializable getSerializableExtra(
java.lang.String)

public short[] getShortArrayExtra(
java.lang.String)

public short getShortExtra(
java.lang.String
short)

public java.lang.String[] getStringArrayExtra(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/String;)Ljava/util/ArrayList<Ljava/lang/String;>; )
public java.util.ArrayList getStringArrayListExtra(
java.lang.String)

public java.lang.String getStringExtra(
java.lang.String)

public java.lang.String getType()

public boolean hasCategory(
java.lang.String)

public boolean hasExtra(
java.lang.String)

public boolean hasFileDescriptors()

public android.content.Intent putExtra(
java.lang.String
byte)

public android.content.Intent putExtra(
java.lang.String
char)

public android.content.Intent putExtra(
java.lang.String
double)

public android.content.Intent putExtra(
java.lang.String
float)

public android.content.Intent putExtra(
java.lang.String
int)

public android.content.Intent putExtra(
java.lang.String
long)

public android.content.Intent putExtra(
java.lang.String
android.os.Bundle)
@java.lang.Deprecated
public android.content.Intent putExtra(
java.lang.String
android.os.IBinder)

public android.content.Intent putExtra(
java.lang.String
android.os.Parcelable)

public android.content.Intent putExtra(
java.lang.String
java.io.Serializable)

public android.content.Intent putExtra(
java.lang.String
java.lang.CharSequence)

public android.content.Intent putExtra(
java.lang.String
java.lang.String)

public android.content.Intent putExtra(
java.lang.String
short)

public android.content.Intent putExtra(
java.lang.String
boolean)

public android.content.Intent putExtra(
java.lang.String
byte[])

public android.content.Intent putExtra(
java.lang.String
char[])

public android.content.Intent putExtra(
java.lang.String
double[])

public android.content.Intent putExtra(
java.lang.String
float[])

public android.content.Intent putExtra(
java.lang.String
int[])

public android.content.Intent putExtra(
java.lang.String
long[])

public android.content.Intent putExtra(
java.lang.String
android.os.Parcelable[])

public android.content.Intent putExtra(
java.lang.String
java.lang.String[])

public android.content.Intent putExtra(
java.lang.String
short[])

public android.content.Intent putExtra(
java.lang.String
boolean[])

public android.content.Intent putExtras(
android.content.Intent)

public android.content.Intent putExtras(
android.os.Bundle)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/Integer;>;)Landroid/content/Intent; )
public android.content.Intent putIntegerArrayListExtra(
java.lang.String
java.util.ArrayList)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/ArrayList<+Landroid/os/Parcelable;>;)Landroid/content/Intent; )
public android.content.Intent putParcelableArrayListExtra(
java.lang.String
java.util.ArrayList)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;)Landroid/content/Intent; )
public android.content.Intent putStringArrayListExtra(
java.lang.String
java.util.ArrayList)

public void readFromParcel(
android.os.Parcel)

public void removeCategory(
java.lang.String)

public void removeExtra(
java.lang.String)

public android.content.ComponentName resolveActivity(
android.content.pm.PackageManager)

public android.content.pm.ActivityInfo resolveActivityInfo(
android.content.pm.PackageManager
int)

public java.lang.String resolveType(
android.content.ContentResolver)

public java.lang.String resolveType(
android.content.Context)

public java.lang.String resolveTypeIfNeeded(
android.content.ContentResolver)

public android.content.Intent setAction(
java.lang.String)
@dalvik.annotation.Signature (value =(Landroid/content/Context;Ljava/lang/Class<*>;)Landroid/content/Intent; )
public android.content.Intent setClass(
android.content.Context
java.lang.Class)

public android.content.Intent setClassName(
android.content.Context
java.lang.String)

public android.content.Intent setClassName(
java.lang.String
java.lang.String)

public android.content.Intent setComponent(
android.content.ComponentName)

public android.content.Intent setData(
android.net.Uri)

public android.content.Intent setDataAndType(
android.net.Uri
java.lang.String)

public void setExtrasClassLoader(
java.lang.ClassLoader)

public android.content.Intent setFlags(
int)

public android.content.Intent setType(
java.lang.String)

public java.lang.String toString()

public java.lang.String toURI()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/IntentFilter;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/content/IntentFilter; )
final class android.content.IntentFilter$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.IntentFilter createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.IntentFilter[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/IntentFilter; )
@dalvik.annotation.InnerClass (accessFlags =25 name =AuthorityEntry )
public final class android.content.IntentFilter$AuthorityEntry extends java.lang.Object

----------------FIELDS----------------

private final java.lang.String mHost

private final java.lang.String mOrigHost

private final int mPort

private final boolean mWild
----------------METHODS----------------

 void <init>(
android.os.Parcel)

public void <init>(
java.lang.String
java.lang.String)

static java.lang.String access$000(
android.content.IntentFilter$AuthorityEntry)

static int access$100(
android.content.IntentFilter$AuthorityEntry)

static boolean access$200(
android.content.IntentFilter$AuthorityEntry)

public java.lang.String getHost()

public int getPort()

public int match(
android.net.Uri)

 void writeToParcel(
android.os.Parcel)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/IntentFilter; )
@dalvik.annotation.InnerClass (accessFlags =9 name =MalformedMimeTypeException )
public class android.content.IntentFilter$MalformedMimeTypeException extends android.util.AndroidException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/IntentFilter$AuthorityEntry;Landroid/content/IntentFilter$MalformedMimeTypeException; )
public class android.content.IntentFilter extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------

private static final java.lang.String ACTION_STR

private static final java.lang.String AUTH_STR

private static final java.lang.String CAT_STR
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/IntentFilter;>; )
public static final android.os.Parcelable$Creator CREATOR

private static final java.lang.String HOST_STR

private static final java.lang.String LITERAL_STR

public static final int MATCH_ADJUSTMENT_MASK

public static final int MATCH_ADJUSTMENT_NORMAL

public static final int MATCH_CATEGORY_EMPTY

public static final int MATCH_CATEGORY_HOST

public static final int MATCH_CATEGORY_MASK

public static final int MATCH_CATEGORY_PATH

public static final int MATCH_CATEGORY_PORT

public static final int MATCH_CATEGORY_SCHEME

public static final int MATCH_CATEGORY_TYPE

private static final java.lang.String NAME_STR

public static final int NO_MATCH_ACTION

public static final int NO_MATCH_CATEGORY

public static final int NO_MATCH_DATA

public static final int NO_MATCH_TYPE

private static final java.lang.String PATH_STR

private static final java.lang.String PORT_STR

private static final java.lang.String PREFIX_STR

private static final java.lang.String SCHEME_STR

private static final java.lang.String SGLOB_STR

public static final int SYSTEM_HIGH_PRIORITY

public static final int SYSTEM_LOW_PRIORITY

private static final java.lang.String TYPE_STR
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/lang/String;>; )
private final java.util.ArrayList mActions
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/lang/String;>; )
private java.util.ArrayList mCategories
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/content/IntentFilter$AuthorityEntry;>; )
private java.util.ArrayList mDataAuthorities
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/os/PatternMatcher;>; )
private java.util.ArrayList mDataPaths
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/lang/String;>; )
private java.util.ArrayList mDataSchemes
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/lang/String;>; )
private java.util.ArrayList mDataTypes

private boolean mHasPartialTypes

private int mPriority
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
android.content.IntentFilter)

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.content.IntentFilter$1)

public void <init>(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/content/IntentFilter$MalformedMimeTypeException; )
public void <init>(
java.lang.String
java.lang.String)

private static java.lang.String[] addStringToSet(
java.lang.String[]
java.lang.String
int[]
int)

public static android.content.IntentFilter create(
java.lang.String
java.lang.String)

private final boolean findMimeType(
java.lang.String)

private static int findStringInSet(
java.lang.String[]
java.lang.String
int[]
int)

private static java.lang.String[] removeStringFromSet(
java.lang.String[]
java.lang.String
int[]
int)
@dalvik.annotation.Signature (value =()Ljava/util/Iterator<Ljava/lang/String;>; )
public final java.util.Iterator actionsIterator()

public final void addAction(
java.lang.String)

public final void addCategory(
java.lang.String)

public final void addDataAuthority(
java.lang.String
java.lang.String)

public final void addDataPath(
java.lang.String
int)

public final void addDataScheme(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/content/IntentFilter$MalformedMimeTypeException; )
public final void addDataType(
java.lang.String)
@dalvik.annotation.Signature (value =()Ljava/util/Iterator<Landroid/content/IntentFilter$AuthorityEntry;>; )
public final java.util.Iterator authoritiesIterator()
@dalvik.annotation.Signature (value =()Ljava/util/Iterator<Ljava/lang/String;>; )
public final java.util.Iterator categoriesIterator()

public final int countActions()

public final int countCategories()

public final int countDataAuthorities()

public final int countDataPaths()

public final int countDataSchemes()

public final int countDataTypes()

public boolean debugCheck()

public final int describeContents()

public void dump(
android.util.Printer
java.lang.String)

public final java.lang.String getAction(
int)

public final java.lang.String getCategory(
int)

public final android.content.IntentFilter$AuthorityEntry getDataAuthority(
int)

public final android.os.PatternMatcher getDataPath(
int)

public final java.lang.String getDataScheme(
int)

public final java.lang.String getDataType(
int)

public final int getPriority()

public final boolean hasAction(
java.lang.String)

public final boolean hasCategory(
java.lang.String)

public final boolean hasDataAuthority(
android.net.Uri)

public final boolean hasDataPath(
java.lang.String)

public final boolean hasDataScheme(
java.lang.String)

public final boolean hasDataType(
java.lang.String)

public final int match(
android.content.ContentResolver
android.content.Intent
boolean
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Ljava/util/Set<Ljava/lang/String;>;Ljava/lang/String;)I )
public final int match(
java.lang.String
java.lang.String
java.lang.String
android.net.Uri
java.util.Set
java.lang.String)

public final boolean matchAction(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/util/Set<Ljava/lang/String;>;)Ljava/lang/String; )
public final java.lang.String matchCategories(
java.util.Set)

public final int matchData(
java.lang.String
java.lang.String
android.net.Uri)

public final int matchDataAuthority(
android.net.Uri)
@dalvik.annotation.Signature (value =()Ljava/util/Iterator<Landroid/os/PatternMatcher;>; )
public final java.util.Iterator pathsIterator()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public void readFromXml(
org.xmlpull.v1.XmlPullParser)
@dalvik.annotation.Signature (value =()Ljava/util/Iterator<Ljava/lang/String;>; )
public final java.util.Iterator schemesIterator()

public final void setPriority(
int)
@dalvik.annotation.Signature (value =()Ljava/util/Iterator<Ljava/lang/String;>; )
public final java.util.Iterator typesIterator()

public final void writeToParcel(
android.os.Parcel
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeToXml(
org.xmlpull.v1.XmlSerializer)

________________CLASS________________


public class android.content.MutableContextWrapper extends android.content.ContextWrapper

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.content.Context)

public void setBaseContext(
android.content.Context)

________________CLASS________________


public class android.content.ReceiverCallNotAllowedException extends android.util.AndroidRuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________


public abstract class android.database.sqlite.SQLiteOpenHelper extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG

private final android.content.Context mContext

private android.database.sqlite.SQLiteDatabase mDatabase

private final android.database.sqlite.SQLiteDatabase$CursorFactory mFactory

private boolean mIsInitializing

private final java.lang.String mName

private final int mNewVersion
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context
java.lang.String
android.database.sqlite.SQLiteDatabase$CursorFactory
int)

public void close()

public android.database.sqlite.SQLiteDatabase getReadableDatabase()

public android.database.sqlite.SQLiteDatabase getWritableDatabase()

public abstract void onCreate(
android.database.sqlite.SQLiteDatabase)

public void onOpen(
android.database.sqlite.SQLiteDatabase)

public abstract void onUpgrade(
android.database.sqlite.SQLiteDatabase
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/SearchRecentSuggestionsProvider; )
@dalvik.annotation.InnerClass (accessFlags =10 name =DatabaseHelper )
 class android.content.SearchRecentSuggestionsProvider$DatabaseHelper extends android.database.sqlite.SQLiteOpenHelper

----------------FIELDS----------------

private int mNewVersion
----------------METHODS----------------

public void <init>(
android.content.Context
int)

public void onCreate(
android.database.sqlite.SQLiteDatabase)

public void onUpgrade(
android.database.sqlite.SQLiteDatabase
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/SearchRecentSuggestionsProvider$DatabaseHelper; )
public class android.content.SearchRecentSuggestionsProvider extends android.content.ContentProvider

----------------FIELDS----------------

public static final int DATABASE_MODE_2LINES

public static final int DATABASE_MODE_QUERIES

private static final int DATABASE_VERSION

private static final java.lang.String NULL_COLUMN

private static final java.lang.String ORDER_BY

private static final java.lang.String TAG

private static final int URI_MATCH_SUGGEST

private static final java.lang.String sDatabaseName

private static final java.lang.String sSuggestions

private java.lang.String mAuthority

private int mMode

private android.database.sqlite.SQLiteOpenHelper mOpenHelper

private java.lang.String mSuggestSuggestionClause

private java.lang.String[] mSuggestionProjection

private android.net.Uri mSuggestionsUri

private boolean mTwoLineDisplay

private android.content.UriMatcher mUriMatcher
----------------METHODS----------------

public void <init>()

public int delete(
android.net.Uri
java.lang.String
java.lang.String[])

public java.lang.String getType(
android.net.Uri)

public android.net.Uri insert(
android.net.Uri
android.content.ContentValues)

public boolean onCreate()

public android.database.Cursor query(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)

protected void setupSuggestions(
java.lang.String
int)

public int update(
android.net.Uri
android.content.ContentValues
java.lang.String
java.lang.String[])

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnSharedPreferenceChangeListener )
@dalvik.annotation.EnclosingClass (value =Landroid/content/SharedPreferences; )
public abstract interface class android.content.SharedPreferences$OnSharedPreferenceChangeListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onSharedPreferenceChanged(
android.content.SharedPreferences
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =Transport )
@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncAdapter; )
 class android.content.SyncAdapter$Transport extends android.content.ISyncAdapter$Stub

----------------FIELDS----------------

final android.content.SyncAdapter this$0
----------------METHODS----------------

 void <init>(
android.content.SyncAdapter)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void cancelSync()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void startSync(
android.content.ISyncContext
java.lang.String
android.os.Bundle)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/SyncAdapter$Transport; )
public abstract class android.content.SyncAdapter extends java.lang.Object

----------------FIELDS----------------

public static final int LOG_SYNC_DETAILS

private static final java.lang.String TAG

 android.content.SyncAdapter$Transport mTransport
----------------METHODS----------------

public void <init>()

public abstract void cancelSync()

final android.content.ISyncAdapter getISyncAdapter()

public abstract void startSync(
android.content.SyncContext
java.lang.String
android.os.Bundle)

________________CLASS________________


public class android.content.SyncContext extends java.lang.Object

----------------FIELDS----------------

private static final long HEARTBEAT_SEND_INTERVAL_IN_MS

private long mLastHeartbeatSendTime

private android.content.ISyncContext mSyncContext
----------------METHODS----------------

public void <init>(
android.content.ISyncContext)

public android.content.ISyncContext getISyncContext()

public void onFinished(
android.content.SyncResult)

public void setStatusText(
java.lang.String)

public void updateHeartbeat()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncManager; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.content.SyncManager$1 extends android.content.BroadcastReceiver

----------------FIELDS----------------

final android.content.SyncManager this$0
----------------METHODS----------------

 void <init>(
android.content.SyncManager)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncManager; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.content.SyncManager$2 extends android.content.BroadcastReceiver

----------------FIELDS----------------

final android.content.SyncManager this$0
----------------METHODS----------------

 void <init>(
android.content.SyncManager)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.content.SyncManager$3 extends java.lang.Object implements android.accounts.AccountMonitorListener

----------------FIELDS----------------

final android.content.SyncManager this$0
----------------METHODS----------------

 void <init>(
android.content.SyncManager)

public void onAccountsUpdated(
java.lang.String[])

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.content.SyncManager$4 extends java.lang.Object implements java.util.Observer

----------------FIELDS----------------

final android.content.SyncManager this$0
----------------METHODS----------------

 void <init>(
android.content.SyncManager)

public void update(
java.util.Observable
java.lang.Object)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncManager; )
 class android.content.SyncManager$5 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$android$net$NetworkInfo$State
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =ActiveSyncContext )
@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncManager; )
 class android.content.SyncManager$ActiveSyncContext extends android.content.ISyncContext$Stub

----------------FIELDS----------------

final android.content.IContentProvider mContentProvider

final long mHistoryRowId

final long mStartTime

final android.content.ISyncAdapter mSyncAdapter

final android.content.SyncManager$SyncOperation mSyncOperation

 long mTimeoutStartTime

final android.content.SyncManager this$0
----------------METHODS----------------

public void <init>(
android.content.SyncManager
android.content.SyncManager$SyncOperation
android.content.IContentProvider
android.content.ISyncAdapter
long)

public void onFinished(
android.content.SyncResult)

public void sendHeartbeat()

public java.lang.String toString()

public void toString(
java.lang.StringBuilder)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncManager; )
@dalvik.annotation.InnerClass (accessFlags =0 name =SyncAlarmIntentReceiver )
 class android.content.SyncManager$SyncAlarmIntentReceiver extends android.content.BroadcastReceiver

----------------FIELDS----------------

final android.content.SyncManager this$0
----------------METHODS----------------

 void <init>(
android.content.SyncManager)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =SyncNotificationInfo )
@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncManager$SyncHandler; )
 class android.content.SyncManager$SyncHandler$SyncNotificationInfo extends java.lang.Object

----------------FIELDS----------------

public java.lang.String account

public java.lang.String authority

public boolean isActive

public java.lang.Long startTime

final android.content.SyncManager$SyncHandler this$1
----------------METHODS----------------

 void <init>(
android.content.SyncManager$SyncHandler)

public java.lang.String toString()

public void toString(
java.lang.StringBuilder)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncManager; )
@dalvik.annotation.MemberClasses (value =Landroid/content/SyncManager$SyncHandler$SyncNotificationInfo; )
@dalvik.annotation.InnerClass (accessFlags =0 name =SyncHandler )
 class android.content.SyncManager$SyncHandler extends android.os.Handler

----------------FIELDS----------------

private static final int MESSAGE_CHECK_ALARMS

private static final int MESSAGE_SYNC_ALARM

private static final int MESSAGE_SYNC_FINISHED

private java.lang.Long mAlarmScheduleTime

private boolean mErrorNotificationInstalled

public final android.content.SyncManager$SyncHandler$SyncNotificationInfo mSyncNotificationInfo

public final android.content.SyncManager$SyncTimeTracker mSyncTimeTracker

final android.content.SyncManager this$0
----------------METHODS----------------

public void <init>(
android.content.SyncManager
android.os.Looper)

static java.lang.Long access$1200(
android.content.SyncManager$SyncHandler)

private void handleSyncHandlerMessage(
android.os.Message)

private void installHandleTooManyDeletesNotification(
java.lang.String
java.lang.String
long)

private void manageErrorNotification()

private void manageSyncAlarm()

private void manageSyncNotification()

private void runStateIdle()

private void runStateSyncing()

private void runSyncFinishedOrCanceled(
android.content.SyncResult)

private void sendSyncStateIntent()

private int syncResultToErrorNumber(
android.content.SyncResult)

public void handleMessage(
android.os.Message)

public long insertStartSyncEvent(
android.content.SyncManager$SyncOperation)

public void stopSyncEvent(
long
android.content.SyncManager$SyncOperation
java.lang.String
int
int
long)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncManager; )
@dalvik.annotation.InnerClass (accessFlags =0 name =SyncHandlerMessagePayload )
 class android.content.SyncManager$SyncHandlerMessagePayload extends java.lang.Object

----------------FIELDS----------------

public final android.content.SyncManager$ActiveSyncContext activeSyncContext

public final android.content.SyncResult syncResult

final android.content.SyncManager this$0
----------------METHODS----------------

 void <init>(
android.content.SyncManager
android.content.SyncManager$ActiveSyncContext
android.content.SyncResult)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =SyncOperation )
@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncManager; )
 class android.content.SyncManager$SyncOperation extends java.lang.Object implements java.lang.Comparable

----------------FIELDS----------------

final java.lang.String account

 java.lang.String authority

 long delay

 long earliestRunTime

 android.os.Bundle extras

final java.lang.String key

 java.lang.Long rowId

 int syncSource
----------------METHODS----------------

 void <init>(
android.content.SyncManager$SyncOperation)

 void <init>(
java.lang.String
int
java.lang.String
android.os.Bundle
long)

private static void extrasToStringBuilder(
android.os.Bundle
java.lang.StringBuilder)

private java.lang.String toKey()

public int compareTo(
java.lang.Object)

public void setDelay(
long)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =SyncPollAlarmReceiver )
@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncManager; )
 class android.content.SyncManager$SyncPollAlarmReceiver extends android.content.BroadcastReceiver

----------------FIELDS----------------

final android.content.SyncManager this$0
----------------METHODS----------------

 void <init>(
android.content.SyncManager)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncManager; )
@dalvik.annotation.InnerClass (accessFlags =8 name =SyncQueue )
 class android.content.SyncManager$SyncQueue extends java.lang.Object

----------------FIELDS----------------

private static final int COLUMN_ACCOUNT

private static final int COLUMN_AUTHORITY

private static final int COLUMN_EXTRAS

private static final int COLUMN_ID

private static final int COLUMN_SOURCE

private static final boolean DEBUG_CHECK_DATA_CONSISTENCY

private final java.lang.String[] COLUMNS
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Landroid/content/SyncManager$SyncOperation;>; )
private final java.util.HashMap mOpsByKey
@dalvik.annotation.Signature (value =Ljava/util/PriorityQueue<Landroid/content/SyncManager$SyncOperation;>; )
private final java.util.PriorityQueue mOpsByWhen

private android.content.SyncStorageEngine mSyncStorageEngine
----------------METHODS----------------

public void <init>(
android.content.SyncStorageEngine)

private boolean add(
android.content.SyncManager$SyncOperation
boolean)

private android.content.SyncManager$SyncOperation cursorToOperation(
android.database.Cursor)

private void debugCheckDataStructures(
boolean)

public boolean add(
android.content.SyncManager$SyncOperation)

public void clear(
java.lang.String
java.lang.String)

public void dump(
java.lang.StringBuilder)

public android.content.SyncManager$SyncOperation head()

public void popHead()

public void removeByKey(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncManager; )
@dalvik.annotation.InnerClass (accessFlags =2 name =SyncTimeTracker )
 class android.content.SyncManager$SyncTimeTracker extends java.lang.Object

----------------FIELDS----------------

 boolean mLastWasSyncing

private long mTimeSpentSyncing

 long mWhenSyncStarted

final android.content.SyncManager this$0
----------------METHODS----------------

private void <init>(
android.content.SyncManager)

 void <init>(
android.content.SyncManager
android.content.SyncManager$1)

public long timeSpentSyncing()

public void update()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/SyncManager$5;Landroid/content/SyncManager$SyncQueue;Landroid/content/SyncManager$SyncHandler;Landroid/content/SyncManager$SyncTimeTracker;Landroid/content/SyncManager$ActiveSyncContext;Landroid/content/SyncManager$SyncOperation;Landroid/content/SyncManager$SyncPollAlarmReceiver;Landroid/content/SyncManager$SyncAlarmIntentReceiver;Landroid/content/SyncManager$SyncHandlerMessagePayload; )
 class android.content.SyncManager extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String ACTION_SYNC_ALARM

private static final long DEFAULT_MAX_SYNC_RETRY_TIME_IN_SECONDS

private static final long ERROR_NOTIFICATION_DELAY_MS

private static final java.lang.String HANDLE_SYNC_ALARM_WAKE_LOCK

private static final long INITIAL_SYNC_RETRY_TIME_IN_MS

private static final long LOCAL_SYNC_DELAY

private static final int MAX_SYNC_POLL_DELAY_SECONDS

private static final long MAX_TIME_PER_SYNC

private static final long MILLIS_IN_4WEEKS

private static final long MILLIS_IN_DAY

private static final long MILLIS_IN_HOUR

private static final long MILLIS_IN_WEEK

private static final int MIN_SYNC_POLL_DELAY_SECONDS

private static java.lang.String[] STATUS_PROJECTION

private static final java.lang.String SYNCMANAGER_PREFS_FILENAME

private static final java.lang.String[] SYNC_ACTIVE_PROJECTION

private static final long SYNC_NOTIFICATION_DELAY

private static final java.lang.String[] SYNC_PENDING_PROJECTION

private static final java.lang.String SYNC_POLL_ALARM

private static final java.lang.String SYNC_WAKE_LOCK

private static final java.lang.String TAG

private android.accounts.AccountMonitor mAccountMonitor

private volatile java.lang.String[] mAccounts

private android.content.SyncManager$ActiveSyncContext mActiveSyncContext

private android.app.AlarmManager mAlarmService

private android.content.BroadcastReceiver mConnectivityIntentReceiver

private android.content.ContentResolver mContentResolver

private android.content.Context mContext

private volatile boolean mDataConnectionIsConnected

private volatile android.os.PowerManager$WakeLock mHandleAlarmWakeLock

private long mHeartbeatTime

private boolean mNeedSyncActiveNotification

private boolean mNeedSyncErrorNotification

private final android.app.NotificationManager mNotificationMgr

private volatile android.content.pm.IPackageManager mPackageManager

private java.lang.String mStatusText

private android.content.BroadcastReceiver mStorageIntentReceiver

private volatile boolean mStorageIsLow

private final android.app.PendingIntent mSyncAlarmIntent

private final android.content.SyncManager$SyncHandler mSyncHandler

private final android.app.PendingIntent mSyncPollAlarmIntent

private volatile boolean mSyncPollInitialized

private final android.content.SyncManager$SyncQueue mSyncQueue

private android.provider.Sync$Settings$QueryMap mSyncSettings

private final android.content.SyncStorageEngine mSyncStorageEngine

private android.os.HandlerThread mSyncThread

private volatile android.os.PowerManager$WakeLock mSyncWakeLock
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context
boolean)

static void access$000(
android.content.SyncManager)

static boolean access$100(
android.content.SyncManager)

static void access$1000(
android.content.SyncManager)

static boolean access$102(
android.content.SyncManager
boolean)

static void access$1100(
android.content.SyncManager)

static android.os.PowerManager$WakeLock access$1400(
android.content.SyncManager)

static android.content.SyncManager$SyncQueue access$1500(
android.content.SyncManager)

static void access$1600(
android.content.SyncManager
android.content.SyncManager$SyncOperation)

static void access$1700(
android.content.SyncManager
java.lang.String)

static android.provider.Sync$Settings$QueryMap access$1800(
android.content.SyncManager)

static boolean access$1900(
android.content.SyncManager)

static void access$200(
android.content.SyncManager)

static android.content.ContentResolver access$2000(
android.content.SyncManager)

static long access$2100(
android.content.SyncManager
android.content.SyncManager$SyncOperation)

static android.app.NotificationManager access$2200(
android.content.SyncManager)

static boolean access$2300(
android.content.SyncManager)

static boolean access$2302(
android.content.SyncManager
boolean)

static boolean access$2400(
android.content.SyncManager)

static boolean access$2402(
android.content.SyncManager
boolean)

static android.content.SyncManager$SyncHandler access$2500(
android.content.SyncManager)

static void access$2600(
android.content.SyncManager)

static android.app.PendingIntent access$2700(
android.content.SyncManager)

static android.app.AlarmManager access$2800(
android.content.SyncManager)

static android.content.Context access$2900(
android.content.SyncManager)

static boolean access$300(
android.content.SyncManager)

static boolean access$302(
android.content.SyncManager
boolean)

static void access$400(
android.content.SyncManager)

static java.lang.String[] access$500(
android.content.SyncManager)

static java.lang.String[] access$502(
android.content.SyncManager
java.lang.String[])

static android.content.SyncManager$ActiveSyncContext access$600(
android.content.SyncManager)

static android.content.SyncManager$ActiveSyncContext access$602(
android.content.SyncManager
android.content.SyncManager$ActiveSyncContext)

static void access$700(
android.content.SyncManager
android.content.SyncManager$ActiveSyncContext
android.content.SyncResult)

static android.content.SyncStorageEngine access$800(
android.content.SyncManager)

static android.os.PowerManager$WakeLock access$900(
android.content.SyncManager)

private void dumpSyncHistoryFooter(
java.lang.StringBuilder)

private void dumpSyncHistoryHeader(
java.lang.StringBuilder
java.lang.String)

private void dumpSyncHistoryRow(
java.lang.StringBuilder
android.database.Cursor)

private void dumpSyncInterval(
java.lang.StringBuilder
java.lang.String
long
long
long)

private void dumpSyncIntervalFooter(
java.lang.StringBuilder)

private void dumpSyncIntervalHeader(
java.lang.StringBuilder)

private void dumpSyncPendingFooter(
java.lang.StringBuilder)

private void dumpSyncPendingHeader(
java.lang.StringBuilder)

private void dumpSyncPendingRow(
java.lang.StringBuilder
android.database.Cursor)

private void ensureAlarmService()

private void ensureContentResolver()

private android.content.pm.IPackageManager getPackageManager()

private android.provider.Sync$Settings$QueryMap getSyncSettings()

private void handleSyncPollAlarm()

private void initializeSyncPoll()

private boolean isSyncEnabled()

private long jitterize(
long
long)
@dalvik.annotation.Signature (value =(Landroid/net/Uri;Ljava/util/List<Ljava/lang/String;>;Ljava/util/List<Landroid/content/pm/ProviderInfo;>;)V )
private void populateProvidersList(
android.net.Uri
java.util.List
java.util.List)

private long readSyncPollTime()

private void rescheduleImmediately(
android.content.SyncManager$SyncOperation)

private long rescheduleWithDelay(
android.content.SyncManager$SyncOperation)

private void scheduleSyncPollAlarm(
long)

private void sendCheckAlarmsMessage()

private void sendSyncAlarmMessage()

private void sendSyncFinishedOrCanceledMessage(
android.content.SyncManager$ActiveSyncContext
android.content.SyncResult)

private void setStatusText(
java.lang.String)

private void writeSyncPollTime(
long)

public void cancelActiveSync(
android.net.Uri)

public void clearScheduledSyncOperations(
android.net.Uri)

protected void dump(
java.io.FileDescriptor
java.io.PrintWriter)

protected void dumpSyncHistory(
java.lang.StringBuilder)

protected void dumpSyncState(
java.lang.StringBuilder)

public android.content.SyncManager$ActiveSyncContext getActiveSyncContext()

public java.lang.String getSyncingAccount()

 void maybeRescheduleSync(
android.content.SyncResult
android.content.SyncManager$SyncOperation)

public void scheduleLocalSync(
android.net.Uri)

public void scheduleSync(
android.net.Uri
android.os.Bundle
long)

public void scheduleSyncOperation(
android.content.SyncManager$SyncOperation)

public void startSync(
android.net.Uri
android.os.Bundle)

public void updateHeartbeatTime()

________________CLASS________________


public class android.content.SyncProvider extends android.content.ContentProvider

----------------FIELDS----------------

private android.content.SyncStorageEngine mSyncStorageEngine
----------------METHODS----------------

public void <init>()

public int delete(
android.net.Uri
java.lang.String
java.lang.String[])

public java.lang.String getType(
android.net.Uri)

public android.net.Uri insert(
android.net.Uri
android.content.ContentValues)

public boolean onCreate()

public android.database.Cursor query(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)

public int update(
android.net.Uri
android.content.ContentValues
java.lang.String
java.lang.String[])

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncResult; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/SyncResult;>; )
final class android.content.SyncResult$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.SyncResult createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.SyncResult[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public final class android.content.SyncResult extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------

public static final android.content.SyncResult ALREADY_IN_PROGRESS
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/SyncResult;>; )
public static final android.os.Parcelable$Creator CREATOR

public boolean databaseError

public boolean fullSyncRequested

public boolean moreRecordsToGet

public boolean partialSyncUnavailable

public final android.content.SyncStats stats

public final boolean syncAlreadyInProgress

public boolean tooManyDeletions

public boolean tooManyRetries
----------------METHODS----------------

static void <clinit>()

public void <init>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.content.SyncResult$1)

private void <init>(
boolean)

public void clear()

public int describeContents()

public boolean hasError()

public boolean hasHardError()

public boolean hasSoftError()

public boolean madeSomeProgress()

public java.lang.String toDebugString()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =Provider )
@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncStateContentProviderHelper; )
 class android.content.SyncStateContentProviderHelper$Provider extends android.content.ContentProvider

----------------FIELDS----------------

final android.content.SyncStateContentProviderHelper this$0
----------------METHODS----------------

 void <init>(
android.content.SyncStateContentProviderHelper)

public int delete(
android.net.Uri
java.lang.String
java.lang.String[])

public java.lang.String getType(
android.net.Uri)

public android.net.Uri insert(
android.net.Uri
android.content.ContentValues)

public boolean onCreate()

public android.database.Cursor query(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)

public int update(
android.net.Uri
android.content.ContentValues
java.lang.String
java.lang.String[])

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/SyncStateContentProviderHelper$Provider; )
public class android.content.SyncStateContentProviderHelper extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String[] ACCOUNT_PROJECTION

private static final java.lang.String ACCOUNT_WHERE

private static final android.net.Uri CONTENT_URI

private static long DB_VERSION

private static final int STATE

private static final java.lang.String SYNC_STATE_AUTHORITY

private static final java.lang.String SYNC_STATE_TABLE

private static final android.content.UriMatcher sURIMatcher

private final android.content.SyncStateContentProviderHelper$Provider mInternalProviderInterface

final android.database.sqlite.SQLiteOpenHelper mOpenHelper
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.database.sqlite.SQLiteOpenHelper)

static android.content.UriMatcher access$000()

static android.net.Uri access$100()

public android.content.ContentProvider asContentProvider()

public void copySyncState(
android.database.sqlite.SQLiteDatabase
android.database.sqlite.SQLiteDatabase
java.lang.String)

public void createDatabase(
android.database.sqlite.SQLiteDatabase)

public void discardSyncData(
android.database.sqlite.SQLiteDatabase
java.lang.String)

public boolean matches(
android.net.Uri)

public void onAccountsChanged(
java.lang.String[])

protected void onDatabaseOpened(
android.database.sqlite.SQLiteDatabase)

public byte[] readSyncDataBytes(
android.database.sqlite.SQLiteDatabase
java.lang.String)

public void writeSyncDataBytes(
android.database.sqlite.SQLiteDatabase
java.lang.String
byte[])

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncStats; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/SyncStats;>; )
final class android.content.SyncStats$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.SyncStats createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.SyncStats[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.content.SyncStats extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/SyncStats;>; )
public static final android.os.Parcelable$Creator CREATOR

public long numAuthExceptions

public long numConflictDetectedExceptions

public long numDeletes

public long numEntries

public long numInserts

public long numIoExceptions

public long numParseExceptions

public long numSkippedEntries

public long numUpdates
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
android.os.Parcel)

public void clear()

public int describeContents()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncStorageEngine; )
@dalvik.annotation.InnerClass (accessFlags =2 name =DatabaseHelper )
 class android.content.SyncStorageEngine$DatabaseHelper extends android.database.sqlite.SQLiteOpenHelper

----------------FIELDS----------------

final android.content.SyncStorageEngine this$0
----------------METHODS----------------

 void <init>(
android.content.SyncStorageEngine
android.content.Context)

public void onCreate(
android.database.sqlite.SQLiteDatabase)

public void onOpen(
android.database.sqlite.SQLiteDatabase)

public void onUpgrade(
android.database.sqlite.SQLiteDatabase
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/SyncStorageEngine$DatabaseHelper; )
public class android.content.SyncStorageEngine extends java.lang.Object

----------------FIELDS----------------

private static final int ACTIVE
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>; )
private static final java.util.HashMap ACTIVE_PROJECTION_MAP

private static final java.lang.String DATABASE_NAME

private static final int DATABASE_VERSION

private static final int HISTORY

private static final int HISTORY_ID
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>; )
private static final java.util.HashMap HISTORY_PROJECTION_MAP

private static final int MAX_HISTORY_EVENTS_TO_KEEP

static final long MILLIS_IN_4WEEKS

private static final int PENDING
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>; )
private static final java.util.HashMap PENDING_PROJECTION_MAP

private static final java.lang.String SELECT_INITIAL_FAILURE_TIME_QUERY_STRING

private static final int SETTINGS

private static final int STATS

private static final java.lang.String[] STATS_ACCOUNT_PROJECTION

private static final int STATS_ID

private static final int STATUS
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>; )
private static final java.util.HashMap STATUS_PROJECTION_MAP

private static final java.lang.String TAG

private static android.content.SyncStorageEngine sSyncStorageEngine

private static final android.content.UriMatcher sURLMatcher

private final android.content.Context mContext

private final android.database.sqlite.SQLiteOpenHelper mOpenHelper
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.content.Context)

private static void checkCaller(
boolean
int)

private long createStatsRowIfNecessary(
java.lang.String
java.lang.String)

private void createStatusRowIfNecessary(
long)

public static android.content.SyncStorageEngine getSingleton()

public static void init(
android.content.Context)

public static android.content.SyncStorageEngine newTestInstance(
android.content.Context)

private boolean purgeOldHistoryEvents(
long)

private int updateActiveSync(
java.lang.String
java.lang.String
java.lang.Long)

 int clearPending()

public int delete(
boolean
android.net.Uri
java.lang.String
java.lang.String[])

 int deleteFromPending(
long)

protected void doDatabaseCleanup(
java.lang.String[])

public long getInitialSyncFailureTime()

public android.database.Cursor getPendingSyncsCursor(
java.lang.String[])

public java.lang.String getType(
android.net.Uri)

public android.net.Uri insert(
boolean
android.net.Uri
android.content.ContentValues)

protected android.net.Uri insertIntoPending(
android.content.ContentValues)

public long insertStartSyncEvent(
java.lang.String
java.lang.String
long
int)

public android.database.Cursor query(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)

protected void setActiveSync(
android.content.SyncManager$ActiveSyncContext)

public void stopSyncEvent(
long
long
java.lang.String
long
long)

public int update(
boolean
android.net.Uri
android.content.ContentValues
java.lang.String
java.lang.String[])

________________CLASS________________

@java.lang.Deprecated
public abstract interface class android.content.SyncUIContext extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.content.Context context()

public abstract void setStatusText(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.content.SyncableContentProvider$1 extends java.lang.Object implements android.accounts.AccountMonitorListener

----------------FIELDS----------------

final android.content.SyncableContentProvider this$0
----------------METHODS----------------

 void <init>(
android.content.SyncableContentProvider)

public void onAccountsUpdated(
java.lang.String[])

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/SyncableContentProvider; )
@dalvik.annotation.InnerClass (accessFlags =2 name =DatabaseHelper )
 class android.content.SyncableContentProvider$DatabaseHelper extends android.database.sqlite.SQLiteOpenHelper

----------------FIELDS----------------

final android.content.SyncableContentProvider this$0
----------------METHODS----------------

 void <init>(
android.content.SyncableContentProvider
android.content.Context
java.lang.String)

public void onCreate(
android.database.sqlite.SQLiteDatabase)

public void onOpen(
android.database.sqlite.SQLiteDatabase)

public void onUpgrade(
android.database.sqlite.SQLiteDatabase
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/SyncableContentProvider$DatabaseHelper; )
public abstract class android.content.SyncableContentProvider extends android.content.ContentProvider

----------------FIELDS----------------

private static final java.lang.String SYNC_ACCOUNT_WHERE_CLAUSE

private static final java.lang.String TAG

private static final java.lang.String[] sAccountProjection

private android.accounts.AccountMonitor mAccountMonitor

private boolean mContainsDiffs

private final android.net.Uri mContentUri

private android.content.AbstractTableMerger mCurrentMerger

private final java.lang.String mDatabaseName

private final int mDatabaseVersion

protected android.database.sqlite.SQLiteDatabase mDb

private boolean mIsMergeCancelled

private boolean mIsTemporary

protected android.database.sqlite.SQLiteOpenHelper mOpenHelper

private android.content.SyncStateContentProviderHelper mSyncState

private java.lang.String mSyncingAccount
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String
int
android.net.Uri)

static int access$000(
android.content.SyncableContentProvider)

static android.content.SyncStateContentProviderHelper access$100(
android.content.SyncableContentProvider)

static android.net.Uri access$200(
android.content.SyncableContentProvider)

protected void bootstrapDatabase(
android.database.sqlite.SQLiteDatabase)

public final int bulkInsert(
android.net.Uri
android.content.ContentValues[])

public boolean changeRequiresLocalSync(
android.net.Uri)

public void close()

public final int delete(
android.net.Uri
java.lang.String
java.lang.String[])

protected abstract int deleteInternal(
android.net.Uri
java.lang.String
java.lang.String[])
@dalvik.annotation.Signature (value =(Ljava/util/Map<Ljava/lang/String;Ljava/lang/Boolean;>;Ljava/lang/String;Ljava/lang/String;)V )
protected void deleteRowsForRemovedAccounts(
java.util.Map
java.lang.String
java.lang.String)

public boolean getContainsDiffs()

public android.database.sqlite.SQLiteDatabase getDatabase()
@dalvik.annotation.Signature (value =()Ljava/lang/Iterable<+Landroid/content/AbstractTableMerger;>; )
protected java.lang.Iterable getMergers()

public java.lang.String getSyncingAccount()

public android.content.SyncableContentProvider getTemporaryInstance()

public final android.net.Uri insert(
android.net.Uri
android.content.ContentValues)

protected abstract android.net.Uri insertInternal(
android.net.Uri
android.content.ContentValues)

public boolean isMergeCancelled()

protected boolean isTemporary()

public void merge(
android.content.SyncContext
android.content.SyncableContentProvider
android.content.TempProviderSyncResult
android.content.SyncResult)

protected void onAccountsChanged(
java.lang.String[])

public boolean onCreate()

protected void onDatabaseOpened(
android.database.sqlite.SQLiteDatabase)

public void onSyncCanceled()

public void onSyncStart(
android.content.SyncContext
java.lang.String)

public void onSyncStop(
android.content.SyncContext
boolean)

public final android.database.Cursor query(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)

protected abstract android.database.Cursor queryInternal(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)

public byte[] readSyncDataBytes(
java.lang.String)

public void setContainsDiffs(
boolean)

public final int update(
android.net.Uri
android.content.ContentValues
java.lang.String
java.lang.String[])

protected abstract int updateInternal(
android.net.Uri
android.content.ContentValues
java.lang.String
java.lang.String[])

protected abstract boolean upgradeDatabase(
android.database.sqlite.SQLiteDatabase
int
int)

public void wipeAccount(
java.lang.String)

public void writeSyncDataBytes(
java.lang.String
byte[])

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =SyncData )
@dalvik.annotation.EnclosingClass (value =Landroid/content/TempProviderSyncAdapter; )
public abstract class android.content.TempProviderSyncAdapter$SyncData extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =SyncThread )
@dalvik.annotation.EnclosingClass (value =Landroid/content/TempProviderSyncAdapter; )
 class android.content.TempProviderSyncAdapter$SyncThread extends java.lang.Thread

----------------FIELDS----------------

private final java.lang.String mAccount

private final android.os.Bundle mExtras

private volatile boolean mIsCanceled

private long[] mNetStats

private final android.content.SyncResult mResult

private final android.content.SyncContext mSyncContext

final android.content.TempProviderSyncAdapter this$0
----------------METHODS----------------

 void <init>(
android.content.TempProviderSyncAdapter
android.content.SyncContext
java.lang.String
android.os.Bundle)

private void runSyncLoop(
android.content.SyncContext
java.lang.String
android.os.Bundle)

private void sync(
android.content.SyncContext
java.lang.String
android.os.Bundle)

 void cancelSync()

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/TempProviderSyncAdapter$SyncThread;Landroid/content/TempProviderSyncAdapter$SyncData; )
public abstract class android.content.TempProviderSyncAdapter extends android.content.SyncAdapter

----------------FIELDS----------------

private static final int MAX_GET_SERVER_DIFFS_LOOP_COUNT

private static final int MAX_UPLOAD_CHANGES_LOOP_COUNT

private static final int NUM_ALLOWED_SIMULTANEOUS_DELETIONS

private static final long PERCENT_ALLOWED_SIMULTANEOUS_DELETIONS

private static final java.lang.String TAG

private volatile boolean mAdapterSyncStarted

private android.content.Context mContext

private volatile android.content.SyncableContentProvider mProvider

private volatile boolean mProviderSyncStarted

private volatile android.content.TempProviderSyncAdapter$SyncThread mSyncThread
----------------METHODS----------------

public void <init>(
android.content.SyncableContentProvider)

static boolean access$000(
android.content.TempProviderSyncAdapter)

static boolean access$002(
android.content.TempProviderSyncAdapter
boolean)

static boolean access$100(
android.content.TempProviderSyncAdapter)

static boolean access$102(
android.content.TempProviderSyncAdapter
boolean)

static android.content.SyncableContentProvider access$200(
android.content.TempProviderSyncAdapter)

static android.content.TempProviderSyncAdapter$SyncThread access$302(
android.content.TempProviderSyncAdapter
android.content.TempProviderSyncAdapter$SyncThread)

public void cancelSync()

protected java.lang.Object createSyncInfo()

public final android.content.Context getContext()

public abstract void getServerDiffs(
android.content.SyncContext
android.content.TempProviderSyncAdapter$SyncData
android.content.SyncableContentProvider
android.os.Bundle
java.lang.Object
android.content.SyncResult)

protected boolean hasTooManyDeletions(
android.content.SyncStats)

protected void initTempProvider(
android.content.SyncableContentProvider)

public abstract boolean isReadOnly()

protected void logSyncDetails(
long
long
android.content.SyncResult)

public android.content.TempProviderSyncAdapter$SyncData newSyncData()

public abstract void onAccountsChanged(
java.lang.String[])

public abstract void onSyncCanceled()

public abstract void onSyncEnding(
android.content.SyncContext
boolean)

public abstract void onSyncStarting(
android.content.SyncContext
java.lang.String
boolean
android.content.SyncResult)

public android.content.TempProviderSyncAdapter$SyncData readSyncData(
android.content.SyncableContentProvider)

public abstract void sendClientDiffs(
android.content.SyncContext
android.content.SyncableContentProvider
android.content.SyncableContentProvider
android.content.SyncResult
boolean)

public final void setContext(
android.content.Context)

public void startSync(
android.content.SyncContext
java.lang.String
android.os.Bundle)

public void writeSyncData(
android.content.TempProviderSyncAdapter$SyncData
android.content.SyncableContentProvider)

________________CLASS________________


public class android.content.TempProviderSyncResult extends java.lang.Object

----------------FIELDS----------------

public android.content.SyncableContentProvider tempContentProvider
----------------METHODS----------------

public void <init>()

________________CLASS________________


public class android.content.UriMatcher extends java.lang.Object

----------------FIELDS----------------

private static final int EXACT

public static final int NO_MATCH

private static final int NUMBER

static final java.util.regex.Pattern PATH_SPLIT_PATTERN

private static final int TEXT
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/content/UriMatcher;>; )
private java.util.ArrayList mChildren

private int mCode

private java.lang.String mText

private int mWhich
----------------METHODS----------------

static void <clinit>()

private void <init>()

public void <init>(
int)

public void addURI(
java.lang.String
java.lang.String
int)

public int match(
android.net.Uri)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/ActivityInfo; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/pm/ActivityInfo;>; )
final class android.content.pm.ActivityInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.pm.ActivityInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.pm.ActivityInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/pm/PackageItemInfo$DisplayNameComparator; )
public class android.content.pm.PackageItemInfo extends java.lang.Object

----------------FIELDS----------------

public int icon

public int labelRes

public android.os.Bundle metaData

public java.lang.String name

public java.lang.CharSequence nonLocalizedLabel

public java.lang.String packageName
----------------METHODS----------------

public void <init>()

public void <init>(
android.content.pm.PackageItemInfo)

protected void <init>(
android.os.Parcel)

protected void dumpBack(
android.util.Printer
java.lang.String)

protected void dumpFront(
android.util.Printer
java.lang.String)

public android.graphics.drawable.Drawable loadIcon(
android.content.pm.PackageManager)

public java.lang.CharSequence loadLabel(
android.content.pm.PackageManager)

public android.content.res.XmlResourceParser loadXmlMetaData(
android.content.pm.PackageManager
java.lang.String)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public class android.content.pm.ComponentInfo extends android.content.pm.PackageItemInfo

----------------FIELDS----------------

public android.content.pm.ApplicationInfo applicationInfo

public boolean enabled

public boolean exported

public java.lang.String processName
----------------METHODS----------------

public void <init>()

public void <init>(
android.content.pm.ComponentInfo)

protected void <init>(
android.os.Parcel)

protected void dumpBack(
android.util.Printer
java.lang.String)

protected void dumpFront(
android.util.Printer
java.lang.String)

public final int getIconResource()

public android.graphics.drawable.Drawable loadIcon(
android.content.pm.PackageManager)

public java.lang.CharSequence loadLabel(
android.content.pm.PackageManager)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public class android.content.pm.ActivityInfo extends android.content.pm.ComponentInfo implements android.os.Parcelable

----------------FIELDS----------------

public static final int CONFIG_FONT_SCALE

public static final int CONFIG_KEYBOARD

public static final int CONFIG_KEYBOARD_HIDDEN

public static final int CONFIG_LOCALE

public static final int CONFIG_MCC

public static final int CONFIG_MNC

public static final int CONFIG_NAVIGATION

public static final int CONFIG_ORIENTATION

public static final int CONFIG_TOUCHSCREEN
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/pm/ActivityInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final int FLAG_ALLOW_TASK_REPARENTING

public static final int FLAG_ALWAYS_RETAIN_TASK_STATE

public static final int FLAG_CLEAR_TASK_ON_LAUNCH

public static final int FLAG_EXCLUDE_FROM_RECENTS

public static final int FLAG_FINISH_ON_TASK_LAUNCH

public static final int FLAG_MULTIPROCESS

public static final int FLAG_STATE_NOT_NEEDED

public static final int LAUNCH_MULTIPLE

public static final int LAUNCH_SINGLE_INSTANCE

public static final int LAUNCH_SINGLE_TASK

public static final int LAUNCH_SINGLE_TOP

public static final int SCREEN_ORIENTATION_BEHIND

public static final int SCREEN_ORIENTATION_LANDSCAPE

public static final int SCREEN_ORIENTATION_NOSENSOR

public static final int SCREEN_ORIENTATION_PORTRAIT

public static final int SCREEN_ORIENTATION_SENSOR

public static final int SCREEN_ORIENTATION_UNSPECIFIED

public static final int SCREEN_ORIENTATION_USER

public int configChanges

public int flags

public int launchMode

public java.lang.String permission

public int screenOrientation

public java.lang.String targetActivity

public java.lang.String taskAffinity

public int theme
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
android.content.pm.ActivityInfo)

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.content.pm.ActivityInfo$1)

public int describeContents()

public void dump(
android.util.Printer
java.lang.String)

public final int getThemeResource()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/ApplicationInfo; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/pm/ApplicationInfo;>; )
final class android.content.pm.ApplicationInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.pm.ApplicationInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.pm.ApplicationInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =DisplayNameComparator )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/ApplicationInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Ljava/util/Comparator<Landroid/content/pm/ApplicationInfo;>; )
public class android.content.pm.ApplicationInfo$DisplayNameComparator extends java.lang.Object implements java.util.Comparator

----------------FIELDS----------------

private android.content.pm.PackageManager mPM

private final java.text.Collator sCollator
----------------METHODS----------------

public void <init>(
android.content.pm.PackageManager)

public final int compare(
android.content.pm.ApplicationInfo
android.content.pm.ApplicationInfo)

public volatile int compare(
java.lang.Object
java.lang.Object)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/pm/ApplicationInfo$DisplayNameComparator; )
public class android.content.pm.ApplicationInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/pm/ApplicationInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final int FLAG_ALLOW_CLEAR_USER_DATA

public static final int FLAG_ALLOW_TASK_REPARENTING

public static final int FLAG_DEBUGGABLE

public static final int FLAG_FACTORY_TEST

public static final int FLAG_HAS_CODE

public static final int FLAG_PERSISTENT

public static final int FLAG_SYSTEM

public java.lang.String className

public java.lang.String dataDir

public int descriptionRes

public boolean enabled

public int flags

public java.lang.String manageSpaceActivityName

public java.lang.String permission

public java.lang.String processName

public java.lang.String publicSourceDir

public java.lang.String[] sharedLibraryFiles

public java.lang.String sourceDir

public java.lang.String taskAffinity

public int theme

public int uid
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
android.content.pm.ApplicationInfo)

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.content.pm.ApplicationInfo$1)

public int describeContents()

public void dump(
android.util.Printer
java.lang.String)

public java.lang.CharSequence loadDescription(
android.content.pm.PackageManager)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/pm/IPackageDataObserver$Stub; )
public abstract interface class android.content.pm.IPackageDataObserver extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onRemoveCompleted(
java.lang.String
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/IPackageDataObserver$Stub; )
 class android.content.pm.IPackageDataObserver$Stub$Proxy extends java.lang.Object implements android.content.pm.IPackageDataObserver

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onRemoveCompleted(
java.lang.String
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/IPackageDataObserver; )
@dalvik.annotation.MemberClasses (value =Landroid/content/pm/IPackageDataObserver$Stub$Proxy; )
public abstract class android.content.pm.IPackageDataObserver$Stub extends android.os.Binder implements android.content.pm.IPackageDataObserver

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_onRemoveCompleted
----------------METHODS----------------

public void <init>()

public static android.content.pm.IPackageDataObserver asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/pm/IPackageDeleteObserver$Stub; )
public abstract interface class android.content.pm.IPackageDeleteObserver extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void packageDeleted(
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/IPackageDeleteObserver$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.content.pm.IPackageDeleteObserver$Stub$Proxy extends java.lang.Object implements android.content.pm.IPackageDeleteObserver

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void packageDeleted(
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/IPackageDeleteObserver; )
@dalvik.annotation.MemberClasses (value =Landroid/content/pm/IPackageDeleteObserver$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.content.pm.IPackageDeleteObserver$Stub extends android.os.Binder implements android.content.pm.IPackageDeleteObserver

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_packageDeleted
----------------METHODS----------------

public void <init>()

public static android.content.pm.IPackageDeleteObserver asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/pm/IPackageInstallObserver$Stub; )
public abstract interface class android.content.pm.IPackageInstallObserver extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void packageInstalled(
java.lang.String
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/IPackageInstallObserver$Stub; )
 class android.content.pm.IPackageInstallObserver$Stub$Proxy extends java.lang.Object implements android.content.pm.IPackageInstallObserver

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void packageInstalled(
java.lang.String
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/IPackageInstallObserver; )
@dalvik.annotation.MemberClasses (value =Landroid/content/pm/IPackageInstallObserver$Stub$Proxy; )
public abstract class android.content.pm.IPackageInstallObserver$Stub extends android.os.Binder implements android.content.pm.IPackageInstallObserver

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_packageInstalled
----------------METHODS----------------

public void <init>()

public static android.content.pm.IPackageInstallObserver asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/pm/IPackageManager$Stub; )
public abstract interface class android.content.pm.IPackageManager extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void addPackageToPreferred(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean addPermission(
android.content.pm.PermissionInfo)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void addPreferredActivity(
android.content.IntentFilter
int
android.content.ComponentName[]
android.content.ComponentName)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int checkPermission(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int checkSignatures(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int checkUidPermission(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void clearApplicationUserData(
java.lang.String
android.content.pm.IPackageDataObserver)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void clearPackagePreferredActivities(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void deleteApplicationCacheFiles(
java.lang.String
android.content.pm.IPackageDataObserver)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void deletePackage(
java.lang.String
android.content.pm.IPackageDeleteObserver
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void enterSafeMode()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void freeApplicationCache(
long
android.content.pm.IPackageDataObserver)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.pm.ActivityInfo getActivityInfo(
android.content.ComponentName
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/PermissionGroupInfo;>; )
public abstract java.util.List getAllPermissionGroups(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getApplicationEnabledSetting(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.pm.ApplicationInfo getApplicationInfo(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getComponentEnabledSetting(
android.content.ComponentName)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/ApplicationInfo;>; )
public abstract java.util.List getInstalledApplications(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/PackageInfo;>; )
public abstract java.util.List getInstalledPackages(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.pm.InstrumentationInfo getInstrumentationInfo(
android.content.ComponentName
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getNameForUid(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int[] getPackageGids(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.pm.PackageInfo getPackageInfo(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void getPackageSizeInfo(
java.lang.String
android.content.pm.IPackageStatsObserver)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getPackageUid(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String[] getPackagesForUid(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.pm.PermissionGroupInfo getPermissionGroupInfo(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.pm.PermissionInfo getPermissionInfo(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/ApplicationInfo;>; )
public abstract java.util.List getPersistentApplications(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/content/IntentFilter;>;Ljava/util/List<Landroid/content/ComponentName;>;Ljava/lang/String;)I )
public abstract int getPreferredActivities(
java.util.List
java.util.List
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/PackageInfo;>; )
public abstract java.util.List getPreferredPackages(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.pm.ActivityInfo getReceiverInfo(
android.content.ComponentName
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.pm.ServiceInfo getServiceInfo(
android.content.ComponentName
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean hasSystemUidErrors()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void installPackage(
android.net.Uri
android.content.pm.IPackageInstallObserver
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Ljava/lang/String;II)Ljava/util/List<Landroid/content/pm/ProviderInfo;>; )
public abstract java.util.List queryContentProviders(
java.lang.String
int
int)
@dalvik.annotation.Signature (value =(Ljava/lang/String;I)Ljava/util/List<Landroid/content/pm/InstrumentationInfo;>; )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.util.List queryInstrumentation(
java.lang.String
int)
@dalvik.annotation.Signature (value =(Landroid/content/Intent;Ljava/lang/String;I)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.util.List queryIntentActivities(
android.content.Intent
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Landroid/content/ComponentName;[Landroid/content/Intent;[Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;I)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
public abstract java.util.List queryIntentActivityOptions(
android.content.ComponentName
android.content.Intent[]
java.lang.String[]
android.content.Intent
java.lang.String
int)
@dalvik.annotation.Signature (value =(Landroid/content/Intent;Ljava/lang/String;I)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.util.List queryIntentReceivers(
android.content.Intent
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Landroid/content/Intent;Ljava/lang/String;I)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
public abstract java.util.List queryIntentServices(
android.content.Intent
java.lang.String
int)
@dalvik.annotation.Signature (value =(Ljava/lang/String;I)Ljava/util/List<Landroid/content/pm/PermissionInfo;>; )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.util.List queryPermissionsByGroup(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Ljava/util/List<Ljava/lang/String;>;Ljava/util/List<Landroid/content/pm/ProviderInfo;>;)V )
public abstract void querySyncProviders(
java.util.List
java.util.List)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void removePackageFromPreferred(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void removePermission(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.pm.ProviderInfo resolveContentProvider(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.pm.ResolveInfo resolveIntent(
android.content.Intent
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.pm.ResolveInfo resolveService(
android.content.Intent
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setApplicationEnabledSetting(
java.lang.String
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setComponentEnabledSetting(
android.content.ComponentName
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void systemReady()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/IPackageManager$Stub; )
 class android.content.pm.IPackageManager$Stub$Proxy extends java.lang.Object implements android.content.pm.IPackageManager

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void addPackageToPreferred(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean addPermission(
android.content.pm.PermissionInfo)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void addPreferredActivity(
android.content.IntentFilter
int
android.content.ComponentName[]
android.content.ComponentName)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int checkPermission(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int checkSignatures(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int checkUidPermission(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void clearApplicationUserData(
java.lang.String
android.content.pm.IPackageDataObserver)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void clearPackagePreferredActivities(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void deleteApplicationCacheFiles(
java.lang.String
android.content.pm.IPackageDataObserver)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void deletePackage(
java.lang.String
android.content.pm.IPackageDeleteObserver
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void enterSafeMode()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void freeApplicationCache(
long
android.content.pm.IPackageDataObserver)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.pm.ActivityInfo getActivityInfo(
android.content.ComponentName
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/PermissionGroupInfo;>; )
public java.util.List getAllPermissionGroups(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getApplicationEnabledSetting(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.pm.ApplicationInfo getApplicationInfo(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getComponentEnabledSetting(
android.content.ComponentName)
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/ApplicationInfo;>; )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.util.List getInstalledApplications(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/PackageInfo;>; )
public java.util.List getInstalledPackages(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.pm.InstrumentationInfo getInstrumentationInfo(
android.content.ComponentName
int)

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getNameForUid(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int[] getPackageGids(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.pm.PackageInfo getPackageInfo(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void getPackageSizeInfo(
java.lang.String
android.content.pm.IPackageStatsObserver)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getPackageUid(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String[] getPackagesForUid(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.pm.PermissionGroupInfo getPermissionGroupInfo(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.pm.PermissionInfo getPermissionInfo(
java.lang.String
int)
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/ApplicationInfo;>; )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.util.List getPersistentApplications(
int)
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/content/IntentFilter;>;Ljava/util/List<Landroid/content/ComponentName;>;Ljava/lang/String;)I )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getPreferredActivities(
java.util.List
java.util.List
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Landroid/content/pm/PackageInfo;>; )
public java.util.List getPreferredPackages(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.pm.ActivityInfo getReceiverInfo(
android.content.ComponentName
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.pm.ServiceInfo getServiceInfo(
android.content.ComponentName
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean hasSystemUidErrors()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void installPackage(
android.net.Uri
android.content.pm.IPackageInstallObserver
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Ljava/lang/String;II)Ljava/util/List<Landroid/content/pm/ProviderInfo;>; )
public java.util.List queryContentProviders(
java.lang.String
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Ljava/lang/String;I)Ljava/util/List<Landroid/content/pm/InstrumentationInfo;>; )
public java.util.List queryInstrumentation(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Landroid/content/Intent;Ljava/lang/String;I)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
public java.util.List queryIntentActivities(
android.content.Intent
java.lang.String
int)
@dalvik.annotation.Signature (value =(Landroid/content/ComponentName;[Landroid/content/Intent;[Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;I)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.util.List queryIntentActivityOptions(
android.content.ComponentName
android.content.Intent[]
java.lang.String[]
android.content.Intent
java.lang.String
int)
@dalvik.annotation.Signature (value =(Landroid/content/Intent;Ljava/lang/String;I)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.util.List queryIntentReceivers(
android.content.Intent
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Landroid/content/Intent;Ljava/lang/String;I)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
public java.util.List queryIntentServices(
android.content.Intent
java.lang.String
int)
@dalvik.annotation.Signature (value =(Ljava/lang/String;I)Ljava/util/List<Landroid/content/pm/PermissionInfo;>; )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.util.List queryPermissionsByGroup(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Ljava/util/List<Ljava/lang/String;>;Ljava/util/List<Landroid/content/pm/ProviderInfo;>;)V )
public void querySyncProviders(
java.util.List
java.util.List)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void removePackageFromPreferred(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void removePermission(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.pm.ProviderInfo resolveContentProvider(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.pm.ResolveInfo resolveIntent(
android.content.Intent
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.pm.ResolveInfo resolveService(
android.content.Intent
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setApplicationEnabledSetting(
java.lang.String
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setComponentEnabledSetting(
android.content.ComponentName
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void systemReady()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/pm/IPackageManager$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/IPackageManager; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.content.pm.IPackageManager$Stub extends android.os.Binder implements android.content.pm.IPackageManager

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_addPackageToPreferred

static final int TRANSACTION_addPermission

static final int TRANSACTION_addPreferredActivity

static final int TRANSACTION_checkPermission

static final int TRANSACTION_checkSignatures

static final int TRANSACTION_checkUidPermission

static final int TRANSACTION_clearApplicationUserData

static final int TRANSACTION_clearPackagePreferredActivities

static final int TRANSACTION_deleteApplicationCacheFiles

static final int TRANSACTION_deletePackage

static final int TRANSACTION_enterSafeMode

static final int TRANSACTION_freeApplicationCache

static final int TRANSACTION_getActivityInfo

static final int TRANSACTION_getAllPermissionGroups

static final int TRANSACTION_getApplicationEnabledSetting

static final int TRANSACTION_getApplicationInfo

static final int TRANSACTION_getComponentEnabledSetting

static final int TRANSACTION_getInstalledApplications

static final int TRANSACTION_getInstalledPackages

static final int TRANSACTION_getInstrumentationInfo

static final int TRANSACTION_getNameForUid

static final int TRANSACTION_getPackageGids

static final int TRANSACTION_getPackageInfo

static final int TRANSACTION_getPackageSizeInfo

static final int TRANSACTION_getPackageUid

static final int TRANSACTION_getPackagesForUid

static final int TRANSACTION_getPermissionGroupInfo

static final int TRANSACTION_getPermissionInfo

static final int TRANSACTION_getPersistentApplications

static final int TRANSACTION_getPreferredActivities

static final int TRANSACTION_getPreferredPackages

static final int TRANSACTION_getReceiverInfo

static final int TRANSACTION_getServiceInfo

static final int TRANSACTION_hasSystemUidErrors

static final int TRANSACTION_installPackage

static final int TRANSACTION_queryContentProviders

static final int TRANSACTION_queryInstrumentation

static final int TRANSACTION_queryIntentActivities

static final int TRANSACTION_queryIntentActivityOptions

static final int TRANSACTION_queryIntentReceivers

static final int TRANSACTION_queryIntentServices

static final int TRANSACTION_queryPermissionsByGroup

static final int TRANSACTION_querySyncProviders

static final int TRANSACTION_removePackageFromPreferred

static final int TRANSACTION_removePermission

static final int TRANSACTION_resolveContentProvider

static final int TRANSACTION_resolveIntent

static final int TRANSACTION_resolveService

static final int TRANSACTION_setApplicationEnabledSetting

static final int TRANSACTION_setComponentEnabledSetting

static final int TRANSACTION_systemReady
----------------METHODS----------------

public void <init>()

public static android.content.pm.IPackageManager asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/pm/IPackageStatsObserver$Stub; )
public abstract interface class android.content.pm.IPackageStatsObserver extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onGetStatsCompleted(
android.content.pm.PackageStats
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/IPackageStatsObserver$Stub; )
 class android.content.pm.IPackageStatsObserver$Stub$Proxy extends java.lang.Object implements android.content.pm.IPackageStatsObserver

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onGetStatsCompleted(
android.content.pm.PackageStats
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/IPackageStatsObserver; )
@dalvik.annotation.MemberClasses (value =Landroid/content/pm/IPackageStatsObserver$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.content.pm.IPackageStatsObserver$Stub extends android.os.Binder implements android.content.pm.IPackageStatsObserver

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_onGetStatsCompleted
----------------METHODS----------------

public void <init>()

public static android.content.pm.IPackageStatsObserver asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/InstrumentationInfo; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/pm/InstrumentationInfo;>; )
final class android.content.pm.InstrumentationInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.pm.InstrumentationInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.pm.InstrumentationInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.content.pm.InstrumentationInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/pm/InstrumentationInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public java.lang.String dataDir

public boolean functionalTest

public boolean handleProfiling

public java.lang.String publicSourceDir

public java.lang.String sourceDir

public java.lang.String targetPackage
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
android.content.pm.InstrumentationInfo)

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.content.pm.InstrumentationInfo$1)

public int describeContents()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PackageInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/pm/PackageInfo;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.content.pm.PackageInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.pm.PackageInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.pm.PackageInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.content.pm.PackageInfo extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/pm/PackageInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public android.content.pm.ActivityInfo[] activities

public android.content.pm.ApplicationInfo applicationInfo

public int[] gids

public android.content.pm.InstrumentationInfo[] instrumentation

public java.lang.String packageName

public android.content.pm.PermissionInfo[] permissions

public android.content.pm.ProviderInfo[] providers

public android.content.pm.ActivityInfo[] receivers

public java.lang.String[] requestedPermissions

public android.content.pm.ServiceInfo[] services

public android.content.pm.Signature[] signatures

public int versionCode

public java.lang.String versionName
----------------METHODS----------------

static void <clinit>()

public void <init>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.content.pm.PackageInfo$1)

public int describeContents()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Ljava/util/Comparator<Landroid/content/pm/PackageItemInfo;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PackageItemInfo; )
@dalvik.annotation.InnerClass (accessFlags =9 name =DisplayNameComparator )
public class android.content.pm.PackageItemInfo$DisplayNameComparator extends java.lang.Object implements java.util.Comparator

----------------FIELDS----------------

private android.content.pm.PackageManager mPM

private final java.text.Collator sCollator
----------------METHODS----------------

public void <init>(
android.content.pm.PackageManager)

public final int compare(
android.content.pm.PackageItemInfo
android.content.pm.PackageItemInfo)

public volatile int compare(
java.lang.Object
java.lang.Object)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PackageManager; )
@dalvik.annotation.InnerClass (accessFlags =9 name =NameNotFoundException )
public class android.content.pm.PackageManager$NameNotFoundException extends android.util.AndroidException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.Signature (value =<II:Landroid/content/pm/PackageParser$IntentInfo;>Ljava/lang/Object; )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PackageParser; )
@dalvik.annotation.InnerClass (accessFlags =9 name =Component )
public class android.content.pm.PackageParser$Component extends java.lang.Object

----------------FIELDS----------------

public android.content.ComponentName component
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<TII;>; )
public final java.util.ArrayList intents

public android.os.Bundle metaData

public final android.content.pm.PackageParser$Package owner
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Landroid/content/pm/PackageParser$Component<TII;>;)V )
public void <init>(
android.content.pm.PackageParser$Component)

public void <init>(
android.content.pm.PackageParser$Package)

________________CLASS________________

@dalvik.annotation.Signature (value =Landroid/content/pm/PackageParser$Component<Landroid/content/pm/PackageParser$ActivityIntentInfo;>; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Activity )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PackageParser; )
public final class android.content.pm.PackageParser$Activity extends android.content.pm.PackageParser$Component

----------------FIELDS----------------

public final android.content.pm.ActivityInfo info
----------------METHODS----------------

public void <init>(
android.content.pm.PackageParser$Package)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =IntentInfo )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PackageParser; )
public class android.content.pm.PackageParser$IntentInfo extends android.content.IntentFilter

----------------FIELDS----------------

public boolean hasDefault

public int icon

public int labelRes

public java.lang.CharSequence nonLocalizedLabel
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =ActivityIntentInfo )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PackageParser; )
public final class android.content.pm.PackageParser$ActivityIntentInfo extends android.content.pm.PackageParser$IntentInfo

----------------FIELDS----------------

public final android.content.pm.PackageParser$Activity activity
----------------METHODS----------------

public void <init>(
android.content.pm.PackageParser$Activity)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PackageParser; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Instrumentation )
public final class android.content.pm.PackageParser$Instrumentation extends android.content.pm.PackageParser$Component

----------------FIELDS----------------

public final android.content.pm.InstrumentationInfo info
----------------METHODS----------------

public void <init>(
android.content.pm.PackageParser$Package)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Package )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PackageParser; )
public final class android.content.pm.PackageParser$Package extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/content/pm/PackageParser$Activity;>; )
public final java.util.ArrayList activities

public final android.content.pm.ApplicationInfo applicationInfo
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/content/pm/PackageParser$Instrumentation;>; )
public final java.util.ArrayList instrumentation

public android.os.Bundle mAppMetaData

public java.lang.Object mExtras

public java.lang.String mPath

public int mPreferredOrder

public java.lang.String mSharedUserId

public android.content.pm.Signature[] mSignatures

public boolean mSystem

public int mVersionCode

public java.lang.String mVersionName

public final java.lang.String packageName
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/content/pm/PackageParser$PermissionGroup;>; )
public final java.util.ArrayList permissionGroups
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/content/pm/PackageParser$Permission;>; )
public final java.util.ArrayList permissions
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/content/pm/PackageParser$Provider;>; )
public final java.util.ArrayList providers
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/content/pm/PackageParser$Activity;>; )
public final java.util.ArrayList receivers
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/lang/String;>; )
public final java.util.ArrayList requestedPermissions
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/content/pm/PackageParser$Service;>; )
public final java.util.ArrayList services
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/lang/String;>; )
public final java.util.ArrayList usesLibraries

public java.lang.String[] usesLibraryFiles
----------------METHODS----------------

public void <init>(
java.lang.String)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Permission )
@dalvik.annotation.Signature (value =Landroid/content/pm/PackageParser$Component<Landroid/content/pm/PackageParser$IntentInfo;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PackageParser; )
public final class android.content.pm.PackageParser$Permission extends android.content.pm.PackageParser$Component

----------------FIELDS----------------

public android.content.pm.PackageParser$PermissionGroup group

public final android.content.pm.PermissionInfo info

public boolean tree
----------------METHODS----------------

public void <init>(
android.content.pm.PackageParser$Package)

public void <init>(
android.content.pm.PackageParser$Package
android.content.pm.PermissionInfo)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =PermissionGroup )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PackageParser; )
@dalvik.annotation.Signature (value =Landroid/content/pm/PackageParser$Component<Landroid/content/pm/PackageParser$IntentInfo;>; )
public final class android.content.pm.PackageParser$PermissionGroup extends android.content.pm.PackageParser$Component

----------------FIELDS----------------

public final android.content.pm.PermissionGroupInfo info
----------------METHODS----------------

public void <init>(
android.content.pm.PackageParser$Package)

public void <init>(
android.content.pm.PackageParser$Package
android.content.pm.PermissionGroupInfo)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PackageParser; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Provider )
public final class android.content.pm.PackageParser$Provider extends android.content.pm.PackageParser$Component

----------------FIELDS----------------

public final android.content.pm.ProviderInfo info

public boolean syncable
----------------METHODS----------------

public void <init>(
android.content.pm.PackageParser$Package)

public void <init>(
android.content.pm.PackageParser$Provider)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Service )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PackageParser; )
@dalvik.annotation.Signature (value =Landroid/content/pm/PackageParser$Component<Landroid/content/pm/PackageParser$ServiceIntentInfo;>; )
public final class android.content.pm.PackageParser$Service extends android.content.pm.PackageParser$Component

----------------FIELDS----------------

public final android.content.pm.ServiceInfo info
----------------METHODS----------------

public void <init>(
android.content.pm.PackageParser$Package)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PackageParser; )
@dalvik.annotation.InnerClass (accessFlags =25 name =ServiceIntentInfo )
public final class android.content.pm.PackageParser$ServiceIntentInfo extends android.content.pm.PackageParser$IntentInfo

----------------FIELDS----------------

public final android.content.pm.PackageParser$Service service
----------------METHODS----------------

public void <init>(
android.content.pm.PackageParser$Service)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/pm/PackageParser$ServiceIntentInfo;Landroid/content/pm/PackageParser$ActivityIntentInfo;Landroid/content/pm/PackageParser$IntentInfo;Landroid/content/pm/PackageParser$Instrumentation;Landroid/content/pm/PackageParser$Provider;Landroid/content/pm/PackageParser$Service;Landroid/content/pm/PackageParser$Activity;Landroid/content/pm/PackageParser$PermissionGroup;Landroid/content/pm/PackageParser$Permission;Landroid/content/pm/PackageParser$Component;Landroid/content/pm/PackageParser$Package; )
public class android.content.pm.PackageParser extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String ANDROID_RESOURCES

public static final int PARSE_CHATTY

public static final int PARSE_IGNORE_PROCESSES

public static final int PARSE_IS_SYSTEM

public static final int PARSE_MUST_BE_APK

private static final boolean RIGID_PARSER

private static final java.lang.String TAG
@dalvik.annotation.Signature (value =Ljava/lang/ref/WeakReference<[B>; )
private static java.lang.ref.WeakReference mReadBuffer

private static final java.lang.Object mSync

private java.lang.String mArchiveSourcePath

private int mParseError

private int mSdkVersion

private java.lang.String[] mSeparateProcesses
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String)

private static java.lang.String buildClassName(
java.lang.String
java.lang.CharSequence
java.lang.String[])

private static java.lang.String buildCompoundName(
java.lang.String
java.lang.CharSequence
java.lang.String
java.lang.String[])

private static java.lang.String buildProcessName(
java.lang.String
java.lang.String
java.lang.CharSequence
int
java.lang.String[]
java.lang.String[])

private static java.lang.String buildTaskAffinityName(
java.lang.String
java.lang.String
java.lang.CharSequence
java.lang.String[])

private static boolean copyNeeded(
int
android.content.pm.PackageParser$Package
android.os.Bundle)

public static final android.content.pm.ActivityInfo generateActivityInfo(
android.content.pm.PackageParser$Activity
int)

public static android.content.pm.ApplicationInfo generateApplicationInfo(
android.content.pm.PackageParser$Package
int)

public static final android.content.pm.InstrumentationInfo generateInstrumentationInfo(
android.content.pm.PackageParser$Instrumentation
int)

public static android.content.pm.PackageInfo generatePackageInfo(
android.content.pm.PackageParser$Package
int[]
int)

public static final android.content.pm.PermissionGroupInfo generatePermissionGroupInfo(
android.content.pm.PackageParser$PermissionGroup
int)

public static final android.content.pm.PermissionInfo generatePermissionInfo(
android.content.pm.PackageParser$Permission
int)

public static final android.content.pm.ProviderInfo generateProviderInfo(
android.content.pm.PackageParser$Provider
int)

public static final android.content.pm.ServiceInfo generateServiceInfo(
android.content.pm.PackageParser$Service
int)

private static final boolean isPackageFilename(
java.lang.String)

private java.security.cert.Certificate[] loadCertificates(
java.util.jar.JarFile
java.util.jar.JarEntry
byte[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private android.content.pm.PackageParser$Activity parseActivity(
android.content.pm.PackageParser$Package
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet
int
java.lang.String[]
boolean)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private android.content.pm.PackageParser$Activity parseActivityAlias(
android.content.pm.PackageParser$Package
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet
int
java.lang.String[]
boolean)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private boolean parseAllMetaData(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet
java.lang.String
android.content.pm.PackageParser$Component
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private boolean parseApplication(
android.content.pm.PackageParser$Package
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet
int
java.lang.String[])

private boolean parseComponentInfo(
android.content.pm.PackageParser$Package
int
android.content.pm.ComponentInfo
java.lang.String[]
java.lang.String
android.content.res.TypedArray
int
int
int
int
int)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private android.content.pm.PackageParser$Instrumentation parseInstrumentation(
android.content.pm.PackageParser$Package
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private boolean parseIntent(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet
android.content.pm.PackageParser$IntentInfo
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private android.os.Bundle parseMetaData(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet
android.os.Bundle
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private android.content.pm.PackageParser$Package parsePackage(
android.content.res.Resources
android.content.res.XmlResourceParser
int
java.lang.String[])

private boolean parsePackageItemInfo(
android.content.pm.PackageParser$Package
android.content.pm.PackageItemInfo
java.lang.String[]
java.lang.String
android.content.res.TypedArray
int
int
int)

public static java.lang.String parsePackageName(
java.lang.String
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/xmlpull/v1/XmlPullParserException; )
private static java.lang.String parsePackageName(
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet
int
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private android.content.pm.PackageParser$Permission parsePermission(
android.content.pm.PackageParser$Package
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private android.content.pm.PackageParser$PermissionGroup parsePermissionGroup(
android.content.pm.PackageParser$Package
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private android.content.pm.PackageParser$Permission parsePermissionTree(
android.content.pm.PackageParser$Package
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private android.content.pm.PackageParser$Provider parseProvider(
android.content.pm.PackageParser$Package
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet
int
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private boolean parseProviderTags(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet
android.content.pm.PackageParser$Provider
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private android.content.pm.PackageParser$Service parseService(
android.content.pm.PackageParser$Package
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet
int
java.lang.String[])

public static android.content.pm.Signature stringToSignature(
java.lang.String)

private static java.lang.String validateName(
java.lang.String
boolean)

public boolean collectCertificates(
android.content.pm.PackageParser$Package
int)

public int getParseError()

public android.content.pm.PackageParser$Package parsePackage(
java.io.File
java.lang.String
android.util.DisplayMetrics
int)

public void setSdkVersion(
int)

public void setSeparateProcesses(
java.lang.String[])

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PackageStats; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/pm/PackageStats;>; )
final class android.content.pm.PackageStats$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.pm.PackageStats createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.pm.PackageStats[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.content.pm.PackageStats extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/pm/PackageStats;>; )
public static final android.os.Parcelable$Creator CREATOR

public long cacheSize

public long codeSize

public long dataSize

public java.lang.String packageName
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.pm.PackageStats)

public void <init>(
android.os.Parcel)

public void <init>(
java.lang.String)

public int describeContents()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/pm/PermissionGroupInfo;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PermissionGroupInfo; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.content.pm.PermissionGroupInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.pm.PermissionGroupInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.pm.PermissionGroupInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.content.pm.PermissionGroupInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/pm/PermissionGroupInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public int descriptionRes

public java.lang.CharSequence nonLocalizedDescription
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
android.content.pm.PermissionGroupInfo)

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.content.pm.PermissionGroupInfo$1)

public int describeContents()

public java.lang.CharSequence loadDescription(
android.content.pm.PackageManager)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/PermissionInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/pm/PermissionInfo;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.content.pm.PermissionInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.pm.PermissionInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.pm.PermissionInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.content.pm.PermissionInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/pm/PermissionInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final int PROTECTION_DANGEROUS

public static final int PROTECTION_NORMAL

public static final int PROTECTION_SIGNATURE

public static final int PROTECTION_SIGNATURE_OR_SYSTEM

public int descriptionRes

public java.lang.String group

public java.lang.CharSequence nonLocalizedDescription

public int protectionLevel
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
android.content.pm.PermissionInfo)

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.content.pm.PermissionInfo$1)

public int describeContents()

public java.lang.CharSequence loadDescription(
android.content.pm.PackageManager)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/ProviderInfo; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/pm/ProviderInfo;>; )
final class android.content.pm.ProviderInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.pm.ProviderInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.pm.ProviderInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public final class android.content.pm.ProviderInfo extends android.content.pm.ComponentInfo implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/pm/ProviderInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public java.lang.String authority

public boolean grantUriPermissions

public int initOrder

public boolean isSyncable

public boolean multiprocess

public java.lang.String readPermission

public android.os.PatternMatcher[] uriPermissionPatterns

public java.lang.String writePermission
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
android.content.pm.ProviderInfo)

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.content.pm.ProviderInfo$1)

public int describeContents()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/ResolveInfo; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/pm/ResolveInfo;>; )
final class android.content.pm.ResolveInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.pm.ResolveInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.pm.ResolveInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Ljava/util/Comparator<Landroid/content/pm/ResolveInfo;>; )
@dalvik.annotation.InnerClass (accessFlags =9 name =DisplayNameComparator )
@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/ResolveInfo; )
public class android.content.pm.ResolveInfo$DisplayNameComparator extends java.lang.Object implements java.util.Comparator

----------------FIELDS----------------

private android.content.pm.PackageManager mPM

private final java.text.Collator sCollator
----------------METHODS----------------

public void <init>(
android.content.pm.PackageManager)

public final int compare(
android.content.pm.ResolveInfo
android.content.pm.ResolveInfo)

public volatile int compare(
java.lang.Object
java.lang.Object)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/pm/ResolveInfo$DisplayNameComparator; )
public class android.content.pm.ResolveInfo extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/pm/ResolveInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public android.content.pm.ActivityInfo activityInfo

public android.content.IntentFilter filter

public int icon

public boolean isDefault

public int labelRes

public int match

public java.lang.CharSequence nonLocalizedLabel

public int preferredOrder

public int priority

public android.content.pm.ServiceInfo serviceInfo

public int specificIndex
----------------METHODS----------------

static void <clinit>()

public void <init>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.content.pm.ResolveInfo$1)

public int describeContents()

public void dump(
android.util.Printer
java.lang.String)

public final int getIconResource()

public android.graphics.drawable.Drawable loadIcon(
android.content.pm.PackageManager)

public java.lang.CharSequence loadLabel(
android.content.pm.PackageManager)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/ServiceInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/pm/ServiceInfo;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.content.pm.ServiceInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.pm.ServiceInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.pm.ServiceInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.content.pm.ServiceInfo extends android.content.pm.ComponentInfo implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/pm/ServiceInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public java.lang.String permission
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
android.content.pm.ServiceInfo)

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.content.pm.ServiceInfo$1)

public int describeContents()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/pm/Signature; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/pm/Signature;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.content.pm.Signature$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.pm.Signature createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.pm.Signature[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.content.pm.Signature extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/pm/Signature;>; )
public static final android.os.Parcelable$Creator CREATOR

private int mHashCode

private boolean mHaveHashCode

private final byte[] mSignature

private java.lang.String mString
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.content.pm.Signature$1)

public void <init>(
java.lang.String)

public void <init>(
byte[])

public int describeContents()

public boolean equals(
java.lang.Object)

public int hashCode()

public byte[] toByteArray()

public char[] toChars()

public char[] toChars(
char[]
int[])

public java.lang.String toCharsString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public class android.content.res.AssetFileDescriptor extends java.lang.Object

----------------FIELDS----------------

private final android.os.ParcelFileDescriptor mFd

private final long mLength

private final long mStartOffset
----------------METHODS----------------

public void <init>(
android.os.ParcelFileDescriptor
long
long)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()

public java.io.FileDescriptor getFileDescriptor()

public long getLength()

public android.os.ParcelFileDescriptor getParcelFileDescriptor()

public long getStartOffset()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/content/res/AssetManager; )
 class android.content.res.AssetManager$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =17 name =AssetInputStream )
@dalvik.annotation.EnclosingClass (value =Landroid/content/res/AssetManager; )
public final class android.content.res.AssetManager$AssetInputStream extends java.io.InputStream

----------------FIELDS----------------

private int mAsset

private long mLength

private long mMarkPos

final android.content.res.AssetManager this$0
----------------METHODS----------------

private void <init>(
android.content.res.AssetManager
int)

 void <init>(
android.content.res.AssetManager
int
android.content.res.AssetManager$1)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final int available()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final void close()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public final int getAssetInt()

public final void mark(
int)

public final boolean markSupported()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final int read()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final int read(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final int read(
byte[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final void reset()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final long skip(
long)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/res/AssetManager$1;Landroid/content/res/AssetManager$AssetInputStream; )
public final class android.content.res.AssetManager extends java.lang.Object

----------------FIELDS----------------

public static final int ACCESS_BUFFER

public static final int ACCESS_RANDOM

public static final int ACCESS_STREAMING

public static final int ACCESS_UNKNOWN

static final int STYLE_ASSET_COOKIE

static final int STYLE_CHANGING_CONFIGURATIONS

static final int STYLE_DATA

static final int STYLE_NUM_ENTRIES

static final int STYLE_RESOURCE_ID

static final int STYLE_TYPE

private static final java.lang.String TAG

private static final boolean localLOGV

private static final long[] mOffsets

private static final java.lang.Object mSync

private static android.content.res.AssetManager mSystem

private static final android.util.TypedValue mValue

private java.lang.String mAppName

private java.lang.String mAssetDir

private int mNumRefs

private int mObject

private boolean mOpen

private android.content.res.StringBlock[] mStringBlocks
----------------METHODS----------------

static void <clinit>()

public void <init>()

private void <init>(
boolean)

static long access$100(
android.content.res.AssetManager
int)

static int access$200(
android.content.res.AssetManager
int)

static long access$300(
android.content.res.AssetManager
int)

static java.lang.Object access$400()

static void access$500(
android.content.res.AssetManager
int)

static void access$600(
android.content.res.AssetManager)

static long access$700(
android.content.res.AssetManager
int
long
int)

static int access$800(
android.content.res.AssetManager
int
byte[]
int
int)

static final native boolean applyStyle(
int
int
int
int
int[]
int[]
int[])

static final native void applyThemeStyle(
int
int
boolean)

static final native void copyTheme(
int
int)

private final void decRefsLocked()

private final native void deleteTheme(
int)

private final native void destroy()

private final native void destroyAsset(
int)

static final native void dumpTheme(
int
int
java.lang.String
java.lang.String)

private static void ensureSystemAssets()

private final native int[] getArrayStringInfo(
int)

private final native java.lang.String[] getArrayStringResource(
int)

private final native long getAssetLength(
int)

private final native long getAssetRemainingLength(
int)

public static final native int getGlobalAssetCount()

public static final native int getGlobalAssetManagerCount()

private final native int getNativeStringBlock(
int)

private final native int getStringBlockCount()

public static android.content.res.AssetManager getSystem()

private final native void init()

private final native int loadResourceBagValue(
int
int
android.util.TypedValue
boolean)

private final native int loadResourceValue(
int
android.util.TypedValue
boolean)

static final native int loadThemeAttributeValue(
int
int
android.util.TypedValue
boolean)

private final void makeStringBlocks(
boolean)

private final native int newTheme()

private final native int openAsset(
java.lang.String
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private final native android.os.ParcelFileDescriptor openAssetFd(
java.lang.String
long[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native android.os.ParcelFileDescriptor openNonAssetFdNative(
int
java.lang.String
long[])

private final native int openNonAssetNative(
int
java.lang.String
int)

private final native int openXmlAssetNative(
int
java.lang.String)

private final native int readAsset(
int
byte[]
int
int)

private final native int readAssetChar(
int)

private final native long seekAsset(
int
long
int)

public final native int addAssetPath(
java.lang.String)

public void close()

final int createTheme()

final void ensureStringBlocks()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

final native int[] getArrayIntResource(
int)

final native int getArraySize(
int)

public final native java.lang.String getCookieName(
int)

public final native java.lang.String[] getLocales()

final java.lang.CharSequence getPooledString(
int
int)

final java.lang.CharSequence getResourceBagText(
int
int)

final native java.lang.String getResourceEntryName(
int)

final native int getResourceIdentifier(
java.lang.String
java.lang.String
java.lang.String)

final native java.lang.String getResourceName(
int)

final native java.lang.String getResourcePackageName(
int)

final java.lang.String[] getResourceStringArray(
int)

final java.lang.CharSequence getResourceText(
int)

final java.lang.CharSequence[] getResourceTextArray(
int)

final native java.lang.String getResourceTypeName(
int)

final boolean getResourceValue(
int
android.util.TypedValue
boolean)

final boolean getThemeValue(
int
int
android.util.TypedValue
boolean)

public final native boolean isUpToDate()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final native java.lang.String[] list(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final java.io.InputStream open(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final java.io.InputStream open(
java.lang.String
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final android.content.res.AssetFileDescriptor openFd(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final java.io.InputStream openNonAsset(
int
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final java.io.InputStream openNonAsset(
int
java.lang.String
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final java.io.InputStream openNonAsset(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final java.io.InputStream openNonAsset(
java.lang.String
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final android.content.res.AssetFileDescriptor openNonAssetFd(
int
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final android.content.res.AssetFileDescriptor openNonAssetFd(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
final android.content.res.XmlBlock openXmlBlockAsset(
int
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
final android.content.res.XmlBlock openXmlBlockAsset(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final android.content.res.XmlResourceParser openXmlResourceParser(
int
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final android.content.res.XmlResourceParser openXmlResourceParser(
java.lang.String)

final void releaseTheme(
int)

final native int retrieveArray(
int
int[])

final native boolean retrieveAttributes(
int
int[]
int[]
int[])

public final native void setConfiguration(
int
int
java.lang.String
int
int
int
int
int
int
int
int
int)

public final native void setLocale(
java.lang.String)

 void xmlBlockGone()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/res/ColorStateList;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/content/res/ColorStateList; )
final class android.content.res.ColorStateList$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.res.ColorStateList createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.res.ColorStateList[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.content.res.ColorStateList extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/res/ColorStateList;>; )
public static final android.os.Parcelable$Creator CREATOR

private static final int[][] EMPTY
@dalvik.annotation.Signature (value =Landroid/util/SparseArray<Ljava/lang/ref/WeakReference<Landroid/content/res/ColorStateList;>;>; )
private static final android.util.SparseArray sCache

private int[] mColors

private int mDefaultColor

private int[][] mStateSpecs
----------------METHODS----------------

static void <clinit>()

private void <init>()

public void <init>(
int[][]
int[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static android.content.res.ColorStateList createFromXml(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private static android.content.res.ColorStateList createFromXmlInner(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private void inflate(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

public static android.content.res.ColorStateList valueOf(
int)

public int describeContents()

public int getColorForState(
int[]
int)

public int getDefaultColor()

public boolean isStateful()

public java.lang.String toString()

public android.content.res.ColorStateList withAlpha(
int)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/content/res/Configuration;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/content/res/Configuration; )
final class android.content.res.Configuration$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.content.res.Configuration createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.content.res.Configuration[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable;Ljava/lang/Comparable<Landroid/content/res/Configuration;>; )
public final class android.content.res.Configuration extends java.lang.Object implements android.os.Parcelable, java.lang.Comparable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/content/res/Configuration;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final int KEYBOARDHIDDEN_NO

public static final int KEYBOARDHIDDEN_UNDEFINED

public static final int KEYBOARDHIDDEN_YES

public static final int KEYBOARD_12KEY

public static final int KEYBOARD_NOKEYS

public static final int KEYBOARD_QWERTY

public static final int KEYBOARD_UNDEFINED

public static final int NAVIGATION_DPAD

public static final int NAVIGATION_NONAV

public static final int NAVIGATION_TRACKBALL

public static final int NAVIGATION_UNDEFINED

public static final int NAVIGATION_WHEEL

public static final int ORIENTATION_LANDSCAPE

public static final int ORIENTATION_PORTRAIT

public static final int ORIENTATION_SQUARE

public static final int ORIENTATION_UNDEFINED

public static final int TOUCHSCREEN_FINGER

public static final int TOUCHSCREEN_NOTOUCH

public static final int TOUCHSCREEN_STYLUS

public static final int TOUCHSCREEN_UNDEFINED

public float fontScale

public int keyboard

public int keyboardHidden

public java.util.Locale locale

public int mcc

public int mnc

public int navigation

public int orientation

public int touchscreen
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
android.content.res.Configuration)

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.content.res.Configuration$1)

public static boolean needNewResources(
int
int)

public int compareTo(
android.content.res.Configuration)

public volatile int compareTo(
java.lang.Object)

public int describeContents()

public int diff(
android.content.res.Configuration)

public boolean equals(
android.content.res.Configuration)

public boolean equals(
java.lang.Object)

public int hashCode()
@java.lang.Deprecated
public void makeDefault()

public void setToDefaults()

public java.lang.String toString()

public int updateFrom(
android.content.res.Configuration)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/res/PluralRules; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.content.res.PluralRules$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/res/PluralRules$1;Landroid/content/res/PluralRules$en;Landroid/content/res/PluralRules$cs; )
abstract class android.content.res.PluralRules extends java.lang.Object

----------------FIELDS----------------

static final int ID_OTHER

static final int QUANTITY_FEW

static final int QUANTITY_MANY

static final int QUANTITY_ONE

static final int QUANTITY_OTHER

static final int QUANTITY_TWO

static final int QUANTITY_ZERO

private static android.content.res.PluralRules cs

private static android.content.res.PluralRules en
----------------METHODS----------------

 void <init>()

static final int attrForQuantity(
int)

static final android.content.res.PluralRules ruleForLocale(
java.util.Locale)

static final java.lang.String stringForQuantity(
int)

final int attrForNumber(
int)

abstract int quantityForNumber(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/res/PluralRules; )
@dalvik.annotation.InnerClass (accessFlags =10 name =cs )
 class android.content.res.PluralRules$cs extends android.content.res.PluralRules

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

 void <init>(
android.content.res.PluralRules$1)

 int quantityForNumber(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =en )
@dalvik.annotation.EnclosingClass (value =Landroid/content/res/PluralRules; )
 class android.content.res.PluralRules$en extends android.content.res.PluralRules

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

 void <init>(
android.content.res.PluralRules$1)

 int quantityForNumber(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/res/Resources; )
@dalvik.annotation.InnerClass (accessFlags =9 name =NotFoundException )
public class android.content.res.Resources$NotFoundException extends java.lang.RuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/res/Resources; )
@dalvik.annotation.InnerClass (accessFlags =17 name =Theme )
public final class android.content.res.Resources$Theme extends java.lang.Object

----------------FIELDS----------------

private final android.content.res.AssetManager mAssets

private final int mTheme

final android.content.res.Resources this$0
----------------METHODS----------------

 void <init>(
android.content.res.Resources)

public void applyStyle(
int
boolean)

public void dump(
int
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public android.content.res.TypedArray obtainStyledAttributes(
int
int[])

public android.content.res.TypedArray obtainStyledAttributes(
android.util.AttributeSet
int[]
int
int)

public android.content.res.TypedArray obtainStyledAttributes(
int[])

public boolean resolveAttribute(
int
android.util.TypedValue
boolean)

public void setTo(
android.content.res.Resources$Theme)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$NotFoundException; )
public class android.content.res.Resources extends java.lang.Object

----------------FIELDS----------------

private static final boolean DEBUG_CONFIG

private static final boolean DEBUG_LOAD

static final java.lang.String TAG

private static boolean mPreloaded
@dalvik.annotation.Signature (value =Landroid/util/SparseArray<Landroid/graphics/drawable/Drawable$ConstantState;>; )
private static final android.util.SparseArray mPreloadedDrawables

private static final java.lang.Object mSync

private static android.content.res.Resources mSystem

private static final int sSdkVersion

final android.content.res.AssetManager mAssets

 android.content.res.TypedArray mCachedStyledAttributes

private final int[] mCachedXmlBlockIds

private final android.content.res.XmlBlock[] mCachedXmlBlocks
@dalvik.annotation.Signature (value =Landroid/util/SparseArray<Ljava/lang/ref/WeakReference<Landroid/content/res/ColorStateList;>;>; )
private final android.util.SparseArray mColorStateListCache

private final android.content.res.Configuration mConfiguration
@dalvik.annotation.Signature (value =Landroid/util/SparseArray<Ljava/lang/ref/WeakReference<Landroid/graphics/drawable/Drawable$ConstantState;>;>; )
private final android.util.SparseArray mDrawableCache

private int mLastCachedXmlBlockIndex

final android.util.DisplayMetrics mMetrics

 android.content.res.PluralRules mPluralRule

private boolean mPreloading

final android.util.TypedValue mTmpValue
----------------METHODS----------------

static void <clinit>()

private void <init>()

public void <init>(
android.content.res.AssetManager
android.util.DisplayMetrics
android.content.res.Configuration)

static android.content.res.TypedArray access$000(
android.content.res.Resources
int)

private android.content.res.ColorStateList getCachedColorStateList(
int)

private final android.graphics.drawable.Drawable getCachedDrawable(
int)

private android.content.res.TypedArray getCachedStyledAttributes(
int)

private android.content.res.PluralRules getPluralRule()

public static android.content.res.Resources getSystem()

public final void finishPreloading()

public final void flushLayoutCache()
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public android.content.res.XmlResourceParser getAnimation(
int)

public final android.content.res.AssetManager getAssets()
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public int getColor(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public android.content.res.ColorStateList getColorStateList(
int)

public android.content.res.Configuration getConfiguration()
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public float getDimension(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public int getDimensionPixelOffset(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public int getDimensionPixelSize(
int)

public android.util.DisplayMetrics getDisplayMetrics()
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public android.graphics.drawable.Drawable getDrawable(
int)

public int getIdentifier(
java.lang.String
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public int[] getIntArray(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public int getInteger(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public android.content.res.XmlResourceParser getLayout(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public android.graphics.Movie getMovie(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public java.lang.String getQuantityString(
int
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public transient java.lang.String getQuantityString(
int
int
java.lang.Object[])
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public java.lang.CharSequence getQuantityText(
int
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public java.lang.String getResourceEntryName(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public java.lang.String getResourceName(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public java.lang.String getResourcePackageName(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public java.lang.String getResourceTypeName(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public java.lang.String getString(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public transient java.lang.String getString(
int
java.lang.Object[])
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public java.lang.String[] getStringArray(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public java.lang.CharSequence getText(
int)

public java.lang.CharSequence getText(
int
java.lang.CharSequence)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public java.lang.CharSequence[] getTextArray(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public void getValue(
int
android.util.TypedValue
boolean)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public void getValue(
java.lang.String
android.util.TypedValue
boolean)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public android.content.res.XmlResourceParser getXml(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
 android.content.res.ColorStateList loadColorStateList(
android.util.TypedValue
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
 android.graphics.drawable.Drawable loadDrawable(
android.util.TypedValue
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
 android.content.res.XmlResourceParser loadXmlResourceParser(
int
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
 android.content.res.XmlResourceParser loadXmlResourceParser(
java.lang.String
int
int
java.lang.String)

public final android.content.res.Resources$Theme newTheme()

public android.content.res.TypedArray obtainAttributes(
android.util.AttributeSet
int[])
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public android.content.res.TypedArray obtainTypedArray(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public java.io.InputStream openRawResource(
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public android.content.res.AssetFileDescriptor openRawResourceFd(
int)

public final void startPreloading()

public void updateConfiguration(
android.content.res.Configuration
android.util.DisplayMetrics)

________________CLASS________________


public abstract interface class android.text.style.ParagraphStyle extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________


public abstract interface class android.text.style.WrapTogetherSpan extends java.lang.Object implements android.text.style.ParagraphStyle

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________


public abstract interface class android.text.style.LineHeightSpan extends java.lang.Object implements android.text.style.ParagraphStyle, android.text.style.WrapTogetherSpan

----------------FIELDS----------------
----------------METHODS----------------

public abstract void chooseHeight(
java.lang.CharSequence
int
int
int
int
android.graphics.Paint$FontMetricsInt)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Height )
@dalvik.annotation.EnclosingClass (value =Landroid/content/res/StringBlock; )
 class android.content.res.StringBlock$Height extends java.lang.Object implements android.text.style.LineHeightSpan

----------------FIELDS----------------

private static float sProportion

private int mSize
----------------METHODS----------------

static void <clinit>()

public void <init>(
int)

public void chooseHeight(
java.lang.CharSequence
int
int
int
int
android.graphics.Paint$FontMetricsInt)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =24 name =StyleIDs )
@dalvik.annotation.EnclosingClass (value =Landroid/content/res/StringBlock; )
final class android.content.res.StringBlock$StyleIDs extends java.lang.Object

----------------FIELDS----------------

private int bigId

private int boldId

private int italicId

private int listItemId

private int smallId

private int strikeId

private int subId

private int supId

private int ttId

private int underlineId
----------------METHODS----------------

 void <init>()

static int access$000(
android.content.res.StringBlock$StyleIDs)

static int access$002(
android.content.res.StringBlock$StyleIDs
int)

static int access$100(
android.content.res.StringBlock$StyleIDs)

static int access$102(
android.content.res.StringBlock$StyleIDs
int)

static int access$200(
android.content.res.StringBlock$StyleIDs)

static int access$202(
android.content.res.StringBlock$StyleIDs
int)

static int access$300(
android.content.res.StringBlock$StyleIDs)

static int access$302(
android.content.res.StringBlock$StyleIDs
int)

static int access$400(
android.content.res.StringBlock$StyleIDs)

static int access$402(
android.content.res.StringBlock$StyleIDs
int)

static int access$500(
android.content.res.StringBlock$StyleIDs)

static int access$502(
android.content.res.StringBlock$StyleIDs
int)

static int access$600(
android.content.res.StringBlock$StyleIDs)

static int access$602(
android.content.res.StringBlock$StyleIDs
int)

static int access$700(
android.content.res.StringBlock$StyleIDs)

static int access$702(
android.content.res.StringBlock$StyleIDs
int)

static int access$800(
android.content.res.StringBlock$StyleIDs)

static int access$802(
android.content.res.StringBlock$StyleIDs
int)

static int access$900(
android.content.res.StringBlock$StyleIDs)

static int access$902(
android.content.res.StringBlock$StyleIDs
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/res/StringBlock$Height;Landroid/content/res/StringBlock$StyleIDs; )
final class android.content.res.StringBlock extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG

private static final boolean localLOGV

private final int mNative

private final boolean mOwnsNative
@dalvik.annotation.Signature (value =Landroid/util/SparseArray<Ljava/lang/CharSequence;>; )
private android.util.SparseArray mSparseStrings

private java.lang.CharSequence[] mStrings

 android.content.res.StringBlock$StyleIDs mStyleIDs

private final boolean mUseSparse
----------------METHODS----------------

 void <init>(
int
boolean)

public void <init>(
byte[]
int
int
boolean)

public void <init>(
byte[]
boolean)

private java.lang.CharSequence applyStyles(
java.lang.String
int[]
android.content.res.StringBlock$StyleIDs)

private static final native int nativeCreate(
byte[]
int
int)

private static final native void nativeDestroy(
int)

private static final native int nativeGetSize(
int)

private static final native java.lang.String nativeGetString(
int
int)

private static final native int[] nativeGetStyle(
int
int)

private static final native int nativeIndexOfString(
int
java.lang.String)

private static java.lang.String subtag(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public java.lang.CharSequence get(
int)

________________CLASS________________


public class android.content.res.TypedArray extends java.lang.Object

----------------FIELDS----------------

 int[] mData

 int[] mIndices

 int mLength

private final android.content.res.Resources mResources

 int[] mRsrcs

private android.util.TypedValue mValue

 android.content.res.XmlBlock$Parser mXml
----------------METHODS----------------

 void <init>(
android.content.res.Resources
int[]
int[]
int)

private boolean getValueAt(
int
android.util.TypedValue)

private java.lang.CharSequence loadStringValueAt(
int)

public boolean getBoolean(
int
boolean)

public int getColor(
int
int)

public android.content.res.ColorStateList getColorStateList(
int)

public float getDimension(
int
float)

public int getDimensionPixelOffset(
int
int)

public int getDimensionPixelSize(
int
int)

public android.graphics.drawable.Drawable getDrawable(
int)

public float getFloat(
int
float)

public float getFraction(
int
int
int
float)

public int getIndex(
int)

public int getIndexCount()

public int getInt(
int
int)

public int getInteger(
int
int)

public int getLayoutDimension(
int
java.lang.String)

public java.lang.String getPositionDescription()

public int getResourceId(
int
int)

public android.content.res.Resources getResources()

public java.lang.String getString(
int)

public java.lang.CharSequence getText(
int)

public java.lang.CharSequence[] getTextArray(
int)

public boolean getValue(
int
android.util.TypedValue)

public boolean hasValue(
int)

public int length()

public android.util.TypedValue peekValue(
int)

public void recycle()

public java.lang.String toString()

________________CLASS________________


public abstract interface class android.util.AttributeSet extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean getAttributeBooleanValue(
int
boolean)

public abstract boolean getAttributeBooleanValue(
java.lang.String
java.lang.String
boolean)

public abstract int getAttributeCount()

public abstract float getAttributeFloatValue(
int
float)

public abstract float getAttributeFloatValue(
java.lang.String
java.lang.String
float)

public abstract int getAttributeIntValue(
int
int)

public abstract int getAttributeIntValue(
java.lang.String
java.lang.String
int)

public abstract int getAttributeListValue(
int
java.lang.String[]
int)

public abstract int getAttributeListValue(
java.lang.String
java.lang.String
java.lang.String[]
int)

public abstract java.lang.String getAttributeName(
int)

public abstract int getAttributeNameResource(
int)

public abstract int getAttributeResourceValue(
int
int)

public abstract int getAttributeResourceValue(
java.lang.String
java.lang.String
int)

public abstract int getAttributeUnsignedIntValue(
int
int)

public abstract int getAttributeUnsignedIntValue(
java.lang.String
java.lang.String
int)

public abstract java.lang.String getAttributeValue(
int)

public abstract java.lang.String getAttributeValue(
java.lang.String
java.lang.String)

public abstract java.lang.String getClassAttribute()

public abstract java.lang.String getIdAttribute()

public abstract int getIdAttributeResourceValue(
int)

public abstract java.lang.String getPositionDescription()

public abstract int getStyleAttribute()

________________CLASS________________


public abstract interface class android.content.res.XmlResourceParser extends java.lang.Object implements org.xmlpull.v1.XmlPullParser, android.util.AttributeSet

----------------FIELDS----------------
----------------METHODS----------------

public abstract void close()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/content/res/XmlBlock; )
@dalvik.annotation.InnerClass (accessFlags =16 name =Parser )
final class android.content.res.XmlBlock$Parser extends java.lang.Object implements android.content.res.XmlResourceParser

----------------FIELDS----------------

private final android.content.res.XmlBlock mBlock

private boolean mDecNextDepth

private int mDepth

private int mEventType

 int mParseState

private boolean mStarted

final android.content.res.XmlBlock this$0
----------------METHODS----------------

 void <init>(
android.content.res.XmlBlock
int
android.content.res.XmlBlock)

public void close()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException; )
public void defineEntityReplacementText(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public boolean getAttributeBooleanValue(
int
boolean)

public boolean getAttributeBooleanValue(
java.lang.String
java.lang.String
boolean)

public int getAttributeCount()

public float getAttributeFloatValue(
int
float)

public float getAttributeFloatValue(
java.lang.String
java.lang.String
float)

public int getAttributeIntValue(
int
int)

public int getAttributeIntValue(
java.lang.String
java.lang.String
int)

public int getAttributeListValue(
int
java.lang.String[]
int)

public int getAttributeListValue(
java.lang.String
java.lang.String
java.lang.String[]
int)

public java.lang.String getAttributeName(
int)

public int getAttributeNameResource(
int)

public java.lang.String getAttributeNamespace(
int)

public java.lang.String getAttributePrefix(
int)

public int getAttributeResourceValue(
int
int)

public int getAttributeResourceValue(
java.lang.String
java.lang.String
int)

public java.lang.String getAttributeType(
int)

public int getAttributeUnsignedIntValue(
int
int)

public int getAttributeUnsignedIntValue(
java.lang.String
java.lang.String
int)

public java.lang.String getAttributeValue(
int)

public java.lang.String getAttributeValue(
java.lang.String
java.lang.String)

public java.lang.String getClassAttribute()

public int getColumnNumber()

public int getDepth()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException; )
public int getEventType()

public boolean getFeature(
java.lang.String)

public java.lang.String getIdAttribute()

public int getIdAttributeResourceValue(
int)

public java.lang.String getInputEncoding()

public int getLineNumber()

public java.lang.String getName()

public java.lang.String getNamespace()

public java.lang.String getNamespace(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException; )
public int getNamespaceCount(
int)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException; )
public java.lang.String getNamespacePrefix(
int)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException; )
public java.lang.String getNamespaceUri(
int)

final java.lang.CharSequence getPooledString(
int)

public java.lang.String getPositionDescription()

public java.lang.String getPrefix()

public java.lang.Object getProperty(
java.lang.String)

public int getStyleAttribute()

public java.lang.String getText()

public char[] getTextCharacters(
int[])

public boolean isAttributeDefault(
int)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException; )
public boolean isEmptyElementTag()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException; )
public boolean isWhitespace()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public int next()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public int nextTag()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public java.lang.String nextText()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public int nextToken()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public void require(
int
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException; )
public void setFeature(
java.lang.String
boolean)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException; )
public void setInput(
java.io.InputStream
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException; )
public void setInput(
java.io.Reader)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException; )
public void setProperty(
java.lang.String
java.lang.Object)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/content/res/XmlBlock$Parser; )
final class android.content.res.XmlBlock extends java.lang.Object

----------------FIELDS----------------

private static final boolean DEBUG

private final android.content.res.AssetManager mAssets

private final int mNative

private boolean mOpen

private int mOpenCount

private final android.content.res.StringBlock mStrings
----------------METHODS----------------

 void <init>(
android.content.res.AssetManager
int)

public void <init>(
byte[])

public void <init>(
byte[]
int
int)

static int access$008(
android.content.res.XmlBlock)

static int access$100(
int)

static int access$1000(
int
int)

static int access$1100(
int
int)

static int access$1200(
int
java.lang.String
java.lang.String)

static int access$1300(
int)

static int access$1400(
int
int)

static int access$1500(
int)

static int access$1600(
int)

static int access$1700(
int)

static void access$1800(
int)

static void access$1900(
android.content.res.XmlBlock)

static android.content.res.StringBlock access$200(
android.content.res.XmlBlock)

static int access$300(
int)

static int access$400(
int)

static int access$500(
int)

static int access$600(
int
int)

static int access$700(
int
int)

static int access$800(
int)

static int access$900(
int
int)

private void decOpenCountLocked()

private static final native int nativeCreate(
byte[]
int
int)

private static final native int nativeCreateParseState(
int)

private static final native void nativeDestroy(
int)

private static final native void nativeDestroyParseState(
int)

private static final native int nativeGetAttributeCount(
int)

private static final native int nativeGetAttributeData(
int
int)

private static final native int nativeGetAttributeDataType(
int
int)

private static final native int nativeGetAttributeIndex(
int
java.lang.String
java.lang.String)

private static final native int nativeGetAttributeName(
int
int)

private static final native int nativeGetAttributeNamespace(
int
int)

private static final native int nativeGetAttributeResource(
int
int)

private static final native int nativeGetAttributeStringValue(
int
int)

private static final native int nativeGetClassAttribute(
int)

private static final native int nativeGetIdAttribute(
int)

private static final native int nativeGetLineNumber(
int)

private static final native int nativeGetName(
int)

private static final native int nativeGetNamespace(
int)

private static final native int nativeGetStringBlock(
int)

private static final native int nativeGetStyleAttribute(
int)

private static final native int nativeGetText(
int)

private static final native int nativeNext(
int)

public void close()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public android.content.res.XmlResourceParser newParser()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =12 name =SelfContentObserver )
@dalvik.annotation.EnclosingClass (value =Landroid/database/AbstractCursor; )
public class android.database.AbstractCursor$SelfContentObserver extends android.database.ContentObserver

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/lang/ref/WeakReference<Landroid/database/AbstractCursor;>; )
 java.lang.ref.WeakReference mCursor
----------------METHODS----------------

public void <init>(
android.database.AbstractCursor)

public boolean deliverSelfNotifications()

public void onChange(
boolean)

________________CLASS________________


public abstract interface class android.database.CrossProcessCursor extends java.lang.Object implements android.database.Cursor

----------------FIELDS----------------
----------------METHODS----------------

public abstract void fillWindow(
int
android.database.CursorWindow)

public abstract android.database.CursorWindow getWindow()

public abstract boolean onMove(
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/database/AbstractCursor$SelfContentObserver; )
public abstract class android.database.AbstractCursor extends java.lang.Object implements android.database.CrossProcessCursor

----------------FIELDS----------------

private static final java.lang.String TAG

protected boolean mClosed

 android.database.ContentObservable mContentObservable

protected android.content.ContentResolver mContentResolver

protected java.lang.Long mCurrentRowID

 android.database.DataSetObservable mDataSetObservable

private android.net.Uri mNotifyUri

protected int mPos

protected int mRowIdColumnIndex

private android.database.ContentObserver mSelfObserver

private final java.lang.Object mSelfObserverLock

private boolean mSelfObserverRegistered
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Long;Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>; )
protected java.util.HashMap mUpdatedRows
----------------METHODS----------------

public void <init>()

public void abortUpdates()

protected void checkPosition()

public void close()

public boolean commitUpdates()
@dalvik.annotation.Signature (value =(Ljava/util/Map<+Ljava/lang/Long;+Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>;)Z )
public boolean commitUpdates(
java.util.Map)

public void copyStringToBuffer(
int
android.database.CharArrayBuffer)

public void deactivate()

public void deactivateInternal()

public boolean deleteRow()

public void fillWindow(
int
android.database.CursorWindow)

protected void finalize()

public byte[] getBlob(
int)

public int getColumnCount()

public int getColumnIndex(
java.lang.String)

public int getColumnIndexOrThrow(
java.lang.String)

public java.lang.String getColumnName(
int)

public abstract java.lang.String[] getColumnNames()

public abstract int getCount()

public abstract double getDouble(
int)

public android.os.Bundle getExtras()

public abstract float getFloat(
int)

public abstract int getInt(
int)

public abstract long getLong(
int)

public final int getPosition()

public abstract short getShort(
int)

public abstract java.lang.String getString(
int)

protected java.lang.Object getUpdatedField(
int)

public boolean getWantsAllOnMoveCalls()

public android.database.CursorWindow getWindow()

public boolean hasUpdates()

public final boolean isAfterLast()

public final boolean isBeforeFirst()

public boolean isClosed()

protected boolean isFieldUpdated(
int)

public final boolean isFirst()

public final boolean isLast()

public abstract boolean isNull(
int)

public final boolean move(
int)

public final boolean moveToFirst()

public final boolean moveToLast()

public final boolean moveToNext()

public final boolean moveToPosition(
int)

public final boolean moveToPrevious()

protected void onChange(
boolean)

public boolean onMove(
int
int)

public void registerContentObserver(
android.database.ContentObserver)

public void registerDataSetObserver(
android.database.DataSetObserver)

public boolean requery()

public android.os.Bundle respond(
android.os.Bundle)

public void setNotificationUri(
android.content.ContentResolver
android.net.Uri)

public boolean supportsUpdates()

public void unregisterContentObserver(
android.database.ContentObserver)

public void unregisterDataSetObserver(
android.database.DataSetObserver)

public boolean update(
int
java.lang.Object)

public boolean updateBlob(
int
byte[])

public boolean updateDouble(
int
double)

public boolean updateFloat(
int
float)

public boolean updateInt(
int
int)

public boolean updateLong(
int
long)

public boolean updateShort(
int
short)

public boolean updateString(
int
java.lang.String)

public boolean updateToNull(
int)

________________CLASS________________


public abstract class android.database.AbstractWindowedCursor extends android.database.AbstractCursor

----------------FIELDS----------------

protected android.database.CursorWindow mWindow
----------------METHODS----------------

public void <init>()

protected void checkPosition()

public void copyStringToBuffer(
int
android.database.CharArrayBuffer)

public byte[] getBlob(
int)

public double getDouble(
int)

public float getFloat(
int)

public int getInt(
int)

public long getLong(
int)

public short getShort(
int)

public java.lang.String getString(
int)

public android.database.CursorWindow getWindow()

public boolean hasWindow()

public boolean isBlob(
int)

public boolean isNull(
int)

public void setWindow(
android.database.CursorWindow)

________________CLASS________________


public abstract interface class android.database.IBulkCursor extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------

public static final int CLOSE_TRANSACTION

public static final int COUNT_TRANSACTION

public static final int DEACTIVATE_TRANSACTION

public static final int DELETE_ROW_TRANSACTION

public static final int GET_COLUMN_NAMES_TRANSACTION

public static final int GET_CURSOR_WINDOW_TRANSACTION

public static final int GET_EXTRAS_TRANSACTION

public static final int ON_MOVE_TRANSACTION

public static final int REQUERY_TRANSACTION

public static final int RESPOND_TRANSACTION

public static final int UPDATE_ROWS_TRANSACTION

public static final int WANTS_ON_MOVE_TRANSACTION

public static final java.lang.String descriptor
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void close()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int count()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void deactivate()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean deleteRow(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String[] getColumnNames()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.os.Bundle getExtras()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean getWantsAllOnMoveCalls()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.database.CursorWindow getWindow(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onMove(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int requery(
android.database.IContentObserver
android.database.CursorWindow)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.os.Bundle respond(
android.os.Bundle)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Ljava/util/Map<+Ljava/lang/Long;+Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>;)Z )
public abstract boolean updateRows(
java.util.Map)

________________CLASS________________


public abstract class android.database.BulkCursorNative extends android.os.Binder implements android.database.IBulkCursor

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static android.database.IBulkCursor asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________


final class android.database.BulkCursorProxy extends java.lang.Object implements android.database.IBulkCursor

----------------FIELDS----------------

private android.os.Bundle mExtras

private android.os.IBinder mRemote
----------------METHODS----------------

public void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void close()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int count()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void deactivate()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean deleteRow(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String[] getColumnNames()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.os.Bundle getExtras()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean getWantsAllOnMoveCalls()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.database.CursorWindow getWindow(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onMove(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int requery(
android.database.IContentObserver
android.database.CursorWindow)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.os.Bundle respond(
android.os.Bundle)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean updateRows(
java.util.Map)

________________CLASS________________


public final class android.database.BulkCursorToCursorAdaptor extends android.database.AbstractWindowedCursor

----------------FIELDS----------------

private static final java.lang.String TAG

private android.database.IBulkCursor mBulkCursor

private java.lang.String[] mColumns

private int mCount

private android.database.AbstractCursor$SelfContentObserver mObserverBridge

private boolean mWantsAllOnMoveCalls
----------------METHODS----------------

public void <init>()

public void close()
@dalvik.annotation.Signature (value =(Ljava/util/Map<+Ljava/lang/Long;+Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>;)Z )
public boolean commitUpdates(
java.util.Map)

public void deactivate()

public boolean deleteRow()

public java.lang.String[] getColumnNames()

public int getCount()

public android.os.Bundle getExtras()

public android.database.IContentObserver getObserver()

public boolean onMove(
int
int)

public boolean requery()

public android.os.Bundle respond(
android.os.Bundle)

public void set(
android.database.IBulkCursor)

________________CLASS________________


public final class android.database.CharArrayBuffer extends java.lang.Object

----------------FIELDS----------------

public char[] data

public int sizeCopied
----------------METHODS----------------

public void <init>(
int)

public void <init>(
char[])

________________CLASS________________

@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>Ljava/lang/Object; )
public abstract class android.database.Observable extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<TT;>; )
protected final java.util.ArrayList mObservers
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Signature (value =(TT;)V )
public void registerObserver(
java.lang.Object)

public void unregisterAll()
@dalvik.annotation.Signature (value =(TT;)V )
public void unregisterObserver(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.Signature (value =Landroid/database/Observable<Landroid/database/ContentObserver;>; )
public class android.database.ContentObservable extends android.database.Observable

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void dispatchChange(
boolean)

public void notifyChange(
boolean)

public void registerObserver(
android.database.ContentObserver)

public volatile void registerObserver(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =18 name =NotificationRunnable )
@dalvik.annotation.EnclosingClass (value =Landroid/database/ContentObserver; )
final class android.database.ContentObserver$NotificationRunnable extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

private boolean mSelf

final android.database.ContentObserver this$0
----------------METHODS----------------

public void <init>(
android.database.ContentObserver
boolean)

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/database/IContentObserver$Stub; )
public abstract interface class android.database.IContentObserver extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onChange(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/database/IContentObserver$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/database/IContentObserver; )
public abstract class android.database.IContentObserver$Stub extends android.os.Binder implements android.database.IContentObserver

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_onChange
----------------METHODS----------------

public void <init>()

public static android.database.IContentObserver asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =Transport )
@dalvik.annotation.EnclosingClass (value =Landroid/database/ContentObserver; )
final class android.database.ContentObserver$Transport extends android.database.IContentObserver$Stub

----------------FIELDS----------------

 android.database.ContentObserver mContentObserver
----------------METHODS----------------

public void <init>(
android.database.ContentObserver)

public boolean deliverSelfNotifications()

public void onChange(
boolean)

public void releaseContentObserver()

________________CLASS________________


public class android.database.CursorIndexOutOfBoundsException extends java.lang.IndexOutOfBoundsException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
int
int)

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/database/CursorJoiner; )
 class android.database.CursorJoiner$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$android$database$CursorJoiner$Result
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/database/CursorJoiner; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/database/CursorJoiner$Result;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Result )
public final class android.database.CursorJoiner$Result extends java.lang.Enum

----------------FIELDS----------------

private static final android.database.CursorJoiner$Result[] $VALUES

public static final android.database.CursorJoiner$Result BOTH

public static final android.database.CursorJoiner$Result LEFT

public static final android.database.CursorJoiner$Result RIGHT
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.database.CursorJoiner$Result valueOf(
java.lang.String)

public static android.database.CursorJoiner$Result[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/database/CursorJoiner$1;Landroid/database/CursorJoiner$Result; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Ljava/util/Iterator<Landroid/database/CursorJoiner$Result;>;Ljava/lang/Iterable<Landroid/database/CursorJoiner$Result;>; )
public final class android.database.CursorJoiner extends java.lang.Object implements java.util.Iterator, java.lang.Iterable

----------------FIELDS----------------

static final boolean $assertionsDisabled

private int[] mColumnsLeft

private int[] mColumnsRight

private android.database.CursorJoiner$Result mCompareResult

private boolean mCompareResultIsValid

private android.database.Cursor mCursorLeft

private android.database.Cursor mCursorRight

private java.lang.String[] mValues
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.database.Cursor
java.lang.String[]
android.database.Cursor
java.lang.String[])

private int[] buildColumnIndiciesArray(
android.database.Cursor
java.lang.String[])

private static transient int compareStrings(
java.lang.String[])

private void incrementCursors()

private static void populateValues(
java.lang.String[]
android.database.Cursor
int[]
int)

public boolean hasNext()
@dalvik.annotation.Signature (value =()Ljava/util/Iterator<Landroid/database/CursorJoiner$Result;>; )
public java.util.Iterator iterator()

public android.database.CursorJoiner$Result next()

public volatile java.lang.Object next()

public void remove()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/database/CursorToBulkCursorAdaptor; )
@dalvik.annotation.InnerClass (accessFlags =26 name =ContentObserverProxy )
final class android.database.CursorToBulkCursorAdaptor$ContentObserverProxy extends android.database.ContentObserver

----------------FIELDS----------------

protected android.database.IContentObserver mRemote
----------------METHODS----------------

public void <init>(
android.database.IContentObserver
android.os.IBinder$DeathRecipient)

public boolean deliverSelfNotifications()

public void onChange(
boolean)

public boolean unlinkToDeath(
android.os.IBinder$DeathRecipient)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/database/CursorToBulkCursorAdaptor$ContentObserverProxy; )
public final class android.database.CursorToBulkCursorAdaptor extends android.database.BulkCursorNative implements android.os.IBinder$DeathRecipient

----------------FIELDS----------------

private static final java.lang.String TAG

private final android.database.CrossProcessCursor mCursor

private android.database.CursorToBulkCursorAdaptor$ContentObserverProxy mObserver

private final java.lang.String mProviderName

private final boolean mReadOnly

private android.database.CursorWindow mWindow
----------------METHODS----------------

public void <init>(
android.database.Cursor
android.database.IContentObserver
java.lang.String
boolean
android.database.CursorWindow)

private void createAndRegisterObserverProxy(
android.database.IContentObserver)

private void maybeUnregisterObserverProxy()

public void binderDied()

public void close()

public int count()

public void deactivate()

public boolean deleteRow(
int)

public java.lang.String[] getColumnNames()

public android.os.Bundle getExtras()

public boolean getWantsAllOnMoveCalls()

public android.database.CursorWindow getWindow(
int)

public void onMove(
int)

public int requery(
android.database.IContentObserver
android.database.CursorWindow)

public android.os.Bundle respond(
android.os.Bundle)
@dalvik.annotation.Signature (value =(Ljava/util/Map<+Ljava/lang/Long;+Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>;)Z )
public boolean updateRows(
java.util.Map)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/database/CursorWindow;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/database/CursorWindow; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.database.CursorWindow$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.database.CursorWindow createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.database.CursorWindow[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public abstract class android.database.sqlite.SQLiteClosable extends java.lang.Object

----------------FIELDS----------------

private java.lang.Object mLock

private int mReferenceCount
----------------METHODS----------------

public void <init>()

public void acquireReference()

protected abstract void onAllReferencesReleased()

protected void onAllReferencesReleasedFromContainer()

public void releaseReference()

public void releaseReferenceFromContainer()

________________CLASS________________


public class android.database.CursorWindow extends android.database.sqlite.SQLiteClosable implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/database/CursorWindow;>; )
public static final android.os.Parcelable$Creator CREATOR

private int mStartPos

private int nWindow
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.database.CursorWindow$1)

public void <init>(
boolean)

private native boolean allocRow_native()

private native void close_native()

private native char[] copyStringToBuffer_native(
int
int
int
android.database.CharArrayBuffer)

private native void freeLastRow_native()

private native byte[] getBlob_native(
int
int)

private native double getDouble_native(
int
int)

private native long getLong_native(
int
int)

private native int getNumRows_native()

private native java.lang.String getString_native(
int
int)

private native boolean isBlob_native(
int
int)

private native boolean isNull_native(
int
int)

private native void native_clear()

private native android.os.IBinder native_getBinder()

private native void native_init(
android.os.IBinder)

private native void native_init(
boolean)

public static android.database.CursorWindow newFromParcel(
android.os.Parcel)

private native boolean putBlob_native(
byte[]
int
int)

private native boolean putDouble_native(
double
int
int)

private native boolean putLong_native(
long
int
int)

private native boolean putNull_native(
int
int)

private native boolean putString_native(
java.lang.String
int
int)

private native boolean setNumColumns_native(
int)

public boolean allocRow()

public void clear()

public void close()

public void copyStringToBuffer(
int
int
android.database.CharArrayBuffer)

public int describeContents()

protected void finalize()

public void freeLastRow()

public byte[] getBlob(
int
int)

public double getDouble(
int
int)

public float getFloat(
int
int)

public int getInt(
int
int)

public long getLong(
int
int)

public int getNumRows()

public short getShort(
int
int)

public int getStartPosition()

public java.lang.String getString(
int
int)

public boolean isBlob(
int
int)

public boolean isNull(
int
int)

protected void onAllReferencesReleased()

public boolean putBlob(
byte[]
int
int)

public boolean putDouble(
double
int
int)

public boolean putLong(
long
int
int)

public boolean putNull(
int
int)

public boolean putString(
java.lang.String
int
int)

public boolean setNumColumns(
int)

public void setStartPosition(
int)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Landroid/database/Observable<Landroid/database/DataSetObserver;>; )
public class android.database.DataSetObservable extends android.database.Observable

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void notifyChanged()

public void notifyInvalidated()

________________CLASS________________


public abstract class android.database.DataSetObserver extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void onChanged()

public void onInvalidated()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =InsertHelper )
@dalvik.annotation.EnclosingClass (value =Landroid/database/DatabaseUtils; )
public class android.database.DatabaseUtils$InsertHelper extends java.lang.Object

----------------FIELDS----------------

public static final int TABLE_INFO_PRAGMA_COLUMNNAME_INDEX

public static final int TABLE_INFO_PRAGMA_DEFAULT_INDEX
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/Integer;>; )
private java.util.HashMap mColumns

private final android.database.sqlite.SQLiteDatabase mDb

private java.lang.String mInsertSQL

private android.database.sqlite.SQLiteStatement mInsertStatement

private android.database.sqlite.SQLiteStatement mPreparedStatement

private android.database.sqlite.SQLiteStatement mReplaceStatement

private final java.lang.String mTableName
----------------METHODS----------------

public void <init>(
android.database.sqlite.SQLiteDatabase
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/database/SQLException; )
private void buildSQL()
@dalvik.annotation.Throws (value =Landroid/database/SQLException; )
private android.database.sqlite.SQLiteStatement getStatement(
boolean)

private long insertInternal(
android.content.ContentValues
boolean)

public void bind(
int
double)

public void bind(
int
float)

public void bind(
int
int)

public void bind(
int
long)

public void bind(
int
java.lang.String)

public void bind(
int
boolean)

public void bind(
int
byte[])

public void bindNull(
int)

public void close()

public long execute()

public int getColumnIndex(
java.lang.String)

public long insert(
android.content.ContentValues)

public void prepareForInsert()

public void prepareForReplace()

public long replace(
android.content.ContentValues)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/database/DatabaseUtils$InsertHelper; )
public class android.database.DatabaseUtils extends java.lang.Object

----------------FIELDS----------------

private static final boolean DEBUG

private static final boolean LOCAL_LOGV

private static final java.lang.String TAG

private static final java.lang.String[] countProjection

private static java.text.Collator mColl
----------------METHODS----------------

static void <clinit>()

public void <init>()
@java.lang.Deprecated
public static void appendEscapedSQLString(
java.lang.StringBuilder
java.lang.String)

public static final void appendValueToSql(
java.lang.StringBuilder
java.lang.Object)

public static void bindObjectToProgram(
android.database.sqlite.SQLiteProgram
int
java.lang.Object)

public static void createDbFromSqlStatements(
android.content.Context
java.lang.String
int
java.lang.String)

public static void cursorDoubleToContentValues(
android.database.Cursor
java.lang.String
android.content.ContentValues
java.lang.String)

public static void cursorDoubleToCursorValues(
android.database.Cursor
java.lang.String
android.content.ContentValues)

public static void cursorIntToContentValues(
android.database.Cursor
java.lang.String
android.content.ContentValues)

public static void cursorIntToContentValues(
android.database.Cursor
java.lang.String
android.content.ContentValues
java.lang.String)

public static void cursorLongToContentValues(
android.database.Cursor
java.lang.String
android.content.ContentValues)

public static void cursorLongToContentValues(
android.database.Cursor
java.lang.String
android.content.ContentValues
java.lang.String)

public static void cursorRowToContentValues(
android.database.Cursor
android.content.ContentValues)

public static void cursorStringToContentValues(
android.database.Cursor
java.lang.String
android.content.ContentValues)

public static void cursorStringToContentValues(
android.database.Cursor
java.lang.String
android.content.ContentValues
java.lang.String)

public static void cursorStringToInsertHelper(
android.database.Cursor
java.lang.String
android.database.DatabaseUtils$InsertHelper
int)

public static void dumpCurrentRow(
android.database.Cursor)

public static void dumpCurrentRow(
android.database.Cursor
java.io.PrintStream)

public static void dumpCurrentRow(
android.database.Cursor
java.lang.StringBuilder)

public static java.lang.String dumpCurrentRowToString(
android.database.Cursor)

public static void dumpCursor(
android.database.Cursor)

public static void dumpCursor(
android.database.Cursor
java.io.PrintStream)

public static void dumpCursor(
android.database.Cursor
java.lang.StringBuilder)

public static java.lang.String dumpCursorToString(
android.database.Cursor)

public static java.lang.String getCollationKey(
java.lang.String)

private static byte[] getCollationKeyInBytes(
java.lang.String)

public static java.lang.String getHexCollationKey(
java.lang.String)

private static int getKeyLen(
byte[])

public static long longForQuery(
android.database.sqlite.SQLiteDatabase
java.lang.String
java.lang.String[])

public static long longForQuery(
android.database.sqlite.SQLiteStatement
java.lang.String[])

public static long queryNumEntries(
android.database.sqlite.SQLiteDatabase
java.lang.String)

public static final void readExceptionFromParcel(
android.os.Parcel)

private static final void readExceptionFromParcel(
android.os.Parcel
java.lang.String
int)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public static void readExceptionWithFileNotFoundExceptionFromParcel(
android.os.Parcel)

public static java.lang.String sqlEscapeString(
java.lang.String)

public static java.lang.String stringForQuery(
android.database.sqlite.SQLiteDatabase
java.lang.String
java.lang.String[])

public static java.lang.String stringForQuery(
android.database.sqlite.SQLiteStatement
java.lang.String[])

public static final void writeExceptionToParcel(
android.os.Parcel
java.lang.Exception)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/database/IContentObserver$Stub; )
 class android.database.IContentObserver$Stub$Proxy extends java.lang.Object implements android.database.IContentObserver

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onChange(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1 name =RowBuilder )
@dalvik.annotation.EnclosingClass (value =Landroid/database/MatrixCursor; )
public class android.database.MatrixCursor$RowBuilder extends java.lang.Object

----------------FIELDS----------------

private final int endIndex

private int index

final android.database.MatrixCursor this$0
----------------METHODS----------------

 void <init>(
android.database.MatrixCursor
int
int)

public android.database.MatrixCursor$RowBuilder add(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/database/MatrixCursor$RowBuilder; )
public class android.database.MatrixCursor extends android.database.AbstractCursor

----------------FIELDS----------------

private final int columnCount

private final java.lang.String[] columnNames

private java.lang.Object[] data

private int rowCount
----------------METHODS----------------

public void <init>(
java.lang.String[])

public void <init>(
java.lang.String[]
int)

static java.lang.Object[] access$000(
android.database.MatrixCursor)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<*>;I)V )
private void addRow(
java.util.ArrayList
int)

private void ensureCapacity(
int)

private java.lang.Object get(
int)
@dalvik.annotation.Signature (value =(Ljava/lang/Iterable<*>;)V )
public void addRow(
java.lang.Iterable)

public void addRow(
java.lang.Object[])

public java.lang.String[] getColumnNames()

public int getCount()

public double getDouble(
int)

public float getFloat(
int)

public int getInt(
int)

public long getLong(
int)

public short getShort(
int)

public java.lang.String getString(
int)

public boolean isNull(
int)

public android.database.MatrixCursor$RowBuilder newRow()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/database/MergeCursor; )
 class android.database.MergeCursor$1 extends android.database.DataSetObserver

----------------FIELDS----------------

final android.database.MergeCursor this$0
----------------METHODS----------------

 void <init>(
android.database.MergeCursor)

public void onChanged()

public void onInvalidated()

________________CLASS________________


public class android.database.MergeCursor extends android.database.AbstractCursor

----------------FIELDS----------------

private android.database.Cursor mCursor

private android.database.Cursor[] mCursors

private android.database.DataSetObserver mObserver
----------------METHODS----------------

public void <init>(
android.database.Cursor[])

public void close()

public boolean commitUpdates()

public void deactivate()

public boolean deleteRow()

public byte[] getBlob(
int)

public java.lang.String[] getColumnNames()

public int getCount()

public double getDouble(
int)

public float getFloat(
int)

public int getInt(
int)

public long getLong(
int)

public short getShort(
int)

public java.lang.String getString(
int)

public boolean isNull(
int)

public boolean onMove(
int
int)

public void registerContentObserver(
android.database.ContentObserver)

public void registerDataSetObserver(
android.database.DataSetObserver)

public boolean requery()

public void unregisterContentObserver(
android.database.ContentObserver)

public void unregisterDataSetObserver(
android.database.DataSetObserver)

________________CLASS________________


public class android.database.SQLException extends java.lang.RuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public class android.database.StaleDataException extends java.lang.RuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public class android.database.sqlite.SQLiteException extends android.database.SQLException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public class android.database.sqlite.SQLiteAbortException extends android.database.sqlite.SQLiteException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public class android.database.sqlite.SQLiteConstraintException extends android.database.sqlite.SQLiteException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public class android.database.sqlite.SQLiteCursor extends android.database.AbstractWindowedCursor

----------------FIELDS----------------

static final int NO_COUNT

static final java.lang.String TAG
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Ljava/lang/Integer;>; )
private java.util.Map mColumnNameMap

private java.lang.String[] mColumns

private int mCount

private android.database.sqlite.SQLiteDatabase mDatabase

private android.database.sqlite.SQLiteCursorDriver mDriver

private java.lang.String mEditTable

private android.database.sqlite.SQLiteQuery mQuery

private java.lang.StackTraceElement[] mStackTraceElements
----------------METHODS----------------

public void <init>(
android.database.sqlite.SQLiteDatabase
android.database.sqlite.SQLiteCursorDriver
java.lang.String
android.database.sqlite.SQLiteQuery)

private void deactivateCommon()

private void fillWindow(
int)

public void close()
@dalvik.annotation.Signature (value =(Ljava/util/Map<+Ljava/lang/Long;+Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>;)Z )
public boolean commitUpdates(
java.util.Map)

public void deactivate()

public boolean deleteRow()

protected void finalize()

public int getColumnIndex(
java.lang.String)

public java.lang.String[] getColumnNames()

public int getCount()

public android.database.sqlite.SQLiteDatabase getDatabase()

public boolean onMove(
int
int)

public boolean requery()

public void setSelectionArguments(
java.lang.String[])

public void setWindow(
android.database.CursorWindow)

public boolean supportsUpdates()

________________CLASS________________


public abstract interface class android.database.sqlite.SQLiteCursorDriver extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void cursorClosed()

public abstract void cursorDeactivated()

public abstract void cursorRequeried(
android.database.Cursor)

public abstract android.database.Cursor query(
android.database.sqlite.SQLiteDatabase$CursorFactory
java.lang.String[])

public abstract void setBindArguments(
java.lang.String[])

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/database/sqlite/SQLiteDatabase; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =CursorFactory )
public abstract interface class android.database.sqlite.SQLiteDatabase$CursorFactory extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.database.Cursor newCursor(
android.database.sqlite.SQLiteDatabase
android.database.sqlite.SQLiteCursorDriver
java.lang.String
android.database.sqlite.SQLiteQuery)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =SyncUpdateInfo )
@dalvik.annotation.EnclosingClass (value =Landroid/database/sqlite/SQLiteDatabase; )
 class android.database.sqlite.SQLiteDatabase$SyncUpdateInfo extends java.lang.Object

----------------FIELDS----------------

 java.lang.String deletedTable

 java.lang.String foreignKey

 java.lang.String masterTable
----------------METHODS----------------

 void <init>(
java.lang.String
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/sqlite/SQLiteDatabase$SyncUpdateInfo; )
public class android.database.sqlite.SQLiteDatabase extends android.database.sqlite.SQLiteClosable

----------------FIELDS----------------

public static final int CREATE_IF_NECESSARY

private static final int LOCK_ACQUIRED_WARNING_THREAD_TIME_IN_MS

private static final int LOCK_ACQUIRED_WARNING_TIME_IN_MS

private static final int LOCK_ACQUIRED_WARNING_TIME_IN_MS_ALWAYS_PRINT

private static final int LOCK_WARNING_WINDOW_IN_MS

public static final int NO_LOCALIZED_COLLATORS

public static final int OPEN_READONLY

public static final int OPEN_READWRITE

private static final int OPEN_READ_MASK

public static final int SQLITE_MAX_LIKE_PATTERN_LENGTH

private static final java.lang.String TAG

private android.database.sqlite.SQLiteDatabase$CursorFactory mFactory

private int mFlags

private boolean mInnerTransactionIsSuccessful

private long mLastLockMessageTime

private final java.lang.RuntimeException mLeakedException

private final java.util.concurrent.locks.ReentrantLock mLock

private long mLockAcquiredThreadTime

private long mLockAcquiredWallTime

private boolean mLockingEnabled

 int mNativeHandle

private java.lang.String mPath
@dalvik.annotation.Signature (value =Ljava/util/WeakHashMap<Landroid/database/sqlite/SQLiteClosable;Ljava/lang/Object;>; )
private java.util.WeakHashMap mPrograms
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$SyncUpdateInfo;>; )
private final java.util.Map mSyncUpdateInfo

 int mTempTableSequence

private boolean mTransactionIsSuccessful
----------------METHODS----------------

private void <init>(
java.lang.String
android.database.sqlite.SQLiteDatabase$CursorFactory
int)

private void checkLockHoldTime()

private void closeClosable()

public static android.database.sqlite.SQLiteDatabase create(
android.database.sqlite.SQLiteDatabase$CursorFactory)

private native void dbclose()

private native void dbopen(
java.lang.String
int)

public static java.lang.String findEditTable(
java.lang.String)

private long insertOrReplace(
java.lang.String
java.lang.String
android.content.ContentValues
boolean)

private void lockForced()

private void markTableSyncable(
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

public static android.database.sqlite.SQLiteDatabase openDatabase(
java.lang.String
android.database.sqlite.SQLiteDatabase$CursorFactory
int)

public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(
java.io.File
android.database.sqlite.SQLiteDatabase$CursorFactory)

public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(
java.lang.String
android.database.sqlite.SQLiteDatabase$CursorFactory)

public static native int releaseMemory()

private void unlockForced()

 void addSQLiteClosable(
android.database.sqlite.SQLiteClosable)

public void beginTransaction()

public void close()
@dalvik.annotation.Throws (value =Landroid/database/SQLException; )
public android.database.sqlite.SQLiteStatement compileStatement(
java.lang.String)

public int delete(
java.lang.String
java.lang.String
java.lang.String[])

public void endTransaction()
@dalvik.annotation.Throws (value =Landroid/database/SQLException; )
public void execSQL(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/database/SQLException; )
public void execSQL(
java.lang.String
java.lang.Object[])

protected void finalize()

public long getMaximumSize()

public long getPageSize()

public final java.lang.String getPath()
@dalvik.annotation.Signature (value =()Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>; )
public java.util.Map getSyncedTables()

public int getVersion()

public boolean inTransaction()

public long insert(
java.lang.String
java.lang.String
android.content.ContentValues)
@dalvik.annotation.Throws (value =Landroid/database/SQLException; )
public long insertOrThrow(
java.lang.String
java.lang.String
android.content.ContentValues)

public boolean isDbLockedByCurrentThread()

public boolean isDbLockedByOtherThreads()

public boolean isOpen()

public boolean isReadOnly()

native int lastChangeCount()

native long lastInsertRow()

 void lock()

public void markTableSyncable(
java.lang.String
java.lang.String)

public void markTableSyncable(
java.lang.String
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/database/SQLException; )
native void native_execSQL(
java.lang.String)

native void native_setLocale(
java.lang.String
int)

public boolean needUpgrade(
int)

protected void onAllReferencesReleased()

 void onCorruption()

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)

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)

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)

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)

public android.database.Cursor rawQuery(
java.lang.String
java.lang.String[])

public android.database.Cursor rawQueryWithFactory(
android.database.sqlite.SQLiteDatabase$CursorFactory
java.lang.String
java.lang.String[]
java.lang.String)

 void removeSQLiteClosable(
android.database.sqlite.SQLiteClosable)

public long replace(
java.lang.String
java.lang.String
android.content.ContentValues)
@dalvik.annotation.Throws (value =Landroid/database/SQLException; )
public long replaceOrThrow(
java.lang.String
java.lang.String
android.content.ContentValues)

 void rowUpdated(
java.lang.String
long)

public void setLocale(
java.util.Locale)

public void setLockingEnabled(
boolean)

public long setMaximumSize(
long)

public void setPageSize(
long)

public void setTransactionSuccessful()

public void setVersion(
int)

 void unlock()

public int update(
java.lang.String
android.content.ContentValues
java.lang.String
java.lang.String[])

public boolean yieldIfContended()

________________CLASS________________


public class android.database.sqlite.SQLiteDatabaseCorruptException extends android.database.sqlite.SQLiteException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/database/sqlite/SQLiteDebug; )
@dalvik.annotation.InnerClass (accessFlags =9 name =PagerStats )
public class android.database.sqlite.SQLiteDebug$PagerStats extends java.lang.Object

----------------FIELDS----------------

public long databaseBytes

public int numPagers

public long referencedBytes

public long totalBytes
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/database/sqlite/SQLiteDebug$PagerStats; )
public final class android.database.sqlite.SQLiteDebug extends java.lang.Object

----------------FIELDS----------------

public static final boolean DEBUG_ACTIVE_CURSOR_FINALIZATION

public static final boolean DEBUG_LOCK_TIME_TRACKING

public static final boolean DEBUG_LOCK_TIME_TRACKING_STACK_TRACE

public static final boolean DEBUG_SQL_STATEMENTS

private static int sNumActiveCursorsFinalized
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static native long getHeapAllocatedSize()

public static native void getHeapDirtyPages(
int[])

public static native long getHeapFreeSize()

public static native long getHeapSize()

public static int getNumActiveCursorsFinalized()

public static native void getPagerStats(
android.database.sqlite.SQLiteDebug$PagerStats)

static void notifyActiveCursorFinalized()

________________CLASS________________


public class android.database.sqlite.SQLiteDirectCursorDriver extends java.lang.Object implements android.database.sqlite.SQLiteCursorDriver

----------------FIELDS----------------

private static java.lang.String TAG

private android.database.Cursor mCursor

private android.database.sqlite.SQLiteDatabase mDatabase

private java.lang.String mEditTable

private android.database.sqlite.SQLiteQuery mQuery

private java.lang.String mSql
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.database.sqlite.SQLiteDatabase
java.lang.String
java.lang.String)

public void cursorClosed()

public void cursorDeactivated()

public void cursorRequeried(
android.database.Cursor)

public android.database.Cursor query(
android.database.sqlite.SQLiteDatabase$CursorFactory
java.lang.String[])

public void setBindArguments(
java.lang.String[])

public java.lang.String toString()

________________CLASS________________


public class android.database.sqlite.SQLiteDiskIOException extends android.database.sqlite.SQLiteException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public class android.database.sqlite.SQLiteDoneException extends android.database.sqlite.SQLiteException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public class android.database.sqlite.SQLiteFullException extends android.database.sqlite.SQLiteException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public class android.database.sqlite.SQLiteMisuseException extends android.database.sqlite.SQLiteException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public abstract class android.database.sqlite.SQLiteProgram extends android.database.sqlite.SQLiteClosable

----------------FIELDS----------------

static final java.lang.String TAG

protected android.database.sqlite.SQLiteDatabase mDatabase

private java.lang.StackTraceElement[] mStackTraceElements

protected int nHandle

protected int nStatement
----------------METHODS----------------

 void <init>(
android.database.sqlite.SQLiteDatabase
java.lang.String)

private final native void native_clear_bindings()

public void bindBlob(
int
byte[])

public void bindDouble(
int
double)

public void bindLong(
int
long)

public void bindNull(
int)

public void bindString(
int
java.lang.String)

public void clearBindings()

public void close()

protected void compile(
java.lang.String
boolean)

protected void finalize()

public final int getUniqueId()

protected final native void native_bind_blob(
int
byte[])

protected final native void native_bind_double(
int
double)

protected final native void native_bind_long(
int
long)

protected final native void native_bind_null(
int)

protected final native void native_bind_string(
int
java.lang.String)

protected final native void native_compile(
java.lang.String)

protected final native void native_finalize()

protected void onAllReferencesReleased()

protected void onAllReferencesReleasedFromContainer()

________________CLASS________________


public class android.database.sqlite.SQLiteQuery extends android.database.sqlite.SQLiteProgram

----------------FIELDS----------------

private java.lang.String[] mBindArgs

private boolean mClosed

private int mOffsetIndex

private java.lang.String mQuery
----------------METHODS----------------

 void <init>(
android.database.sqlite.SQLiteDatabase
java.lang.String
int
java.lang.String[])

private final native int native_column_count()

private final native java.lang.String native_column_name(
int)

private final native int native_fill_window(
android.database.CursorWindow
int
int)

public void bindDouble(
int
double)

public void bindLong(
int
long)

public void bindNull(
int)

public void bindString(
int
java.lang.String)

public void close()

 int columnCountLocked()

 java.lang.String columnNameLocked(
int)

 int fillWindow(
android.database.CursorWindow
int)

 void requery()

________________CLASS________________


public class android.database.sqlite.SQLiteQueryBuilder extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG

private boolean mDistinct

private android.database.sqlite.SQLiteDatabase$CursorFactory mFactory
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>; )
private java.util.Map mProjectionMap

private java.lang.String mTables

private java.lang.StringBuilder mWhereClause
----------------METHODS----------------

public void <init>()

private static void appendClause(
java.lang.StringBuilder
java.lang.String
java.lang.String)

private static void appendClauseEscapeClause(
java.lang.StringBuilder
java.lang.String
java.lang.String)

public static void appendColumns(
java.lang.StringBuilder
java.lang.String[])

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)

private java.lang.String[] computeProjection(
java.lang.String[])

public void appendWhere(
java.lang.CharSequence)

public void appendWhereEscapeString(
java.lang.String)

public 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)

public java.lang.String buildUnionQuery(
java.lang.String[]
java.lang.String
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/String;[Ljava/lang/String;Ljava/util/Set<Ljava/lang/String;>;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; )
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
java.lang.String)

public java.lang.String getTables()

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)

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)

public void setCursorFactory(
android.database.sqlite.SQLiteDatabase$CursorFactory)

public void setDistinct(
boolean)
@dalvik.annotation.Signature (value =(Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;)V )
public void setProjectionMap(
java.util.Map)

public void setTables(
java.lang.String)

________________CLASS________________


public class android.database.sqlite.SQLiteStatement extends android.database.sqlite.SQLiteProgram

----------------FIELDS----------------
----------------METHODS----------------

 void <init>(
android.database.sqlite.SQLiteDatabase
java.lang.String)

private final native long native_1x1_long()

private final native java.lang.String native_1x1_string()

private final native void native_execute()

public void execute()

public long executeInsert()

public long simpleQueryForLong()

public java.lang.String simpleQueryForString()

________________CLASS________________


public class android.ddm.DdmHandleAppName extends org.apache.harmony.dalvik.ddmc.ChunkHandler

----------------FIELDS----------------

public static final int CHUNK_APNM

private static volatile java.lang.String mAppName

private static android.ddm.DdmHandleAppName mInstance
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static java.lang.String getAppName()

public static void register()

private static void sendAPNM(
java.lang.String)

public static void setAppName(
java.lang.String)

public void connected()

public void disconnected()

public org.apache.harmony.dalvik.ddmc.Chunk handleChunk(
org.apache.harmony.dalvik.ddmc.Chunk)

________________CLASS________________


public class android.ddm.DdmHandleExit extends org.apache.harmony.dalvik.ddmc.ChunkHandler

----------------FIELDS----------------

public static final int CHUNK_EXIT

private static android.ddm.DdmHandleExit mInstance
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static void register()

public void connected()

public void disconnected()

public org.apache.harmony.dalvik.ddmc.Chunk handleChunk(
org.apache.harmony.dalvik.ddmc.Chunk)

________________CLASS________________


public class android.ddm.DdmHandleHeap extends org.apache.harmony.dalvik.ddmc.ChunkHandler

----------------FIELDS----------------

public static final int CHUNK_HPGC

public static final int CHUNK_HPIF

public static final int CHUNK_HPSG

public static final int CHUNK_NHSG

public static final int CHUNK_REAE

public static final int CHUNK_REAL

public static final int CHUNK_REAQ

private static android.ddm.DdmHandleHeap mInstance
----------------METHODS----------------

static void <clinit>()

private void <init>()

private org.apache.harmony.dalvik.ddmc.Chunk handleHPGC(
org.apache.harmony.dalvik.ddmc.Chunk)

private org.apache.harmony.dalvik.ddmc.Chunk handleHPIF(
org.apache.harmony.dalvik.ddmc.Chunk)

private org.apache.harmony.dalvik.ddmc.Chunk handleHPSGNHSG(
org.apache.harmony.dalvik.ddmc.Chunk
boolean)

private org.apache.harmony.dalvik.ddmc.Chunk handleREAE(
org.apache.harmony.dalvik.ddmc.Chunk)

private org.apache.harmony.dalvik.ddmc.Chunk handleREAL(
org.apache.harmony.dalvik.ddmc.Chunk)

private org.apache.harmony.dalvik.ddmc.Chunk handleREAQ(
org.apache.harmony.dalvik.ddmc.Chunk)

public static void register()

public void connected()

public void disconnected()

public org.apache.harmony.dalvik.ddmc.Chunk handleChunk(
org.apache.harmony.dalvik.ddmc.Chunk)

________________CLASS________________


public class android.ddm.DdmHandleHello extends org.apache.harmony.dalvik.ddmc.ChunkHandler

----------------FIELDS----------------

public static final int CHUNK_HELO

public static final int CHUNK_WAIT

private static android.ddm.DdmHandleHello mInstance
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static void register()

public static void sendWAIT(
int)

public void connected()

public void disconnected()

public org.apache.harmony.dalvik.ddmc.Chunk handleChunk(
org.apache.harmony.dalvik.ddmc.Chunk)

________________CLASS________________


public class android.ddm.DdmHandleNativeHeap extends org.apache.harmony.dalvik.ddmc.ChunkHandler

----------------FIELDS----------------

public static final int CHUNK_NHGT

private static android.ddm.DdmHandleNativeHeap mInstance
----------------METHODS----------------

static void <clinit>()

private void <init>()

private native byte[] getLeakInfo()

private org.apache.harmony.dalvik.ddmc.Chunk handleNHGT(
org.apache.harmony.dalvik.ddmc.Chunk)

public static void register()

public void connected()

public void disconnected()

public org.apache.harmony.dalvik.ddmc.Chunk handleChunk(
org.apache.harmony.dalvik.ddmc.Chunk)

________________CLASS________________


public class android.ddm.DdmHandleThread extends org.apache.harmony.dalvik.ddmc.ChunkHandler

----------------FIELDS----------------

public static final int CHUNK_STKL

public static final int CHUNK_THCR

public static final int CHUNK_THDE

public static final int CHUNK_THEN

public static final int CHUNK_THST

private static android.ddm.DdmHandleThread mInstance
----------------METHODS----------------

static void <clinit>()

private void <init>()

private org.apache.harmony.dalvik.ddmc.Chunk createStackChunk(
java.lang.StackTraceElement[]
int)

private org.apache.harmony.dalvik.ddmc.Chunk handleSTKL(
org.apache.harmony.dalvik.ddmc.Chunk)

private org.apache.harmony.dalvik.ddmc.Chunk handleTHEN(
org.apache.harmony.dalvik.ddmc.Chunk)

private org.apache.harmony.dalvik.ddmc.Chunk handleTHST(
org.apache.harmony.dalvik.ddmc.Chunk)

public static void register()

public void connected()

public void disconnected()

public org.apache.harmony.dalvik.ddmc.Chunk handleChunk(
org.apache.harmony.dalvik.ddmc.Chunk)

________________CLASS________________


public class android.ddm.DdmRegister extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

public static void registerHandlers()

________________CLASS________________


public class android.debug.JNITest extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

private native int part1(
int
double
java.lang.String
int[])

private int part2(
double
int
java.lang.String)

private static native int part3(
java.lang.String)

public int test(
int
double
java.lang.String)

________________CLASS________________


public class android.drm.mobile1.DrmConstraintInfo extends java.lang.Object

----------------FIELDS----------------

private int count

private long endDate

private long interval

private long startDate
----------------METHODS----------------

 void <init>()

public int getCount()

public java.util.Date getEndDate()

public long getInterval()

public java.util.Date getStartDate()

________________CLASS________________


public class android.drm.mobile1.DrmException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/drm/mobile1/DrmRawContent; )
@dalvik.annotation.InnerClass (accessFlags =0 name =DrmInputStream )
 class android.drm.mobile1.DrmRawContent$DrmInputStream extends java.io.InputStream

----------------FIELDS----------------

private byte[] b

private boolean isClosed

private int offset

final android.drm.mobile1.DrmRawContent this$0
----------------METHODS----------------

public void <init>(
android.drm.mobile1.DrmRawContent
android.drm.mobile1.DrmRights)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int available()

public void close()

public void mark(
int)

public boolean markSupported()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read(
byte[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void reset()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public long skip(
long)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/drm/mobile1/DrmRawContent$DrmInputStream; )
public class android.drm.mobile1.DrmRawContent extends java.lang.Object

----------------FIELDS----------------

public static final int DRM_COMBINED_DELIVERY

public static final int DRM_FORWARD_LOCK

private static final int DRM_MIMETYPE_CONTENT

public static final java.lang.String DRM_MIMETYPE_CONTENT_STRING

private static final int DRM_MIMETYPE_MESSAGE

public static final java.lang.String DRM_MIMETYPE_MESSAGE_STRING

public static final int DRM_SEPARATE_DELIVERY

public static final int DRM_SEPARATE_DELIVERY_DM

public static final int DRM_UNKNOWN_DATA_LEN

private static final int JNI_DRM_EOF

private static final int JNI_DRM_FAILURE

private static final int JNI_DRM_SUCCESS

private static final int JNI_DRM_UNKNOWN_DATA_LEN

private int id

private java.io.BufferedInputStream inData

private int inDataLen

private java.lang.String mediaType

private int rawType

private java.lang.String rightsIssuer
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Throws (value =Landroid/drm/mobile1/DrmException;Ljava/io/IOException; )
public void <init>(
java.io.InputStream
int
java.lang.String)

static int access$000(
android.drm.mobile1.DrmRawContent)

static int access$100(
android.drm.mobile1.DrmRawContent
byte[]
int
int
int)

private native int nativeConstructDrmContent(
java.io.InputStream
int
int)

private native int nativeGetContentLength()

private native java.lang.String nativeGetContentType()

private native int nativeGetDeliveryMethod()

private native java.lang.String nativeGetRightsAddress()

private native int nativeReadContent(
byte[]
int
int
int)

protected native void finalize()

public java.io.InputStream getContentInputStream(
android.drm.mobile1.DrmRights)
@dalvik.annotation.Throws (value =Landroid/drm/mobile1/DrmException; )
public int getContentLength(
android.drm.mobile1.DrmRights)

public java.lang.String getContentType()

public int getRawType()

public java.lang.String getRightsAddress()

________________CLASS________________


public class android.drm.mobile1.DrmRights extends java.lang.Object

----------------FIELDS----------------

public static final int DRM_PERMISSION_DISPLAY

public static final int DRM_PERMISSION_EXECUTE

public static final int DRM_PERMISSION_PLAY

public static final int DRM_PERMISSION_PRINT

private static final int JNI_DRM_FAILURE

private static final int JNI_DRM_SUCCESS

private java.lang.String roId
----------------METHODS----------------

static void <clinit>()

public void <init>()

private native int nativeConsumeRights(
int)

private native int nativeGetConstraintInfo(
int
android.drm.mobile1.DrmConstraintInfo)

public boolean consumeRights(
int)

public android.drm.mobile1.DrmConstraintInfo getConstraint(
int)

________________CLASS________________


public class android.drm.mobile1.DrmRightsManager extends java.lang.Object

----------------FIELDS----------------

private static final int DRM_MIMETYPE_MESSAGE

private static final int DRM_MIMETYPE_RIGHTS_WBXML

public static final java.lang.String DRM_MIMETYPE_RIGHTS_WBXML_STRING

private static final int DRM_MIMETYPE_RIGHTS_XML

public static final java.lang.String DRM_MIMETYPE_RIGHTS_XML_STRING

private static final int JNI_DRM_FAILURE

private static final int JNI_DRM_SUCCESS

private static android.drm.mobile1.DrmRightsManager singleton
----------------METHODS----------------

static void <clinit>()

protected void <init>()

public static android.drm.mobile1.DrmRightsManager getInstance()

private native int nativeDeleteRights(
android.drm.mobile1.DrmRights)

private native int nativeGetNumOfRights()

private native int nativeGetRightsList(
android.drm.mobile1.DrmRights[]
int)

private native int nativeInstallDrmRights(
java.io.InputStream
int
int
android.drm.mobile1.DrmRights)

private native int nativeQueryRights(
android.drm.mobile1.DrmRawContent
android.drm.mobile1.DrmRights)

public void deleteRights(
android.drm.mobile1.DrmRights)

public java.util.List getRightsList()
@dalvik.annotation.Throws (value =Landroid/drm/mobile1/DrmException;Ljava/io/IOException; )
public android.drm.mobile1.DrmRights installRights(
java.io.InputStream
int
java.lang.String)

public android.drm.mobile1.DrmRights queryRights(
android.drm.mobile1.DrmRawContent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/AvoidXfermode; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/AvoidXfermode$Mode;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Mode )
public final class android.graphics.AvoidXfermode$Mode extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.AvoidXfermode$Mode[] $VALUES

public static final android.graphics.AvoidXfermode$Mode AVOID

public static final android.graphics.AvoidXfermode$Mode TARGET

final int nativeInt
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.graphics.AvoidXfermode$Mode valueOf(
java.lang.String)

public static android.graphics.AvoidXfermode$Mode[] values()

________________CLASS________________


public class android.graphics.Xfermode extends java.lang.Object

----------------FIELDS----------------

 int native_instance
----------------METHODS----------------

public void <init>()

private static native void finalizer(
int)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/AvoidXfermode$Mode; )
public class android.graphics.AvoidXfermode extends android.graphics.Xfermode

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
int
int
android.graphics.AvoidXfermode$Mode)

private static native int nativeCreate(
int
int
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/graphics/Bitmap;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Bitmap; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.graphics.Bitmap$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.graphics.Bitmap createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.graphics.Bitmap[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Bitmap; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/Bitmap$CompressFormat;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =CompressFormat )
public final class android.graphics.Bitmap$CompressFormat extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.Bitmap$CompressFormat[] $VALUES

public static final android.graphics.Bitmap$CompressFormat JPEG

public static final android.graphics.Bitmap$CompressFormat PNG

final int nativeInt
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.graphics.Bitmap$CompressFormat valueOf(
java.lang.String)

public static android.graphics.Bitmap$CompressFormat[] values()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16409 name =Config )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/Bitmap$Config;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Bitmap; )
public final class android.graphics.Bitmap$Config extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.Bitmap$Config[] $VALUES

public static final android.graphics.Bitmap$Config ALPHA_8

public static final android.graphics.Bitmap$Config ARGB_4444

public static final android.graphics.Bitmap$Config ARGB_8888

public static final android.graphics.Bitmap$Config RGB_565

private static android.graphics.Bitmap$Config[] sConfigs

final int nativeInt
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

static android.graphics.Bitmap$Config nativeToConfig(
int)

public static android.graphics.Bitmap$Config valueOf(
java.lang.String)

public static android.graphics.Bitmap$Config[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/Bitmap$CompressFormat;Landroid/graphics/Bitmap$Config; )
public final class android.graphics.Bitmap extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/graphics/Bitmap;>; )
public static final android.os.Parcelable$Creator CREATOR

private static final int WORKING_COMPRESS_STORAGE

private static volatile android.graphics.Matrix sScaleMatrix

private int mHeight

private final boolean mIsMutable

private final int mNativeBitmap

private byte[] mNinePatchChunk

private boolean mRecycled

private int mWidth
----------------METHODS----------------

static void <clinit>()

private void <init>(
int
boolean
byte[])

static android.graphics.Bitmap access$000(
android.os.Parcel)

private void checkPixelAccess(
int
int)

private void checkPixelsAccess(
int
int
int
int
int
int
int[])

private void checkRecycled(
java.lang.String)

private static void checkWidthHeight(
int
int)

private static void checkXYSign(
int
int)

public static android.graphics.Bitmap createBitmap(
int
int
android.graphics.Bitmap$Config)

public static android.graphics.Bitmap createBitmap(
android.graphics.Bitmap)

public static android.graphics.Bitmap createBitmap(
android.graphics.Bitmap
int
int
int
int)

public static android.graphics.Bitmap createBitmap(
android.graphics.Bitmap
int
int
int
int
android.graphics.Matrix
boolean)

public static android.graphics.Bitmap createBitmap(
int[]
int
int
int
int
android.graphics.Bitmap$Config)

public static android.graphics.Bitmap createBitmap(
int[]
int
int
android.graphics.Bitmap$Config)

public static android.graphics.Bitmap createScaledBitmap(
android.graphics.Bitmap
int
int
boolean)

private static native boolean nativeCompress(
int
int
int
java.io.OutputStream
byte[])

private static native int nativeConfig(
int)

private static native android.graphics.Bitmap nativeCopy(
int
int
boolean)

private static native void nativeCopyPixelsToBuffer(
int
java.nio.Buffer)

private static native android.graphics.Bitmap nativeCreate(
int[]
int
int
int
int
int
boolean)

private static native android.graphics.Bitmap nativeCreateFromParcel(
android.os.Parcel)

private static native void nativeDestructor(
int)

private static native void nativeErase(
int
int)

private static native android.graphics.Bitmap nativeExtractAlpha(
int
int
int[])

private static native int nativeGetPixel(
int
int
int)

private static native void nativeGetPixels(
int
int[]
int
int
int
int
int
int)

private static native boolean nativeHasAlpha(
int)

private static native int nativeHeight(
int)

private static native void nativeRecycle(
int)

private static native int nativeRowBytes(
int)

private static native void nativeSetPixel(
int
int
int
int)

private static native void nativeSetPixels(
int
int[]
int
int
int
int
int
int)

private static native int nativeWidth(
int)

private static native boolean nativeWriteToParcel(
int
boolean
android.os.Parcel)

public boolean compress(
android.graphics.Bitmap$CompressFormat
int
java.io.OutputStream)

public android.graphics.Bitmap copy(
android.graphics.Bitmap$Config
boolean)

public void copyPixelsToBuffer(
java.nio.Buffer)

public int describeContents()

public void eraseColor(
int)

public android.graphics.Bitmap extractAlpha()

public android.graphics.Bitmap extractAlpha(
android.graphics.Paint
int[])
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public final android.graphics.Bitmap$Config getConfig()

public final int getHeight()

public byte[] getNinePatchChunk()

public int getPixel(
int
int)

public void getPixels(
int[]
int
int
int
int
int
int)

public final int getRowBytes()

public final int getWidth()

public final boolean hasAlpha()

public final boolean isMutable()

public final boolean isRecycled()

final int ni()

public void recycle()

public void setPixel(
int
int
int)

public void setPixels(
int[]
int
int
int
int
int
int)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Options )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/BitmapFactory; )
public class android.graphics.BitmapFactory$Options extends java.lang.Object

----------------FIELDS----------------

public boolean inDither

public boolean inJustDecodeBounds

public android.graphics.Bitmap$Config inPreferredConfig

public int inSampleSize

public byte[] inTempStorage

public boolean mCancel

public int outHeight

public java.lang.String outMimeType

public int outWidth
----------------METHODS----------------

public void <init>()

private native void requestCancel()

public void requestCancelDecode()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/BitmapFactory$Options; )
public class android.graphics.BitmapFactory extends java.lang.Object

----------------FIELDS----------------

private static final boolean DEBUG_LOAD

private static final java.lang.String TAG
----------------METHODS----------------

public void <init>()

public static android.graphics.Bitmap decodeByteArray(
byte[]
int
int)

public static android.graphics.Bitmap decodeByteArray(
byte[]
int
int
android.graphics.BitmapFactory$Options)

public static android.graphics.Bitmap decodeFile(
java.lang.String)

public static android.graphics.Bitmap decodeFile(
java.lang.String
android.graphics.BitmapFactory$Options)

public static android.graphics.Bitmap decodeFileDescriptor(
java.io.FileDescriptor)

public static android.graphics.Bitmap decodeFileDescriptor(
java.io.FileDescriptor
android.graphics.Rect
android.graphics.BitmapFactory$Options)

public static android.graphics.Bitmap decodeResource(
android.content.res.Resources
int)

public static android.graphics.Bitmap decodeResource(
android.content.res.Resources
int
android.graphics.BitmapFactory$Options)

public static android.graphics.Bitmap decodeStream(
java.io.InputStream)

public static android.graphics.Bitmap decodeStream(
java.io.InputStream
android.graphics.Rect
android.graphics.BitmapFactory$Options)

private static native android.graphics.Bitmap nativeDecodeAsset(
int
android.graphics.Rect
android.graphics.BitmapFactory$Options)

private static native android.graphics.Bitmap nativeDecodeByteArray(
byte[]
int
int
android.graphics.BitmapFactory$Options)

private static native android.graphics.Bitmap nativeDecodeFileDescriptor(
java.io.FileDescriptor
android.graphics.Rect
android.graphics.BitmapFactory$Options)

private static native android.graphics.Bitmap nativeDecodeStream(
java.io.InputStream
byte[]
android.graphics.Rect
android.graphics.BitmapFactory$Options)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/Shader$TileMode; )
public class android.graphics.Shader extends java.lang.Object

----------------FIELDS----------------

 int native_instance
----------------METHODS----------------

public void <init>()

private static native void nativeDestructor(
int)

private static native boolean nativeGetLocalMatrix(
int
int)

private static native void nativeSetLocalMatrix(
int
int)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public boolean getLocalMatrix(
android.graphics.Matrix)

public void setLocalMatrix(
android.graphics.Matrix)

________________CLASS________________


public class android.graphics.BitmapShader extends android.graphics.Shader

----------------FIELDS----------------

private android.graphics.Bitmap mBitmap
----------------METHODS----------------

public void <init>(
android.graphics.Bitmap
android.graphics.Shader$TileMode
android.graphics.Shader$TileMode)

private static native int nativeCreate(
int
int
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/BlurMaskFilter$Blur;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/BlurMaskFilter; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Blur )
public final class android.graphics.BlurMaskFilter$Blur extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.BlurMaskFilter$Blur[] $VALUES

public static final android.graphics.BlurMaskFilter$Blur INNER

public static final android.graphics.BlurMaskFilter$Blur NORMAL

public static final android.graphics.BlurMaskFilter$Blur OUTER

public static final android.graphics.BlurMaskFilter$Blur SOLID

final int native_int
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.graphics.BlurMaskFilter$Blur valueOf(
java.lang.String)

public static android.graphics.BlurMaskFilter$Blur[] values()

________________CLASS________________


public class android.graphics.MaskFilter extends java.lang.Object

----------------FIELDS----------------

 int native_instance
----------------METHODS----------------

public void <init>()

private static native void nativeDestructor(
int)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/BlurMaskFilter$Blur; )
public class android.graphics.BlurMaskFilter extends android.graphics.MaskFilter

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
float
android.graphics.BlurMaskFilter$Blur)

private static native int nativeConstructor(
float
int)

________________CLASS________________


public class android.graphics.Camera extends java.lang.Object

----------------FIELDS----------------

 int native_instance
----------------METHODS----------------

public void <init>()

private native void nativeApplyToCanvas(
int)

private native void nativeConstructor()

private native void nativeDestructor()

private native void nativeGetMatrix(
int)

public void applyToCanvas(
android.graphics.Canvas)

public native float dotWithNormal(
float
float
float)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public void getMatrix(
android.graphics.Matrix)

public native void restore()

public native void rotateX(
float)

public native void rotateY(
float)

public native void rotateZ(
float)

public native void save()

public native void translate(
float
float
float)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16409 name =EdgeType )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Canvas; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/Canvas$EdgeType;>; )
public final class android.graphics.Canvas$EdgeType extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.Canvas$EdgeType[] $VALUES

public static final android.graphics.Canvas$EdgeType AA

public static final android.graphics.Canvas$EdgeType BW

final int nativeInt
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.graphics.Canvas$EdgeType valueOf(
java.lang.String)

public static android.graphics.Canvas$EdgeType[] values()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/Canvas$VertexMode;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Canvas; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =VertexMode )
public final class android.graphics.Canvas$VertexMode extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.Canvas$VertexMode[] $VALUES

public static final android.graphics.Canvas$VertexMode TRIANGLES

public static final android.graphics.Canvas$VertexMode TRIANGLE_FAN

public static final android.graphics.Canvas$VertexMode TRIANGLE_STRIP

final int nativeInt
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.graphics.Canvas$VertexMode valueOf(
java.lang.String)

public static android.graphics.Canvas$VertexMode[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/Canvas$VertexMode;Landroid/graphics/Canvas$EdgeType; )
public class android.graphics.Canvas extends java.lang.Object

----------------FIELDS----------------

public static final int ALL_SAVE_FLAG

public static final int CLIP_SAVE_FLAG

public static final int CLIP_TO_LAYER_SAVE_FLAG

public static final int FULL_COLOR_LAYER_SAVE_FLAG

public static final int HAS_ALPHA_LAYER_SAVE_FLAG

public static final int MATRIX_SAVE_FLAG

private android.graphics.Bitmap mBitmap

private android.graphics.DrawFilter mDrawFilter

private javax.microedition.khronos.opengles.GL mGL

final int mNativeCanvas

private int mSurfaceFormat
----------------METHODS----------------

public void <init>()

 void <init>(
int)

public void <init>(
android.graphics.Bitmap)

public void <init>(
javax.microedition.khronos.opengles.GL)

private static void checkRange(
int
int
int)

private static native void finalizer(
int)

public static native void freeGlCaches()

private static native int initGL()

private static native int initRaster(
int)

private static native void nativeDrawBitmapMatrix(
int
int
int
int)

private static native void nativeDrawBitmapMesh(
int
int
int
int
float[]
int
int[]
int
int)

private static native void nativeDrawVertices(
int
int
int
float[]
int
float[]
int
int[]
int
short[]
int
int
int)

private static native void nativeSetDrawFilter(
int
int)

private static native void nativeSetViewport(
int
int
int)

private static native boolean native_clipPath(
int
int
int)

private static native boolean native_clipRect(
int
float
float
float
float
int)

private static native boolean native_clipRegion(
int
int
int)

private static native void native_concat(
int
int)

private static native void native_drawARGB(
int
int
int
int
int)

private static native void native_drawArc(
int
android.graphics.RectF
float
float
boolean
int)

private static native void native_drawBitmap(
int
int
float
float
int)

private static native void native_drawBitmap(
int
int
android.graphics.Rect
android.graphics.Rect
int)

private static native void native_drawBitmap(
int
int
android.graphics.Rect
android.graphics.RectF
int)

private static native void native_drawBitmap(
int
int[]
int
int
int
int
int
int
boolean
int)

private static native void native_drawCircle(
int
float
float
float
int)

private static native void native_drawColor(
int
int)

private static native void native_drawColor(
int
int
int)

private static native void native_drawLine(
int
float
float
float
float
int)

private static native void native_drawOval(
int
android.graphics.RectF
int)

private static native void native_drawPaint(
int
int)

private static native void native_drawPath(
int
int
int)

private static native void native_drawPicture(
int
int)

private static native void native_drawPosText(
int
java.lang.String
float[]
int)

private static native void native_drawPosText(
int
char[]
int
int
float[]
int)

private static native void native_drawRGB(
int
int
int
int)

private static native void native_drawRect(
int
float
float
float
float
int)

private static native void native_drawRect(
int
android.graphics.RectF
int)

private static native void native_drawRoundRect(
int
android.graphics.RectF
float
float
int)

private static native void native_drawText(
int
java.lang.String
int
int
float
float
int)

private static native void native_drawText(
int
char[]
int
int
float
float
int)

private static native void native_drawTextOnPath(
int
java.lang.String
int
float
float
int)

private static native void native_drawTextOnPath(
int
char[]
int
int
int
float
float
int)

private static native void native_getCTM(
int
int)

private static native boolean native_getClipBounds(
int
android.graphics.Rect)

private static native boolean native_quickReject(
int
float
float
float
float
int)

private static native boolean native_quickReject(
int
int
int)

private static native boolean native_quickReject(
int
android.graphics.RectF
int)

private static native int native_saveLayer(
int
float
float
float
float
int
int)

private static native int native_saveLayer(
int
android.graphics.RectF
int
int)

private static native int native_saveLayerAlpha(
int
float
float
float
float
int
int)

private static native int native_saveLayerAlpha(
int
android.graphics.RectF
int
int)

private static native void native_setBitmap(
int
int)

private static native void native_setMatrix(
int
int)

private static void throwIfRecycled(
android.graphics.Bitmap)

public boolean clipPath(
android.graphics.Path)

public boolean clipPath(
android.graphics.Path
android.graphics.Region$Op)

public native boolean clipRect(
float
float
float
float)

public boolean clipRect(
float
float
float
float
android.graphics.Region$Op)

public native boolean clipRect(
int
int
int
int)

public native boolean clipRect(
android.graphics.Rect)

public boolean clipRect(
android.graphics.Rect
android.graphics.Region$Op)

public native boolean clipRect(
android.graphics.RectF)

public boolean clipRect(
android.graphics.RectF
android.graphics.Region$Op)

public boolean clipRegion(
android.graphics.Region)

public boolean clipRegion(
android.graphics.Region
android.graphics.Region$Op)

public void concat(
android.graphics.Matrix)

public void drawARGB(
int
int
int
int)

public void drawArc(
android.graphics.RectF
float
float
boolean
android.graphics.Paint)

public void drawBitmap(
android.graphics.Bitmap
float
float
android.graphics.Paint)

public void drawBitmap(
android.graphics.Bitmap
android.graphics.Matrix
android.graphics.Paint)

public void drawBitmap(
android.graphics.Bitmap
android.graphics.Rect
android.graphics.Rect
android.graphics.Paint)

public void drawBitmap(
android.graphics.Bitmap
android.graphics.Rect
android.graphics.RectF
android.graphics.Paint)

public void drawBitmap(
int[]
int
int
int
int
int
int
boolean
android.graphics.Paint)

public void drawBitmapMesh(
android.graphics.Bitmap
int
int
float[]
int
int[]
int
android.graphics.Paint)

public void drawCircle(
float
float
float
android.graphics.Paint)

public void drawColor(
int)

public void drawColor(
int
android.graphics.PorterDuff$Mode)

public void drawLine(
float
float
float
float
android.graphics.Paint)

public native void drawLines(
float[]
int
int
android.graphics.Paint)

public void drawLines(
float[]
android.graphics.Paint)

public void drawOval(
android.graphics.RectF
android.graphics.Paint)

public void drawPaint(
android.graphics.Paint)

public void drawPath(
android.graphics.Path
android.graphics.Paint)

public void drawPicture(
android.graphics.Picture)

public void drawPicture(
android.graphics.Picture
android.graphics.Rect)

public void drawPicture(
android.graphics.Picture
android.graphics.RectF)

public native void drawPoint(
float
float
android.graphics.Paint)

public native void drawPoints(
float[]
int
int
android.graphics.Paint)

public void drawPoints(
float[]
android.graphics.Paint)

public void drawPosText(
java.lang.String
float[]
android.graphics.Paint)

public void drawPosText(
char[]
int
int
float[]
android.graphics.Paint)

public void drawRGB(
int
int
int)

public void drawRect(
float
float
float
float
android.graphics.Paint)

public void drawRect(
android.graphics.Rect
android.graphics.Paint)

public void drawRect(
android.graphics.RectF
android.graphics.Paint)

public void drawRoundRect(
android.graphics.RectF
float
float
android.graphics.Paint)

public void drawText(
java.lang.CharSequence
int
int
float
float
android.graphics.Paint)

public native void drawText(
java.lang.String
float
float
android.graphics.Paint)

public void drawText(
java.lang.String
int
int
float
float
android.graphics.Paint)

public void drawText(
char[]
int
int
float
float
android.graphics.Paint)

public void drawTextOnPath(
java.lang.String
android.graphics.Path
float
float
android.graphics.Paint)

public void drawTextOnPath(
char[]
int
int
android.graphics.Path
float
float
android.graphics.Paint)

public void drawVertices(
android.graphics.Canvas$VertexMode
int
float[]
int
float[]
int
int[]
int
short[]
int
int
android.graphics.Paint)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public final android.graphics.Rect getClipBounds()

public boolean getClipBounds(
android.graphics.Rect)

public android.graphics.DrawFilter getDrawFilter()

public javax.microedition.khronos.opengles.GL getGL()

public native int getHeight()

public final android.graphics.Matrix getMatrix()

public void getMatrix(
android.graphics.Matrix)

public native int getSaveCount()

public native int getWidth()

public native boolean isOpaque()

public boolean quickReject(
float
float
float
float
android.graphics.Canvas$EdgeType)

public boolean quickReject(
android.graphics.Path
android.graphics.Canvas$EdgeType)

public boolean quickReject(
android.graphics.RectF
android.graphics.Canvas$EdgeType)

public native void restore()

public native void restoreToCount(
int)

public native void rotate(
float)

public final void rotate(
float
float
float)

public native int save()

public native int save(
int)

public int saveLayer(
float
float
float
float
android.graphics.Paint
int)

public int saveLayer(
android.graphics.RectF
android.graphics.Paint
int)

public int saveLayerAlpha(
float
float
float
float
int
int)

public int saveLayerAlpha(
android.graphics.RectF
int
int)

public native void scale(
float
float)

public final void scale(
float
float
float
float)

public void setBitmap(
android.graphics.Bitmap)

public void setDrawFilter(
android.graphics.DrawFilter)

public void setMatrix(
android.graphics.Matrix)

public void setViewport(
int
int)

public native void skew(
float
float)

public native void translate(
float
float)

________________CLASS________________


public class android.graphics.Color extends java.lang.Object

----------------FIELDS----------------

public static final int BLACK

public static final int BLUE

public static final int CYAN

public static final int DKGRAY

public static final int GRAY

public static final int GREEN

public static final int LTGRAY

public static final int MAGENTA

public static final int RED

public static final int TRANSPARENT

public static final int WHITE

public static final int YELLOW
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/Integer;>; )
private static final java.util.HashMap sColorNameMap
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static int HSVToColor(
int
float[])

public static int HSVToColor(
float[])

public static void RGBToHSV(
int
int
int
float[])

public static int alpha(
int)

public static int argb(
int
int
int
int)

public static int blue(
int)

public static void colorToHSV(
int
float[])

public static int green(
int)

private static native int nativeHSVToColor(
int
float[])

private static native void nativeRGBToHSV(
int
int
int
float[])

public static int parseColor(
java.lang.String)

public static int red(
int)

public static int rgb(
int
int
int)

________________CLASS________________


public class android.graphics.ColorFilter extends java.lang.Object

----------------FIELDS----------------

 int native_instance
----------------METHODS----------------

public void <init>()

private static native void finalizer(
int)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

________________CLASS________________


public class android.graphics.ColorMatrix extends java.lang.Object

----------------FIELDS----------------

private final float[] mArray
----------------METHODS----------------

public void <init>()

public void <init>(
android.graphics.ColorMatrix)

public void <init>(
float[])

public final float[] getArray()

public void postConcat(
android.graphics.ColorMatrix)

public void preConcat(
android.graphics.ColorMatrix)

public void reset()

public void set(
android.graphics.ColorMatrix)

public void set(
float[])

public void setConcat(
android.graphics.ColorMatrix
android.graphics.ColorMatrix)

public void setRGB2YUV()

public void setRotate(
int
float)

public void setSaturation(
float)

public void setScale(
float
float
float
float)

public void setYUV2RGB()

________________CLASS________________


public class android.graphics.ColorMatrixColorFilter extends android.graphics.ColorFilter

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.graphics.ColorMatrix)

public void <init>(
float[])

private static native int nativeColorMatrixFilter(
float[])

________________CLASS________________


public class android.graphics.PathEffect extends java.lang.Object

----------------FIELDS----------------

 int native_instance
----------------METHODS----------------

public void <init>()

private static native void nativeDestructor(
int)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

________________CLASS________________


public class android.graphics.ComposePathEffect extends android.graphics.PathEffect

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.graphics.PathEffect
android.graphics.PathEffect)

private static native int nativeCreate(
int
int)

________________CLASS________________


public class android.graphics.ComposeShader extends android.graphics.Shader

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.graphics.Shader
android.graphics.Shader
android.graphics.PorterDuff$Mode)

public void <init>(
android.graphics.Shader
android.graphics.Shader
android.graphics.Xfermode)

private static native int nativeCreate1(
int
int
int)

private static native int nativeCreate2(
int
int
int)

________________CLASS________________


public class android.graphics.CornerPathEffect extends android.graphics.PathEffect

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
float)

private static native int nativeCreate(
float)

________________CLASS________________


public class android.graphics.DashPathEffect extends android.graphics.PathEffect

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
float[]
float)

private static native int nativeCreate(
float[]
float)

________________CLASS________________


public class android.graphics.DiscretePathEffect extends android.graphics.PathEffect

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
float
float)

private static native int nativeCreate(
float
float)

________________CLASS________________


public class android.graphics.DrawFilter extends java.lang.Object

----------------FIELDS----------------

 int mNativeInt
----------------METHODS----------------

public void <init>()

private static native void nativeDestructor(
int)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

________________CLASS________________


public class android.graphics.EmbossMaskFilter extends android.graphics.MaskFilter

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
float[]
float
float
float)

private static native int nativeConstructor(
float[]
float
float
float)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/Interpolator$Result;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Interpolator; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Result )
public final class android.graphics.Interpolator$Result extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.Interpolator$Result[] $VALUES

public static final android.graphics.Interpolator$Result FREEZE_END

public static final android.graphics.Interpolator$Result FREEZE_START

public static final android.graphics.Interpolator$Result NORMAL
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.graphics.Interpolator$Result valueOf(
java.lang.String)

public static android.graphics.Interpolator$Result[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/Interpolator$Result; )
public class android.graphics.Interpolator extends java.lang.Object

----------------FIELDS----------------

private int mFrameCount

private int mValueCount

private final int native_instance
----------------METHODS----------------

public void <init>(
int)

public void <init>(
int
int)

private static native int nativeConstructor(
int
int)

private static native void nativeDestructor(
int)

private static native void nativeReset(
int
int
int)

private static native void nativeSetKeyFrame(
int
int
int
float[]
float[])

private static native void nativeSetRepeatMirror(
int
float
boolean)

private static native int nativeTimeToValues(
int
int
float[])
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public final int getKeyFrameCount()

public final int getValueCount()

public void reset(
int)

public void reset(
int
int)

public void setKeyFrame(
int
int
float[])

public void setKeyFrame(
int
int
float[]
float[])

public void setRepeatMirror(
float
boolean)

public android.graphics.Interpolator$Result timeToValues(
int
float[])

public android.graphics.Interpolator$Result timeToValues(
float[])

________________CLASS________________


public class android.graphics.Rasterizer extends java.lang.Object

----------------FIELDS----------------

 int native_instance
----------------METHODS----------------

public void <init>()

private static native void finalizer(
int)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

________________CLASS________________


public class android.graphics.LayerRasterizer extends android.graphics.Rasterizer

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

private static native void nativeAddLayer(
int
int
float
float)

private static native int nativeConstructor()

public void addLayer(
android.graphics.Paint)

public void addLayer(
android.graphics.Paint
float
float)

________________CLASS________________


public class android.graphics.LightingColorFilter extends android.graphics.ColorFilter

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
int
int)

private static native int native_CreateLightingFilter(
int
int)

________________CLASS________________


public class android.graphics.LinearGradient extends android.graphics.Shader

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
float
float
float
float
int
int
android.graphics.Shader$TileMode)

public void <init>(
float
float
float
float
int[]
float[]
android.graphics.Shader$TileMode)

private static native int nativeCreate1(
float
float
float
float
int[]
float[]
int)

private static native int nativeCreate2(
float
float
float
float
int
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Matrix; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =ScaleToFit )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/Matrix$ScaleToFit;>; )
public final class android.graphics.Matrix$ScaleToFit extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.Matrix$ScaleToFit[] $VALUES

public static final android.graphics.Matrix$ScaleToFit CENTER

public static final android.graphics.Matrix$ScaleToFit END

public static final android.graphics.Matrix$ScaleToFit FILL

public static final android.graphics.Matrix$ScaleToFit START

final int nativeInt
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.graphics.Matrix$ScaleToFit valueOf(
java.lang.String)

public static android.graphics.Matrix$ScaleToFit[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/Matrix$ScaleToFit; )
public class android.graphics.Matrix extends java.lang.Object

----------------FIELDS----------------

public static final int MPERSP_0

public static final int MPERSP_1

public static final int MPERSP_2

public static final int MSCALE_X

public static final int MSCALE_Y

public static final int MSKEW_X

public static final int MSKEW_Y

public static final int MTRANS_X

public static final int MTRANS_Y

 int native_instance
----------------METHODS----------------

public void <init>()

public void <init>(
android.graphics.Matrix)

private static void checkPointArrays(
float[]
int
float[]
int
int)

private static native void finalizer(
int)

private static native int native_create(
int)

private static native boolean native_equals(
int
int)

private static native void native_getValues(
int
float[])

private static native boolean native_invert(
int
int)

private static native boolean native_isIdentity(
int)

private static native void native_mapPoints(
int
float[]
int
float[]
int
int
boolean)

private static native float native_mapRadius(
int
float)

private static native boolean native_mapRect(
int
android.graphics.RectF
android.graphics.RectF)

private static native boolean native_postConcat(
int
int)

private static native boolean native_postRotate(
int
float)

private static native boolean native_postRotate(
int
float
float
float)

private static native boolean native_postScale(
int
float
float)

private static native boolean native_postScale(
int
float
float
float
float)

private static native boolean native_postSkew(
int
float
float)

private static native boolean native_postSkew(
int
float
float
float
float)

private static native boolean native_postTranslate(
int
float
float)

private static native boolean native_preConcat(
int
int)

private static native boolean native_preRotate(
int
float)

private static native boolean native_preRotate(
int
float
float
float)

private static native boolean native_preScale(
int
float
float)

private static native boolean native_preScale(
int
float
float
float
float)

private static native boolean native_preSkew(
int
float
float)

private static native boolean native_preSkew(
int
float
float
float
float)

private static native boolean native_preTranslate(
int
float
float)

private static native boolean native_rectStaysRect(
int)

private static native void native_reset(
int)

private static native void native_set(
int
int)

private static native boolean native_setConcat(
int
int
int)

private static native boolean native_setPolyToPoly(
int
float[]
int
float[]
int
int)

private static native boolean native_setRectToRect(
int
android.graphics.RectF
android.graphics.RectF
int)

private static native void native_setRotate(
int
float)

private static native void native_setRotate(
int
float
float
float)

private static native void native_setScale(
int
float
float)

private static native void native_setScale(
int
float
float
float
float)

private static native void native_setSinCos(
int
float
float)

private static native void native_setSinCos(
int
float
float
float
float)

private static native void native_setSkew(
int
float
float)

private static native void native_setSkew(
int
float
float
float
float)

private static native void native_setTranslate(
int
float
float)

private static native void native_setValues(
int
float[])

public boolean equals(
java.lang.Object)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public void getValues(
float[])

public boolean invert(
android.graphics.Matrix)

public boolean isIdentity()

public void mapPoints(
float[])

public void mapPoints(
float[]
int
float[]
int
int)

public void mapPoints(
float[]
float[])

public float mapRadius(
float)

public boolean mapRect(
android.graphics.RectF)

public boolean mapRect(
android.graphics.RectF
android.graphics.RectF)

public void mapVectors(
float[])

public void mapVectors(
float[]
int
float[]
int
int)

public void mapVectors(
float[]
float[])

final int ni()

public boolean postConcat(
android.graphics.Matrix)

public boolean postRotate(
float)

public boolean postRotate(
float
float
float)

public boolean postScale(
float
float)

public boolean postScale(
float
float
float
float)

public boolean postSkew(
float
float)

public boolean postSkew(
float
float
float
float)

public boolean postTranslate(
float
float)

public boolean preConcat(
android.graphics.Matrix)

public boolean preRotate(
float)

public boolean preRotate(
float
float
float)

public boolean preScale(
float
float)

public boolean preScale(
float
float
float
float)

public boolean preSkew(
float
float)

public boolean preSkew(
float
float
float
float)

public boolean preTranslate(
float
float)

public boolean rectStaysRect()

public void reset()

public void set(
android.graphics.Matrix)

public boolean setConcat(
android.graphics.Matrix
android.graphics.Matrix)

public boolean setPolyToPoly(
float[]
int
float[]
int
int)

public boolean setRectToRect(
android.graphics.RectF
android.graphics.RectF
android.graphics.Matrix$ScaleToFit)

public void setRotate(
float)

public void setRotate(
float
float
float)

public void setScale(
float
float)

public void setScale(
float
float
float
float)

public void setSinCos(
float
float)

public void setSinCos(
float
float
float
float)

public void setSkew(
float
float)

public void setSkew(
float
float
float
float)

public void setTranslate(
float
float)

public void setValues(
float[])

public java.lang.String toShortString()

public java.lang.String toString()

________________CLASS________________


public class android.graphics.Movie extends java.lang.Object

----------------FIELDS----------------

private final int mNativeMovie
----------------METHODS----------------

private void <init>(
int)

public static native android.graphics.Movie decodeByteArray(
byte[]
int
int)

public static android.graphics.Movie decodeFile(
java.lang.String)

public static native android.graphics.Movie decodeStream(
java.io.InputStream)

private static android.graphics.Movie decodeTempStream(
java.io.InputStream)

public void draw(
android.graphics.Canvas
float
float)

public native void draw(
android.graphics.Canvas
float
float
android.graphics.Paint)

public native int duration()

public native int height()

public native boolean isOpaque()

public native boolean setTime(
int)

public native int width()

________________CLASS________________


public class android.graphics.NinePatch extends java.lang.Object

----------------FIELDS----------------

private final android.graphics.Bitmap mBitmap

private final byte[] mChunk

private android.graphics.Paint mPaint

private final android.graphics.Rect mRect

private java.lang.String mSrcName
----------------METHODS----------------

public void <init>(
android.graphics.Bitmap
byte[]
java.lang.String)

public static native boolean isNinePatchChunk(
byte[])

private static native void nativeDraw(
int
android.graphics.Rect
int
byte[]
int)

private static native void nativeDraw(
int
android.graphics.RectF
int
byte[]
int)

private static native int nativeGetTransparentRegion(
int
byte[]
android.graphics.Rect)

private static native void validateNinePatchChunk(
int
byte[])

public void draw(
android.graphics.Canvas
android.graphics.Rect)

public void draw(
android.graphics.Canvas
android.graphics.Rect
android.graphics.Paint)

public void draw(
android.graphics.Canvas
android.graphics.RectF)

public int getHeight()

public final android.graphics.Region getTransparentRegion(
android.graphics.Rect)

public int getWidth()

public final boolean hasAlpha()

public void setPaint(
android.graphics.Paint)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16409 name =Align )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/Paint$Align;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Paint; )
public final class android.graphics.Paint$Align extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.Paint$Align[] $VALUES

public static final android.graphics.Paint$Align CENTER

public static final android.graphics.Paint$Align LEFT

public static final android.graphics.Paint$Align RIGHT

final int nativeInt
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.graphics.Paint$Align valueOf(
java.lang.String)

public static android.graphics.Paint$Align[] values()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Paint; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/Paint$Cap;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Cap )
public final class android.graphics.Paint$Cap extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.Paint$Cap[] $VALUES

public static final android.graphics.Paint$Cap BUTT

public static final android.graphics.Paint$Cap ROUND

public static final android.graphics.Paint$Cap SQUARE

final int nativeInt
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.graphics.Paint$Cap valueOf(
java.lang.String)

public static android.graphics.Paint$Cap[] values()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Paint; )
@dalvik.annotation.InnerClass (accessFlags =9 name =FontMetrics )
public class android.graphics.Paint$FontMetrics extends java.lang.Object

----------------FIELDS----------------

public float ascent

public float bottom

public float descent

public float leading

public float top
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Paint; )
@dalvik.annotation.InnerClass (accessFlags =9 name =FontMetricsInt )
public class android.graphics.Paint$FontMetricsInt extends java.lang.Object

----------------FIELDS----------------

public int ascent

public int bottom

public int descent

public int leading

public int top
----------------METHODS----------------

public void <init>()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16409 name =Join )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/Paint$Join;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Paint; )
public final class android.graphics.Paint$Join extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.Paint$Join[] $VALUES

public static final android.graphics.Paint$Join BEVEL

public static final android.graphics.Paint$Join MITER

public static final android.graphics.Paint$Join ROUND

final int nativeInt
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.graphics.Paint$Join valueOf(
java.lang.String)

public static android.graphics.Paint$Join[] values()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/Paint$Style;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Style )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Paint; )
public final class android.graphics.Paint$Style extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.Paint$Style[] $VALUES

public static final android.graphics.Paint$Style FILL

public static final android.graphics.Paint$Style FILL_AND_STROKE

public static final android.graphics.Paint$Style STROKE

final int nativeInt
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.graphics.Paint$Style valueOf(
java.lang.String)

public static android.graphics.Paint$Style[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/Paint$FontMetricsInt;Landroid/graphics/Paint$FontMetrics;Landroid/graphics/Paint$Align;Landroid/graphics/Paint$Join;Landroid/graphics/Paint$Cap;Landroid/graphics/Paint$Style; )
public class android.graphics.Paint extends java.lang.Object

----------------FIELDS----------------

public static final int ANTI_ALIAS_FLAG

private static final int DEFAULT_PAINT_FLAGS

public static final int DEV_KERN_TEXT_FLAG

public static final int DITHER_FLAG

public static final int FAKE_BOLD_TEXT_FLAG

public static final int FILTER_BITMAP_FLAG

public static final int LINEAR_TEXT_FLAG

public static final int STRIKE_THRU_TEXT_FLAG

public static final int SUBPIXEL_TEXT_FLAG

public static final int UNDERLINE_TEXT_FLAG

private static final android.graphics.Paint$Align[] sAlignArray

private static final android.graphics.Paint$Cap[] sCapArray

private static final android.graphics.Paint$Join[] sJoinArray

private static final android.graphics.Paint$Style[] sStyleArray

private android.graphics.ColorFilter mColorFilter

private android.graphics.MaskFilter mMaskFilter

 int mNativePaint

private android.graphics.PathEffect mPathEffect

private android.graphics.Rasterizer mRasterizer

private android.graphics.Shader mShader

private android.graphics.Typeface mTypeface

private android.graphics.Xfermode mXfermode
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
int)

public void <init>(
android.graphics.Paint)

private static native void finalizer(
int)

private static native void nativeGetCharArrayBounds(
int
char[]
int
int
android.graphics.Rect)

private static native void nativeGetStringBounds(
int
java.lang.String
int
int
android.graphics.Rect)

private static native boolean native_getFillPath(
int
int
int)

private static native float native_getFontMetrics(
int
android.graphics.Paint$FontMetrics)

private static native int native_getStrokeCap(
int)

private static native int native_getStrokeJoin(
int)

private static native int native_getStyle(
int)

private static native int native_getTextAlign(
int)

private static native void native_getTextPath(
int
java.lang.String
int
int
float
float
int)

private static native void native_getTextPath(
int
char[]
int
int
float
float
int)

private static native int native_getTextWidths(
int
java.lang.String
int
int
float[])

private static native int native_getTextWidths(
int
char[]
int
int
float[])

private static native int native_init()

private static native int native_initWithPaint(
int)

private static native void native_reset(
int)

private static native void native_set(
int
int)

private static native int native_setColorFilter(
int
int)

private static native int native_setMaskFilter(
int
int)

private static native int native_setPathEffect(
int
int)

private static native int native_setRasterizer(
int
int)

private static native int native_setShader(
int
int)

private static native void native_setStrokeCap(
int
int)

private static native void native_setStrokeJoin(
int
int)

private static native void native_setStyle(
int
int)

private static native void native_setTextAlign(
int
int)

private static native int native_setTypeface(
int
int)

private static native int native_setXfermode(
int
int)

public native float ascent()

public int breakText(
java.lang.CharSequence
int
int
boolean
float
float[])

public native int breakText(
java.lang.String
boolean
float
float[])

public native int breakText(
char[]
int
int
float
float[])

public void clearShadowLayer()

public native float descent()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public native int getAlpha()

public native int getColor()

public android.graphics.ColorFilter getColorFilter()

public boolean getFillPath(
android.graphics.Path
android.graphics.Path)

public native int getFlags()

public native float getFontMetrics(
android.graphics.Paint$FontMetrics)

public android.graphics.Paint$FontMetrics getFontMetrics()

public native int getFontMetricsInt(
android.graphics.Paint$FontMetricsInt)

public android.graphics.Paint$FontMetricsInt getFontMetricsInt()

public float getFontSpacing()

public android.graphics.MaskFilter getMaskFilter()

public android.graphics.PathEffect getPathEffect()

public android.graphics.Rasterizer getRasterizer()

public android.graphics.Shader getShader()

public android.graphics.Paint$Cap getStrokeCap()

public android.graphics.Paint$Join getStrokeJoin()

public native float getStrokeMiter()

public native float getStrokeWidth()

public android.graphics.Paint$Style getStyle()

public android.graphics.Paint$Align getTextAlign()

public void getTextBounds(
java.lang.String
int
int
android.graphics.Rect)

public void getTextBounds(
char[]
int
int
android.graphics.Rect)

public void getTextPath(
java.lang.String
int
int
float
float
android.graphics.Path)

public void getTextPath(
char[]
int
int
float
float
android.graphics.Path)

public native float getTextScaleX()

public native float getTextSize()

public native float getTextSkewX()

public int getTextWidths(
java.lang.CharSequence
int
int
float[])

public int getTextWidths(
java.lang.String
int
int
float[])

public int getTextWidths(
java.lang.String
float[])

public int getTextWidths(
char[]
int
int
float[])

public android.graphics.Typeface getTypeface()

public android.graphics.Xfermode getXfermode()

public final boolean isAntiAlias()

public final boolean isDither()

public final boolean isFakeBoldText()

public final boolean isFilterBitmap()

public final boolean isLinearText()

public final boolean isStrikeThruText()

public final boolean isSubpixelText()

public final boolean isUnderlineText()

public float measureText(
java.lang.CharSequence
int
int)

public native float measureText(
java.lang.String)

public native float measureText(
java.lang.String
int
int)

public native float measureText(
char[]
int
int)

public void reset()

public void set(
android.graphics.Paint)

public void setARGB(
int
int
int
int)

public native void setAlpha(
int)

public native void setAntiAlias(
boolean)

public native void setColor(
int)

public android.graphics.ColorFilter setColorFilter(
android.graphics.ColorFilter)

public native void setDither(
boolean)

public native void setFakeBoldText(
boolean)

public native void setFilterBitmap(
boolean)

public native void setFlags(
int)

public native void setLinearText(
boolean)

public android.graphics.MaskFilter setMaskFilter(
android.graphics.MaskFilter)

public android.graphics.PathEffect setPathEffect(
android.graphics.PathEffect)

public android.graphics.Rasterizer setRasterizer(
android.graphics.Rasterizer)

public android.graphics.Shader setShader(
android.graphics.Shader)

public native void setShadowLayer(
float
float
float
int)

public native void setStrikeThruText(
boolean)

public void setStrokeCap(
android.graphics.Paint$Cap)

public void setStrokeJoin(
android.graphics.Paint$Join)

public native void setStrokeMiter(
float)

public native void setStrokeWidth(
float)

public void setStyle(
android.graphics.Paint$Style)

public native void setSubpixelText(
boolean)

public void setTextAlign(
android.graphics.Paint$Align)

public native void setTextScaleX(
float)

public native void setTextSize(
float)

public native void setTextSkewX(
float)

public android.graphics.Typeface setTypeface(
android.graphics.Typeface)

public native void setUnderlineText(
boolean)

public android.graphics.Xfermode setXfermode(
android.graphics.Xfermode)

________________CLASS________________


public class android.graphics.PaintFlagsDrawFilter extends android.graphics.DrawFilter

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
int
int)

private static native int nativeConstructor(
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16409 name =Direction )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/Path$Direction;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Path; )
public final class android.graphics.Path$Direction extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.Path$Direction[] $VALUES

public static final android.graphics.Path$Direction CCW

public static final android.graphics.Path$Direction CW

final int nativeInt
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.graphics.Path$Direction valueOf(
java.lang.String)

public static android.graphics.Path$Direction[] values()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/Path$FillType;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Path; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =FillType )
public final class android.graphics.Path$FillType extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.Path$FillType[] $VALUES

public static final android.graphics.Path$FillType EVEN_ODD

public static final android.graphics.Path$FillType INVERSE_EVEN_ODD

public static final android.graphics.Path$FillType INVERSE_WINDING

public static final android.graphics.Path$FillType WINDING

final int nativeInt
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.graphics.Path$FillType valueOf(
java.lang.String)

public static android.graphics.Path$FillType[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/Path$Direction;Landroid/graphics/Path$FillType; )
public class android.graphics.Path extends java.lang.Object

----------------FIELDS----------------

private static final android.graphics.Path$FillType[] sFillTypeArray

private final int mNativePath
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
android.graphics.Path)

private static native void finalizer(
int)

private static native int init1()

private static native int init2(
int)

private static native void native_addArc(
int
android.graphics.RectF
float
float)

private static native void native_addCircle(
int
float
float
float
int)

private static native void native_addOval(
int
android.graphics.RectF
int)

private static native void native_addPath(
int
int)

private static native void native_addPath(
int
int
float
float)

private static native void native_addPath(
int
int
int)

private static native void native_addRect(
int
float
float
float
float
int)

private static native void native_addRect(
int
android.graphics.RectF
int)

private static native void native_addRoundRect(
int
android.graphics.RectF
float
float
int)

private static native void native_addRoundRect(
int
android.graphics.RectF
float[]
int)

private static native void native_arcTo(
int
android.graphics.RectF
float
float
boolean)

private static native void native_close(
int)

private static native void native_computeBounds(
int
android.graphics.RectF
int)

private static native void native_cubicTo(
int
float
float
float
float
float
float)

private static native int native_getFillType(
int)

private static native void native_incReserve(
int
int)

private static native boolean native_isEmpty(
int)

private static native boolean native_isRect(
int
android.graphics.RectF)

private static native void native_lineTo(
int
float
float)

private static native void native_moveTo(
int
float
float)

private static native void native_offset(
int
float
float)

private static native void native_offset(
int
float
float
int)

private static native void native_quadTo(
int
float
float
float
float)

private static native void native_rCubicTo(
int
float
float
float
float
float
float)

private static native void native_rLineTo(
int
float
float)

private static native void native_rMoveTo(
int
float
float)

private static native void native_rQuadTo(
int
float
float
float
float)

private static native void native_reset(
int)

private static native void native_rewind(
int)

private static native void native_set(
int
int)

private static native void native_setFillType(
int
int)

private static native void native_setLastPoint(
int
float
float)

private static native void native_transform(
int
int)

private static native void native_transform(
int
int
int)

public void addArc(
android.graphics.RectF
float
float)

public void addCircle(
float
float
float
android.graphics.Path$Direction)

public void addOval(
android.graphics.RectF
android.graphics.Path$Direction)

public void addPath(
android.graphics.Path)

public void addPath(
android.graphics.Path
float
float)

public void addPath(
android.graphics.Path
android.graphics.Matrix)

public void addRect(
float
float
float
float
android.graphics.Path$Direction)

public void addRect(
android.graphics.RectF
android.graphics.Path$Direction)

public void addRoundRect(
android.graphics.RectF
float
float
android.graphics.Path$Direction)

public void addRoundRect(
android.graphics.RectF
float[]
android.graphics.Path$Direction)

public void arcTo(
android.graphics.RectF
float
float)

public void arcTo(
android.graphics.RectF
float
float
boolean)

public void close()

public void computeBounds(
android.graphics.RectF
boolean)

public void cubicTo(
float
float
float
float
float
float)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public android.graphics.Path$FillType getFillType()

public void incReserve(
int)

public boolean isEmpty()

public boolean isInverseFillType()

public boolean isRect(
android.graphics.RectF)

public void lineTo(
float
float)

public void moveTo(
float
float)

final int ni()

public void offset(
float
float)

public void offset(
float
float
android.graphics.Path)

public void quadTo(
float
float
float
float)

public void rCubicTo(
float
float
float
float
float
float)

public void rLineTo(
float
float)

public void rMoveTo(
float
float)

public void rQuadTo(
float
float
float
float)

public void reset()

public void rewind()

public void set(
android.graphics.Path)

public void setFillType(
android.graphics.Path$FillType)

public void setLastPoint(
float
float)

public void toggleInverseFillType()

public void transform(
android.graphics.Matrix)

public void transform(
android.graphics.Matrix
android.graphics.Path)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/PathDashPathEffect$Style;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/PathDashPathEffect; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Style )
public final class android.graphics.PathDashPathEffect$Style extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.PathDashPathEffect$Style[] $VALUES

public static final android.graphics.PathDashPathEffect$Style MORPH

public static final android.graphics.PathDashPathEffect$Style ROTATE

public static final android.graphics.PathDashPathEffect$Style TRANSLATE

 int native_style
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.graphics.PathDashPathEffect$Style valueOf(
java.lang.String)

public static android.graphics.PathDashPathEffect$Style[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/PathDashPathEffect$Style; )
public class android.graphics.PathDashPathEffect extends android.graphics.PathEffect

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.graphics.Path
float
float
android.graphics.PathDashPathEffect$Style)

private static native int nativeCreate(
int
float
float
int)

________________CLASS________________


public class android.graphics.PathMeasure extends java.lang.Object

----------------FIELDS----------------

public static final int POSITION_MATRIX_FLAG

public static final int TANGENT_MATRIX_FLAG

private final int native_instance
----------------METHODS----------------

public void <init>()

public void <init>(
android.graphics.Path
boolean)

private static native int native_create(
int
boolean)

private static native void native_destroy(
int)

private static native float native_getLength(
int)

private static native boolean native_getMatrix(
int
float
int
int)

private static native boolean native_getPosTan(
int
float
float[]
float[])

private static native boolean native_getSegment(
int
float
float
int
boolean)

private static native boolean native_isClosed(
int)

private static native boolean native_nextContour(
int)

private static native void native_setPath(
int
int
boolean)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public float getLength()

public boolean getMatrix(
float
android.graphics.Matrix
int)

public boolean getPosTan(
float
float[]
float[])

public boolean getSegment(
float
float
android.graphics.Path
boolean)

public boolean isClosed()

public boolean nextContour()

public void setPath(
android.graphics.Path
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =RecordingCanvas )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Picture; )
 class android.graphics.Picture$RecordingCanvas extends android.graphics.Canvas

----------------FIELDS----------------

private final android.graphics.Picture mPicture
----------------METHODS----------------

public void <init>(
android.graphics.Picture
int)

public void drawPicture(
android.graphics.Picture)

public void setBitmap(
android.graphics.Bitmap)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/Picture$RecordingCanvas; )
public class android.graphics.Picture extends java.lang.Object

----------------FIELDS----------------

private static final int WORKING_STREAM_STORAGE

private final int mNativePicture

private android.graphics.Canvas mRecordingCanvas
----------------METHODS----------------

public void <init>()

private void <init>(
int)

public void <init>(
android.graphics.Picture)

public static android.graphics.Picture createFromStream(
java.io.InputStream)

private static native int nativeBeginRecording(
int
int
int)

private static native int nativeConstructor(
int)

private static native int nativeCreateFromStream(
java.io.InputStream
byte[])

private static native void nativeDestructor(
int)

private static native void nativeDraw(
int
int)

private static native void nativeEndRecording(
int)

private static native boolean nativeWriteToStream(
int
java.io.OutputStream
byte[])

public android.graphics.Canvas beginRecording(
int
int)

public void draw(
android.graphics.Canvas)

public void endRecording()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public native int getHeight()

public native int getWidth()

final int ni()

public void writeToStream(
java.io.OutputStream)

________________CLASS________________


public class android.graphics.PixelFormat extends java.lang.Object

----------------FIELDS----------------

public static final int A_8

public static final int JPEG

public static final int LA_88

public static final int L_8

public static final int OPAQUE

public static final int RGBA_4444

public static final int RGBA_5551

public static final int RGBA_8888

public static final int RGBX_8888

public static final int RGB_332

public static final int RGB_565

public static final int RGB_888

public static final int TRANSLUCENT

public static final int TRANSPARENT

public static final int UNKNOWN

public static final int YCbCr_420_SP

public static final int YCbCr_422_SP

public int bitsPerPixel

public int bytesPerPixel
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static boolean formatHasAlpha(
int)

public static native void getPixelFormatInfo(
int
android.graphics.PixelFormat)

private static native void nativeClassInit()

________________CLASS________________


public class android.graphics.PixelXorXfermode extends android.graphics.Xfermode

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
int)

private static native int nativeCreate(
int)

________________CLASS________________


public class android.graphics.Point extends java.lang.Object

----------------FIELDS----------------

public int x

public int y
----------------METHODS----------------

public void <init>()

public void <init>(
int
int)

public void <init>(
android.graphics.Point)

public final boolean equals(
int
int)

public boolean equals(
java.lang.Object)

public int hashCode()

public final void negate()

public final void offset(
int
int)

public void set(
int
int)

public java.lang.String toString()

________________CLASS________________


public class android.graphics.PointF extends java.lang.Object

----------------FIELDS----------------

public float x

public float y
----------------METHODS----------------

public void <init>()

public void <init>(
float
float)

public void <init>(
android.graphics.Point)

public static float length(
float
float)

public final boolean equals(
float
float)

public final float length()

public final void negate()

public final void offset(
float
float)

public final void set(
float
float)

public final void set(
android.graphics.PointF)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/PorterDuff$Mode;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Mode )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/PorterDuff; )
public final class android.graphics.PorterDuff$Mode extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.PorterDuff$Mode[] $VALUES

public static final android.graphics.PorterDuff$Mode CLEAR

public static final android.graphics.PorterDuff$Mode DARKEN

public static final android.graphics.PorterDuff$Mode DST

public static final android.graphics.PorterDuff$Mode DST_ATOP

public static final android.graphics.PorterDuff$Mode DST_IN

public static final android.graphics.PorterDuff$Mode DST_OUT

public static final android.graphics.PorterDuff$Mode DST_OVER

public static final android.graphics.PorterDuff$Mode LIGHTEN

public static final android.graphics.PorterDuff$Mode MULTIPLY

public static final android.graphics.PorterDuff$Mode SCREEN

public static final android.graphics.PorterDuff$Mode SRC

public static final android.graphics.PorterDuff$Mode SRC_ATOP

public static final android.graphics.PorterDuff$Mode SRC_IN

public static final android.graphics.PorterDuff$Mode SRC_OUT

public static final android.graphics.PorterDuff$Mode SRC_OVER

public static final android.graphics.PorterDuff$Mode XOR

final int nativeInt
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.graphics.PorterDuff$Mode valueOf(
java.lang.String)

public static android.graphics.PorterDuff$Mode[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/PorterDuff$Mode; )
public class android.graphics.PorterDuff extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________


public class android.graphics.PorterDuffColorFilter extends android.graphics.ColorFilter

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
int
android.graphics.PorterDuff$Mode)

private static native int native_CreatePorterDuffFilter(
int
int)

________________CLASS________________


public class android.graphics.PorterDuffXfermode extends android.graphics.Xfermode

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.graphics.PorterDuff$Mode)

private static native int nativeCreateXfermode(
int)

________________CLASS________________


public class android.graphics.RadialGradient extends android.graphics.Shader

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
float
float
float
int
int
android.graphics.Shader$TileMode)

public void <init>(
float
float
float
int[]
float[]
android.graphics.Shader$TileMode)

private static native int nativeCreate1(
float
float
float
int[]
float[]
int)

private static native int nativeCreate2(
float
float
float
int
int
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/graphics/Rect;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Rect; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.graphics.Rect$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.graphics.Rect createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.graphics.Rect[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public final class android.graphics.Rect extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/graphics/Rect;>; )
public static final android.os.Parcelable$Creator CREATOR

public int bottom

public int left

public int right

public int top
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
int
int
int
int)

public void <init>(
android.graphics.Rect)

public static boolean intersects(
android.graphics.Rect
android.graphics.Rect)

public final int centerX()

public final int centerY()

public boolean contains(
int
int)

public boolean contains(
int
int
int
int)

public boolean contains(
android.graphics.Rect)

public int describeContents()

public boolean equals(
java.lang.Object)

public final float exactCenterX()

public final float exactCenterY()

public final int height()

public void inset(
int
int)

public boolean intersect(
int
int
int
int)

public boolean intersect(
android.graphics.Rect)

public boolean intersects(
int
int
int
int)

public final boolean isEmpty()

public void offset(
int
int)

public void offsetTo(
int
int)

public void readFromParcel(
android.os.Parcel)

public void set(
int
int
int
int)

public void set(
android.graphics.Rect)

public void setEmpty()

public boolean setIntersect(
android.graphics.Rect
android.graphics.Rect)

public void sort()

public java.lang.String toString()

public void union(
int
int)

public void union(
int
int
int
int)

public void union(
android.graphics.Rect)

public final int width()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public class android.graphics.RectF extends java.lang.Object

----------------FIELDS----------------

public float bottom

public float left

public float right

public float top
----------------METHODS----------------

public void <init>()

public void <init>(
float
float
float
float)

public void <init>(
android.graphics.Rect)

public void <init>(
android.graphics.RectF)

public static boolean intersects(
android.graphics.RectF
android.graphics.RectF)

public final float centerX()

public final float centerY()

public boolean contains(
float
float)

public boolean contains(
float
float
float
float)

public boolean contains(
android.graphics.RectF)

public final float height()

public void inset(
float
float)

public boolean intersect(
float
float
float
float)

public boolean intersect(
android.graphics.RectF)

public boolean intersects(
float
float
float
float)

public final boolean isEmpty()

public void offset(
float
float)

public void offsetTo(
float
float)

public void round(
android.graphics.Rect)

public void roundOut(
android.graphics.Rect)

public void set(
float
float
float
float)

public void set(
android.graphics.Rect)

public void set(
android.graphics.RectF)

public void setEmpty()

public boolean setIntersect(
android.graphics.RectF
android.graphics.RectF)

public void sort()

public java.lang.String toString()

public void union(
float
float)

public void union(
float
float
float
float)

public void union(
android.graphics.RectF)

public final float width()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Region; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/graphics/Region;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.graphics.Region$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.graphics.Region createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.graphics.Region[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/Region$Op;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Op )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Region; )
public final class android.graphics.Region$Op extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.Region$Op[] $VALUES

public static final android.graphics.Region$Op DIFFERENCE

public static final android.graphics.Region$Op INTERSECT

public static final android.graphics.Region$Op REPLACE

public static final android.graphics.Region$Op REVERSE_DIFFERENCE

public static final android.graphics.Region$Op UNION

public static final android.graphics.Region$Op XOR

final int nativeInt
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.graphics.Region$Op valueOf(
java.lang.String)

public static android.graphics.Region$Op[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/Region$Op; )
public class android.graphics.Region extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/graphics/Region;>; )
public static final android.os.Parcelable$Creator CREATOR

private final int mNativeRegion
----------------METHODS----------------

static void <clinit>()

public void <init>()

 void <init>(
int)

private void <init>(
int
int)

public void <init>(
int
int
int
int)

public void <init>(
android.graphics.Rect)

public void <init>(
android.graphics.Region)

static int access$000(
android.os.Parcel)

private static native int nativeConstructor()

private static native int nativeCreateFromParcel(
android.os.Parcel)

private static native void nativeDestructor(
int)

private static native boolean nativeGetBoundaryPath(
int
int)

private static native boolean nativeGetBounds(
int
android.graphics.Rect)

private static native boolean nativeOp(
int
int
int
int)

private static native boolean nativeOp(
int
int
int
int
int
int)

private static native boolean nativeOp(
int
android.graphics.Rect
int
int)

private static native boolean nativeSetPath(
int
int
int)

private static native boolean nativeSetRect(
int
int
int
int
int)

private static native boolean nativeSetRegion(
int
int)

private static native boolean nativeWriteToParcel(
int
android.os.Parcel)

public native boolean contains(
int
int)

public int describeContents()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public android.graphics.Path getBoundaryPath()

public boolean getBoundaryPath(
android.graphics.Path)

public android.graphics.Rect getBounds()

public boolean getBounds(
android.graphics.Rect)

public native boolean isComplex()

public native boolean isEmpty()

public native boolean isRect()

final int ni()

public boolean op(
int
int
int
int
android.graphics.Region$Op)

public boolean op(
android.graphics.Rect
android.graphics.Region$Op)

public boolean op(
android.graphics.Rect
android.graphics.Region
android.graphics.Region$Op)

public boolean op(
android.graphics.Region
android.graphics.Region$Op)

public boolean op(
android.graphics.Region
android.graphics.Region
android.graphics.Region$Op)

public native boolean quickContains(
int
int
int
int)

public boolean quickContains(
android.graphics.Rect)

public native boolean quickReject(
int
int
int
int)

public boolean quickReject(
android.graphics.Rect)

public native boolean quickReject(
android.graphics.Region)

public boolean set(
int
int
int
int)

public boolean set(
android.graphics.Rect)

public boolean set(
android.graphics.Region)

public void setEmpty()

public boolean setPath(
android.graphics.Path
android.graphics.Region)

public void translate(
int
int)

public native void translate(
int
int
android.graphics.Region)

public final boolean union(
android.graphics.Rect)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public class android.graphics.RegionIterator extends java.lang.Object

----------------FIELDS----------------

private final int mNativeIter
----------------METHODS----------------

public void <init>(
android.graphics.Region)

private static native int nativeConstructor(
int)

private static native void nativeDestructor(
int)

private static native boolean nativeNext(
int
android.graphics.Rect)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public final boolean next(
android.graphics.Rect)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16409 name =TileMode )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/Shader$TileMode;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/Shader; )
public final class android.graphics.Shader$TileMode extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.Shader$TileMode[] $VALUES

public static final android.graphics.Shader$TileMode CLAMP

public static final android.graphics.Shader$TileMode MIRROR

public static final android.graphics.Shader$TileMode REPEAT

final int nativeInt
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.graphics.Shader$TileMode valueOf(
java.lang.String)

public static android.graphics.Shader$TileMode[] values()

________________CLASS________________


public class android.graphics.SumPathEffect extends android.graphics.PathEffect

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.graphics.PathEffect
android.graphics.PathEffect)

private static native int nativeCreate(
int
int)

________________CLASS________________


public class android.graphics.SweepGradient extends android.graphics.Shader

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
float
float
int
int)

public void <init>(
float
float
int[]
float[])

private static native int nativeCreate1(
float
float
int[]
float[])

private static native int nativeCreate2(
float
float
int
int)

________________CLASS________________


 class android.graphics.TemporaryBuffer extends java.lang.Object

----------------FIELDS----------------

private static char[] sTemp
----------------METHODS----------------

static void <clinit>()

 void <init>()

static char[] obtain(
int)

static void recycle(
char[])

________________CLASS________________


public class android.graphics.Typeface extends java.lang.Object

----------------FIELDS----------------

public static final int BOLD

public static final int BOLD_ITALIC

public static final android.graphics.Typeface DEFAULT

public static final android.graphics.Typeface DEFAULT_BOLD

public static final int ITALIC

public static final android.graphics.Typeface MONOSPACE

public static final int NORMAL

public static final android.graphics.Typeface SANS_SERIF

public static final android.graphics.Typeface SERIF

private static android.graphics.Typeface[] sDefaults

 int native_instance
----------------METHODS----------------

static void <clinit>()

private void <init>(
int)

public static android.graphics.Typeface create(
android.graphics.Typeface
int)

public static android.graphics.Typeface create(
java.lang.String
int)

public static android.graphics.Typeface createFromAsset(
android.content.res.AssetManager
java.lang.String)

public static android.graphics.Typeface defaultFromStyle(
int)

private static native int nativeCreate(
java.lang.String
int)

private static native int nativeCreateFromAsset(
android.content.res.AssetManager
java.lang.String)

private static native int nativeCreateFromTypeface(
int
int)

private static native int nativeGetStyle(
int)

private static native void nativeUnref(
int)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public int getStyle()

public final boolean isBold()

public final boolean isItalic()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/AnimationDrawable; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.graphics.drawable.AnimationDrawable$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =ConstantState )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/Drawable; )
public abstract class android.graphics.drawable.Drawable$ConstantState extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public abstract int getChangingConfigurations()

public abstract android.graphics.drawable.Drawable newDrawable()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =DrawableContainerState )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/DrawableContainer; )
public abstract class android.graphics.drawable.DrawableContainer$DrawableContainerState extends android.graphics.drawable.Drawable$ConstantState

----------------FIELDS----------------

 boolean mCanConstantState

 int mChangingConfigurations

 boolean mCheckedConstantState

 int mChildrenChangingConfigurations

 boolean mComputedConstantSize

 int mConstantHeight

 int mConstantMinimumHeight

 int mConstantMinimumWidth

 android.graphics.Rect mConstantPadding

 boolean mConstantSize

 int mConstantWidth

 android.graphics.drawable.Drawable[] mDrawables

 boolean mHaveOpacity

 boolean mHaveStateful

 int mNumChildren

 int mOpacity

final android.graphics.drawable.DrawableContainer mOwner

 boolean mStateful

 boolean mVariablePadding
----------------METHODS----------------

 void <init>(
android.graphics.drawable.DrawableContainer$DrawableContainerState
android.graphics.drawable.DrawableContainer)

private void computeConstantSize()

public final int addChild(
android.graphics.drawable.Drawable)

public boolean canConstantState()

public int getChangingConfigurations()

public final int getChildCount()

public final android.graphics.drawable.Drawable[] getChildren()

public final int getConstantHeight()

public final int getConstantMinimumHeight()

public final int getConstantMinimumWidth()

public final android.graphics.Rect getConstantPadding()

public final int getConstantWidth()

public final int getOpacity()

public void growArray(
int
int)

public final boolean isConstantSize()

public final boolean isStateful()

public final void setConstantSize(
boolean)

public final void setVariablePadding(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =AnimationState )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/AnimationDrawable; )
final class android.graphics.drawable.AnimationDrawable$AnimationState extends android.graphics.drawable.DrawableContainer$DrawableContainerState

----------------FIELDS----------------

private int[] mDurations

private boolean mOneShot
----------------METHODS----------------

 void <init>(
android.graphics.drawable.AnimationDrawable$AnimationState
android.graphics.drawable.AnimationDrawable)

static int[] access$000(
android.graphics.drawable.AnimationDrawable$AnimationState)

static boolean access$100(
android.graphics.drawable.AnimationDrawable$AnimationState)

static boolean access$102(
android.graphics.drawable.AnimationDrawable$AnimationState
boolean)

public void addFrame(
android.graphics.drawable.Drawable
int)

public void growArray(
int
int)

public android.graphics.drawable.Drawable newDrawable()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/drawable/Drawable$ConstantState;Landroid/graphics/drawable/Drawable$Callback; )
public abstract class android.graphics.drawable.Drawable extends java.lang.Object

----------------FIELDS----------------

private android.graphics.Rect mBounds

 android.graphics.drawable.Drawable$Callback mCallback

private int mChangingConfigurations

private int mLevel

private int[] mStateSet

private boolean mVisible
----------------METHODS----------------

public void <init>()

public static android.graphics.drawable.Drawable createFromPath(
java.lang.String)

public static android.graphics.drawable.Drawable createFromStream(
java.io.InputStream
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static android.graphics.drawable.Drawable createFromXml(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static android.graphics.drawable.Drawable createFromXmlInner(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

private static android.graphics.drawable.Drawable drawableFromBitmap(
android.graphics.Bitmap
byte[]
android.graphics.Rect
java.lang.String)

public static int resolveOpacity(
int
int)

public void clearColorFilter()

public final android.graphics.Rect copyBounds()

public final void copyBounds(
android.graphics.Rect)

public abstract void draw(
android.graphics.Canvas)

public final android.graphics.Rect getBounds()

public int getChangingConfigurations()

public android.graphics.drawable.Drawable$ConstantState getConstantState()

public android.graphics.drawable.Drawable getCurrent()

public int getIntrinsicHeight()

public int getIntrinsicWidth()

public final int getLevel()

public int getMinimumHeight()

public int getMinimumWidth()

public abstract int getOpacity()

public boolean getPadding(
android.graphics.Rect)

public int[] getState()

public android.graphics.Region getTransparentRegion()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public void inflate(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
 void inflateWithAttributes(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.content.res.TypedArray
int)

public void invalidateSelf()

public boolean isStateful()

public final boolean isVisible()

protected void onBoundsChange(
android.graphics.Rect)

protected boolean onLevelChange(
int)

protected boolean onStateChange(
int[])

public void scheduleSelf(
java.lang.Runnable
long)

public abstract void setAlpha(
int)

public void setBounds(
int
int
int
int)

public void setBounds(
android.graphics.Rect)

public final void setCallback(
android.graphics.drawable.Drawable$Callback)

public void setChangingConfigurations(
int)

public void setColorFilter(
int
android.graphics.PorterDuff$Mode)

public abstract void setColorFilter(
android.graphics.ColorFilter)

public void setDither(
boolean)

public void setFilterBitmap(
boolean)

public final boolean setLevel(
int)

public boolean setState(
int[])

public boolean setVisible(
boolean
boolean)

public void unscheduleSelf(
java.lang.Runnable)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =Callback )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/Drawable; )
public abstract interface class android.graphics.drawable.Drawable$Callback extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void invalidateDrawable(
android.graphics.drawable.Drawable)

public abstract void scheduleDrawable(
android.graphics.drawable.Drawable
java.lang.Runnable
long)

public abstract void unscheduleDrawable(
android.graphics.drawable.Drawable
java.lang.Runnable)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/drawable/DrawableContainer$DrawableContainerState; )
public class android.graphics.drawable.DrawableContainer extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable$Callback

----------------FIELDS----------------

private int mAlpha

private android.graphics.ColorFilter mColorFilter

private int mCurIndex

private android.graphics.drawable.Drawable mCurrDrawable

private boolean mDither

private android.graphics.drawable.DrawableContainer$DrawableContainerState mDrawableContainerState
----------------METHODS----------------

public void <init>()

public void draw(
android.graphics.Canvas)

public int getChangingConfigurations()

public android.graphics.drawable.Drawable$ConstantState getConstantState()

public android.graphics.drawable.Drawable getCurrent()

public int getIntrinsicHeight()

public int getIntrinsicWidth()

public int getMinimumHeight()

public int getMinimumWidth()

public int getOpacity()

public boolean getPadding(
android.graphics.Rect)

public void invalidateDrawable(
android.graphics.drawable.Drawable)

public boolean isStateful()

protected void onBoundsChange(
android.graphics.Rect)

protected boolean onLevelChange(
int)

protected boolean onStateChange(
int[])

public void scheduleDrawable(
android.graphics.drawable.Drawable
java.lang.Runnable
long)

public boolean selectDrawable(
int)

public void setAlpha(
int)

public void setColorFilter(
android.graphics.ColorFilter)

protected void setConstantState(
android.graphics.drawable.DrawableContainer$DrawableContainerState)

public void setDither(
boolean)

public boolean setVisible(
boolean
boolean)

public void unscheduleDrawable(
android.graphics.drawable.Drawable
java.lang.Runnable)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/drawable/AnimationDrawable$1;Landroid/graphics/drawable/AnimationDrawable$AnimationState; )
public class android.graphics.drawable.AnimationDrawable extends android.graphics.drawable.DrawableContainer implements java.lang.Runnable

----------------FIELDS----------------

private final android.graphics.drawable.AnimationDrawable$AnimationState mAnimationState

private int mCurFrame
----------------METHODS----------------

public void <init>()

private void <init>(
android.graphics.drawable.AnimationDrawable$AnimationState)

 void <init>(
android.graphics.drawable.AnimationDrawable$AnimationState
android.graphics.drawable.AnimationDrawable$1)

private void nextFrame(
boolean)

private void setFrame(
int
boolean
boolean)

public void addFrame(
android.graphics.drawable.Drawable
int)

public int getDuration(
int)

public android.graphics.drawable.Drawable getFrame(
int)

public int getNumberOfFrames()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public void inflate(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

public boolean isOneShot()

public boolean isRunning()

public void run()

public void setOneShot(
boolean)

public boolean setVisible(
boolean
boolean)

public void start()

public void stop()

public void unscheduleSelf(
java.lang.Runnable)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/BitmapDrawable; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.graphics.drawable.BitmapDrawable$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/BitmapDrawable; )
@dalvik.annotation.InnerClass (accessFlags =24 name =BitmapState )
final class android.graphics.drawable.BitmapDrawable$BitmapState extends android.graphics.drawable.Drawable$ConstantState

----------------FIELDS----------------

 android.graphics.Bitmap mBitmap

 int mChangingConfigurations

 int mGravity

 android.graphics.Paint mPaint

 android.graphics.Shader$TileMode mTileModeX

 android.graphics.Shader$TileMode mTileModeY
----------------METHODS----------------

 void <init>(
android.graphics.Bitmap)

public int getChangingConfigurations()

public android.graphics.drawable.Drawable newDrawable()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/drawable/BitmapDrawable$1;Landroid/graphics/drawable/BitmapDrawable$BitmapState; )
public class android.graphics.drawable.BitmapDrawable extends android.graphics.drawable.Drawable

----------------FIELDS----------------

private static final int DEFAULT_PAINT_FLAGS

private boolean mApplyGravity

private android.graphics.Bitmap mBitmap

private android.graphics.drawable.BitmapDrawable$BitmapState mBitmapState

private final android.graphics.Rect mDstRect

private boolean mRebuildShader
----------------METHODS----------------

public void <init>()

public void <init>(
android.graphics.Bitmap)

private void <init>(
android.graphics.drawable.BitmapDrawable$BitmapState)

 void <init>(
android.graphics.drawable.BitmapDrawable$BitmapState
android.graphics.drawable.BitmapDrawable$1)

public void <init>(
java.io.InputStream)

public void <init>(
java.lang.String)

public void draw(
android.graphics.Canvas)

public final android.graphics.Bitmap getBitmap()

public int getChangingConfigurations()

public final android.graphics.drawable.Drawable$ConstantState getConstantState()

public int getGravity()

public int getIntrinsicHeight()

public int getIntrinsicWidth()

public int getOpacity()

public final android.graphics.Paint getPaint()

public android.graphics.Shader$TileMode getTileModeX()

public android.graphics.Shader$TileMode getTileModeY()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public void inflate(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

protected void onBoundsChange(
android.graphics.Rect)

public void setAlpha(
int)

public void setAntiAlias(
boolean)

public void setColorFilter(
android.graphics.ColorFilter)

public void setDither(
boolean)

public void setFilterBitmap(
boolean)

public void setGravity(
int)

public void setTileModeX(
android.graphics.Shader$TileMode)

public void setTileModeXY(
android.graphics.Shader$TileMode
android.graphics.Shader$TileMode)

public final void setTileModeY(
android.graphics.Shader$TileMode)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/ClipDrawable; )
 class android.graphics.drawable.ClipDrawable$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =24 name =ClipState )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/ClipDrawable; )
final class android.graphics.drawable.ClipDrawable$ClipState extends android.graphics.drawable.Drawable$ConstantState

----------------FIELDS----------------

private boolean mCanConstantState

 int mChangingConfigurations

private boolean mCheckedConstantState

 android.graphics.drawable.Drawable mDrawable

 int mGravity

 int mOrientation
----------------METHODS----------------

 void <init>(
android.graphics.drawable.ClipDrawable$ClipState
android.graphics.drawable.ClipDrawable)

 boolean canConstantState()

public int getChangingConfigurations()

public android.graphics.drawable.Drawable newDrawable()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/drawable/ClipDrawable$1;Landroid/graphics/drawable/ClipDrawable$ClipState; )
public class android.graphics.drawable.ClipDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable$Callback

----------------FIELDS----------------

public static final int HORIZONTAL

public static final int VERTICAL

private android.graphics.drawable.ClipDrawable$ClipState mClipState

private final android.graphics.Rect mTmpRect
----------------METHODS----------------

 void <init>()

private void <init>(
android.graphics.drawable.ClipDrawable$ClipState)

 void <init>(
android.graphics.drawable.ClipDrawable$ClipState
android.graphics.drawable.ClipDrawable$1)

public void <init>(
android.graphics.drawable.Drawable
int
int)

public void draw(
android.graphics.Canvas)

public int getChangingConfigurations()

public android.graphics.drawable.Drawable$ConstantState getConstantState()

public int getIntrinsicHeight()

public int getIntrinsicWidth()

public int getOpacity()

public boolean getPadding(
android.graphics.Rect)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public void inflate(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

public void invalidateDrawable(
android.graphics.drawable.Drawable)

public boolean isStateful()

protected void onBoundsChange(
android.graphics.Rect)

protected boolean onLevelChange(
int)

protected boolean onStateChange(
int[])

public void scheduleDrawable(
android.graphics.drawable.Drawable
java.lang.Runnable
long)

public void setAlpha(
int)

public void setColorFilter(
android.graphics.ColorFilter)

public boolean setVisible(
boolean
boolean)

public void unscheduleDrawable(
android.graphics.drawable.Drawable
java.lang.Runnable)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/ColorDrawable; )
 class android.graphics.drawable.ColorDrawable$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/ColorDrawable; )
@dalvik.annotation.InnerClass (accessFlags =24 name =ColorState )
final class android.graphics.drawable.ColorDrawable$ColorState extends android.graphics.drawable.Drawable$ConstantState

----------------FIELDS----------------

 int mBaseColor

 int mChangingConfigurations

 int mUseColor
----------------METHODS----------------

 void <init>(
android.graphics.drawable.ColorDrawable$ColorState)

public int getChangingConfigurations()

public android.graphics.drawable.Drawable newDrawable()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/drawable/ColorDrawable$1;Landroid/graphics/drawable/ColorDrawable$ColorState; )
public class android.graphics.drawable.ColorDrawable extends android.graphics.drawable.Drawable

----------------FIELDS----------------

private android.graphics.drawable.ColorDrawable$ColorState mState
----------------METHODS----------------

public void <init>()

public void <init>(
int)

private void <init>(
android.graphics.drawable.ColorDrawable$ColorState)

 void <init>(
android.graphics.drawable.ColorDrawable$ColorState
android.graphics.drawable.ColorDrawable$1)

public void draw(
android.graphics.Canvas)

public int getAlpha()

public int getChangingConfigurations()

public android.graphics.drawable.Drawable$ConstantState getConstantState()

public int getOpacity()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public void inflate(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

public void setAlpha(
int)

public void setColorFilter(
android.graphics.ColorFilter)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/GradientDrawable; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.graphics.drawable.GradientDrawable$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$android$graphics$drawable$GradientDrawable$Orientation
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =24 name =GradientState )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/GradientDrawable; )
final class android.graphics.drawable.GradientDrawable$GradientState extends android.graphics.drawable.Drawable$ConstantState

----------------FIELDS----------------

private float mCenterX

private float mCenterY

public int mChangingConfigurations

public int[] mColors

public int mGradient

private float mGradientRadius

public boolean mHasSolidColor

public int mHeight

public float mInnerRadius

public android.graphics.drawable.GradientDrawable$Orientation mOrientation

public android.graphics.Rect mPadding

public float[] mPositions

public float mRadius

public float[] mRadiusArray

public int mShape

public int mSolidColor

public int mStrokeColor

public float mStrokeDashGap

public float mStrokeDashWidth

public int mStrokeWidth

public float mThickness

private boolean mUseLevel

private boolean mUseLevelForShape

public int mWidth
----------------METHODS----------------

 void <init>()

 void <init>(
android.graphics.drawable.GradientDrawable$Orientation
int[])

static boolean access$000(
android.graphics.drawable.GradientDrawable$GradientState)

static boolean access$002(
android.graphics.drawable.GradientDrawable$GradientState
boolean)

static boolean access$100(
android.graphics.drawable.GradientDrawable$GradientState)

static boolean access$102(
android.graphics.drawable.GradientDrawable$GradientState
boolean)

static float access$200(
android.graphics.drawable.GradientDrawable$GradientState)

static float access$202(
android.graphics.drawable.GradientDrawable$GradientState
float)

static float access$300(
android.graphics.drawable.GradientDrawable$GradientState)

static float access$302(
android.graphics.drawable.GradientDrawable$GradientState
float)

static float access$400(
android.graphics.drawable.GradientDrawable$GradientState)

static float access$402(
android.graphics.drawable.GradientDrawable$GradientState
float)

public int getChangingConfigurations()

public android.graphics.drawable.Drawable newDrawable()

public void setCornerRadii(
float[])

public void setCornerRadius(
float)

public void setGradientCenter(
float
float)

public void setGradientRadius(
float)

public void setGradientType(
int)

public void setShape(
int)

public void setSize(
int
int)

public void setSolidColor(
int)

public void setStroke(
int
int)

public void setStroke(
int
int
float
float)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/GradientDrawable; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/graphics/drawable/GradientDrawable$Orientation;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Orientation )
public final class android.graphics.drawable.GradientDrawable$Orientation extends java.lang.Enum

----------------FIELDS----------------

private static final android.graphics.drawable.GradientDrawable$Orientation[] $VALUES

public static final android.graphics.drawable.GradientDrawable$Orientation BL_TR

public static final android.graphics.drawable.GradientDrawable$Orientation BOTTOM_TOP

public static final android.graphics.drawable.GradientDrawable$Orientation BR_TL

public static final android.graphics.drawable.GradientDrawable$Orientation LEFT_RIGHT

public static final android.graphics.drawable.GradientDrawable$Orientation RIGHT_LEFT

public static final android.graphics.drawable.GradientDrawable$Orientation TL_BR

public static final android.graphics.drawable.GradientDrawable$Orientation TOP_BOTTOM

public static final android.graphics.drawable.GradientDrawable$Orientation TR_BL
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.graphics.drawable.GradientDrawable$Orientation valueOf(
java.lang.String)

public static android.graphics.drawable.GradientDrawable$Orientation[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/drawable/GradientDrawable$1;Landroid/graphics/drawable/GradientDrawable$GradientState;Landroid/graphics/drawable/GradientDrawable$Orientation; )
public class android.graphics.drawable.GradientDrawable extends android.graphics.drawable.Drawable

----------------FIELDS----------------

public static final int LINE

public static final int LINEAR_GRADIENT

public static final int OVAL

public static final int RADIAL_GRADIENT

public static final int RECTANGLE

public static final int RING

public static final int SWEEP_GRADIENT

private int mAlpha

private android.graphics.ColorFilter mColorFilter

private boolean mDither

private final android.graphics.Paint mFillPaint

private final android.graphics.drawable.GradientDrawable$GradientState mGradientState

private android.graphics.Paint mLayerPaint

private android.graphics.Rect mPadding

private final android.graphics.Path mPath

private final android.graphics.RectF mRect

private boolean mRectIsDirty

private android.graphics.Paint mStrokePaint
----------------METHODS----------------

public void <init>()

private void <init>(
android.graphics.drawable.GradientDrawable$GradientState)

 void <init>(
android.graphics.drawable.GradientDrawable$GradientState
android.graphics.drawable.GradientDrawable$1)

public void <init>(
android.graphics.drawable.GradientDrawable$Orientation
int[])

private android.graphics.Path buildRing(
android.graphics.drawable.GradientDrawable$GradientState)

private boolean ensureValidRect()

private static float getFloatOrFraction(
android.content.res.TypedArray
int
float)

private int modulateAlpha(
int)

public void draw(
android.graphics.Canvas)

public int getChangingConfigurations()

public android.graphics.drawable.Drawable$ConstantState getConstantState()

public int getIntrinsicHeight()

public int getIntrinsicWidth()

public int getOpacity()

public boolean getPadding(
android.graphics.Rect)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public void inflate(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

protected void onBoundsChange(
android.graphics.Rect)

protected boolean onLevelChange(
int)

public void setAlpha(
int)

public void setColor(
int)

public void setColorFilter(
android.graphics.ColorFilter)

public void setCornerRadii(
float[])

public void setCornerRadius(
float)

public void setDither(
boolean)

public void setGradientCenter(
float
float)

public void setGradientRadius(
float)

public void setGradientType(
int)

public void setShape(
int)

public void setSize(
int
int)

public void setStroke(
int
int)

public void setStroke(
int
int
float
float)

public void setUseLevel(
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/InsetDrawable; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.graphics.drawable.InsetDrawable$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =24 name =InsetState )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/InsetDrawable; )
final class android.graphics.drawable.InsetDrawable$InsetState extends android.graphics.drawable.Drawable$ConstantState

----------------FIELDS----------------

 boolean mCanConstantState

 int mChangingConfigurations

 boolean mCheckedConstantState

 android.graphics.drawable.Drawable mDrawable

 int mInsetBottom

 int mInsetLeft

 int mInsetRight

 int mInsetTop
----------------METHODS----------------

 void <init>(
android.graphics.drawable.InsetDrawable$InsetState
android.graphics.drawable.InsetDrawable)

 boolean canConstantState()

public int getChangingConfigurations()

public android.graphics.drawable.Drawable newDrawable()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/drawable/InsetDrawable$1;Landroid/graphics/drawable/InsetDrawable$InsetState; )
public class android.graphics.drawable.InsetDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable$Callback

----------------FIELDS----------------

private android.graphics.drawable.InsetDrawable$InsetState mInsetState

private final android.graphics.Rect mTmpRect
----------------METHODS----------------

 void <init>()

public void <init>(
android.graphics.drawable.Drawable
int)

public void <init>(
android.graphics.drawable.Drawable
int
int
int
int)

private void <init>(
android.graphics.drawable.InsetDrawable$InsetState)

 void <init>(
android.graphics.drawable.InsetDrawable$InsetState
android.graphics.drawable.InsetDrawable$1)

public void draw(
android.graphics.Canvas)

public int getChangingConfigurations()

public android.graphics.drawable.Drawable$ConstantState getConstantState()

public int getIntrinsicHeight()

public int getIntrinsicWidth()

public int getOpacity()

public boolean getPadding(
android.graphics.Rect)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public void inflate(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

public void invalidateDrawable(
android.graphics.drawable.Drawable)

public boolean isStateful()

protected void onBoundsChange(
android.graphics.Rect)

protected boolean onStateChange(
int[])

public void scheduleDrawable(
android.graphics.drawable.Drawable
java.lang.Runnable
long)

public void setAlpha(
int)

public void setColorFilter(
android.graphics.ColorFilter)

public boolean setVisible(
boolean
boolean)

public void unscheduleDrawable(
android.graphics.drawable.Drawable
java.lang.Runnable)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =LayerState )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/LayerDrawable; )
 class android.graphics.drawable.LayerDrawable$LayerState extends android.graphics.drawable.Drawable$ConstantState

----------------FIELDS----------------

 android.graphics.drawable.LayerDrawable$Rec[] mArray

private boolean mCanConstantState

 int mChangingConfigurations

private boolean mCheckedConstantState

 int mChildrenChangingConfigurations

private boolean mHaveOpacity

private boolean mHaveStateful

 int mNum

private int mOpacity

private boolean mStateful
----------------METHODS----------------

 void <init>(
android.graphics.drawable.LayerDrawable$LayerState
android.graphics.drawable.LayerDrawable)

public boolean canConstantState()

public int getChangingConfigurations()

public final int getOpacity()

public final boolean isStateful()

public android.graphics.drawable.Drawable newDrawable()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =Rec )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/LayerDrawable; )
 class android.graphics.drawable.LayerDrawable$Rec extends java.lang.Object

----------------FIELDS----------------

public android.graphics.drawable.Drawable mDrawable

public int mId

public int mInsetB

public int mInsetL

public int mInsetR

public int mInsetT
----------------METHODS----------------

 void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/graphics/drawable/LayerDrawable$Rec; )
public class android.graphics.drawable.LayerDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable$Callback

----------------FIELDS----------------

 android.graphics.drawable.LayerDrawable$LayerState mLayerState

private int[] mPaddingB

private int[] mPaddingL

private int[] mPaddingR

private int[] mPaddingT

private final android.graphics.Rect mTmpRect
----------------METHODS----------------

 void <init>()

 void <init>(
android.graphics.drawable.LayerDrawable$LayerState)

public void <init>(
android.graphics.drawable.Drawable[])

private void addLayer(
int
android.graphics.drawable.Drawable
int
int
int
int)

private void ensurePadding()

private boolean reapplyPadding(
int
android.graphics.drawable.LayerDrawable$Rec)

 android.graphics.drawable.LayerDrawable$LayerState createConstantState(
android.graphics.drawable.LayerDrawable$LayerState)

public void draw(
android.graphics.Canvas)

public android.graphics.drawable.Drawable findDrawableByLayerId(
int)

public int getChangingConfigurations()

public android.graphics.drawable.Drawable$ConstantState getConstantState()

public android.graphics.drawable.Drawable getDrawable(
int)

public int getId(
int)

public int getIntrinsicHeight()

public int getIntrinsicWidth()

public int getNumberOfLayers()

public int getOpacity()

public boolean getPadding(
android.graphics.Rect)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public void inflate(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

public void invalidateDrawable(
android.graphics.drawable.Drawable)

public boolean isStateful()

protected void onBoundsChange(
android.graphics.Rect)

protected boolean onLevelChange(
int)

protected boolean onStateChange(
int[])

public void scheduleDrawable(
android.graphics.drawable.Drawable
java.lang.Runnable
long)

public void setAlpha(
int)

public void setColorFilter(
android.graphics.ColorFilter)

public void setDither(
boolean)

public boolean setDrawableByLayerId(
int
android.graphics.drawable.Drawable)

public void setId(
int
int)

public void setLayerInset(
int
int
int
int
int)

public boolean setVisible(
boolean
boolean)

public void unscheduleDrawable(
android.graphics.drawable.Drawable
java.lang.Runnable)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/LevelListDrawable; )
 class android.graphics.drawable.LevelListDrawable$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =LevelListState )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/LevelListDrawable; )
final class android.graphics.drawable.LevelListDrawable$LevelListState extends android.graphics.drawable.DrawableContainer$DrawableContainerState

----------------FIELDS----------------

private int[] mHighs

private int[] mLows
----------------METHODS----------------

 void <init>(
android.graphics.drawable.LevelListDrawable$LevelListState
android.graphics.drawable.LevelListDrawable)

public void addLevel(
int
int
android.graphics.drawable.Drawable)

public void growArray(
int
int)

public int indexOfLevel(
int)

public android.graphics.drawable.Drawable newDrawable()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/drawable/LevelListDrawable$1;Landroid/graphics/drawable/LevelListDrawable$LevelListState; )
public class android.graphics.drawable.LevelListDrawable extends android.graphics.drawable.DrawableContainer

----------------FIELDS----------------

private final android.graphics.drawable.LevelListDrawable$LevelListState mLevelListState
----------------METHODS----------------

public void <init>()

private void <init>(
android.graphics.drawable.LevelListDrawable$LevelListState)

 void <init>(
android.graphics.drawable.LevelListDrawable$LevelListState
android.graphics.drawable.LevelListDrawable$1)

public void addLevel(
int
int
android.graphics.drawable.Drawable)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public void inflate(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

protected boolean onLevelChange(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/NinePatchDrawable; )
 class android.graphics.drawable.NinePatchDrawable$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/NinePatchDrawable; )
@dalvik.annotation.InnerClass (accessFlags =24 name =NinePatchState )
final class android.graphics.drawable.NinePatchDrawable$NinePatchState extends android.graphics.drawable.Drawable$ConstantState

----------------FIELDS----------------

 int mChangingConfigurations

final android.graphics.NinePatch mNinePatch

final android.graphics.Rect mPadding
----------------METHODS----------------

 void <init>(
android.graphics.NinePatch
android.graphics.Rect)

public int getChangingConfigurations()

public android.graphics.drawable.Drawable newDrawable()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/drawable/NinePatchDrawable$1;Landroid/graphics/drawable/NinePatchDrawable$NinePatchState; )
public class android.graphics.drawable.NinePatchDrawable extends android.graphics.drawable.Drawable

----------------FIELDS----------------

private final android.graphics.NinePatch mNinePatch

private final android.graphics.drawable.NinePatchDrawable$NinePatchState mNinePatchState

private final android.graphics.Rect mPadding

private android.graphics.Paint mPaint
----------------METHODS----------------

public void <init>(
android.graphics.Bitmap
byte[]
android.graphics.Rect
java.lang.String)

public void <init>(
android.graphics.NinePatch)

private void <init>(
android.graphics.drawable.NinePatchDrawable$NinePatchState)

 void <init>(
android.graphics.drawable.NinePatchDrawable$NinePatchState
android.graphics.drawable.NinePatchDrawable$1)

public void draw(
android.graphics.Canvas)

public int getChangingConfigurations()

public android.graphics.drawable.Drawable$ConstantState getConstantState()

public int getIntrinsicHeight()

public int getIntrinsicWidth()

public int getMinimumHeight()

public int getMinimumWidth()

public int getOpacity()

public boolean getPadding(
android.graphics.Rect)

public android.graphics.Paint getPaint()

public android.graphics.Region getTransparentRegion()

public void setAlpha(
int)

public void setColorFilter(
android.graphics.ColorFilter)

public void setDither(
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/drawable/ShapeDrawable$1;Landroid/graphics/drawable/ShapeDrawable$ShaderFactory;Landroid/graphics/drawable/ShapeDrawable$ShapeState; )
public class android.graphics.drawable.ShapeDrawable extends android.graphics.drawable.Drawable

----------------FIELDS----------------

private android.graphics.drawable.ShapeDrawable$ShapeState mShapeState
----------------METHODS----------------

public void <init>()

private void <init>(
android.graphics.drawable.ShapeDrawable$ShapeState)

 void <init>(
android.graphics.drawable.ShapeDrawable$ShapeState
android.graphics.drawable.ShapeDrawable$1)

public void <init>(
android.graphics.drawable.shapes.Shape)

private static int modulateAlpha(
int
int)

private void updateShape()

public void draw(
android.graphics.Canvas)

public int getChangingConfigurations()

public android.graphics.drawable.Drawable$ConstantState getConstantState()

public int getIntrinsicHeight()

public int getIntrinsicWidth()

public int getOpacity()

public boolean getPadding(
android.graphics.Rect)

public android.graphics.Paint getPaint()

public android.graphics.drawable.ShapeDrawable$ShaderFactory getShaderFactory()

public android.graphics.drawable.shapes.Shape getShape()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public void inflate(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

protected boolean inflateTag(
java.lang.String
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

protected void onBoundsChange(
android.graphics.Rect)

protected void onDraw(
android.graphics.drawable.shapes.Shape
android.graphics.Canvas
android.graphics.Paint)

public void setAlpha(
int)

public void setColorFilter(
android.graphics.ColorFilter)

public void setDither(
boolean)

public void setIntrinsicHeight(
int)

public void setIntrinsicWidth(
int)

public void setPadding(
int
int
int
int)

public void setPadding(
android.graphics.Rect)

public void setShaderFactory(
android.graphics.drawable.ShapeDrawable$ShaderFactory)

public void setShape(
android.graphics.drawable.shapes.Shape)

________________CLASS________________


public class android.graphics.drawable.PaintDrawable extends android.graphics.drawable.ShapeDrawable

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
int)

protected boolean inflateTag(
java.lang.String
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

public void setCornerRadii(
float[])

public void setCornerRadius(
float)

________________CLASS________________


public class android.graphics.drawable.PictureDrawable extends android.graphics.drawable.Drawable

----------------FIELDS----------------

private android.graphics.Picture mPicture
----------------METHODS----------------

public void <init>(
android.graphics.Picture)

public void draw(
android.graphics.Canvas)

public int getIntrinsicHeight()

public int getIntrinsicWidth()

public int getOpacity()

public android.graphics.Picture getPicture()

public void setAlpha(
int)

public void setColorFilter(
android.graphics.ColorFilter)

public void setDither(
boolean)

public void setFilterBitmap(
boolean)

public void setPicture(
android.graphics.Picture)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/RotateDrawable; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.graphics.drawable.RotateDrawable$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/RotateDrawable; )
@dalvik.annotation.InnerClass (accessFlags =24 name =RotateState )
final class android.graphics.drawable.RotateDrawable$RotateState extends android.graphics.drawable.Drawable$ConstantState

----------------FIELDS----------------

private boolean mCanConstantState

 int mChangingConfigurations

private boolean mCheckedConstantState

 float mCurrentDegrees

 android.graphics.drawable.Drawable mDrawable

 float mFromDegrees

 float mPivotX

 boolean mPivotXRel

 float mPivotY

 boolean mPivotYRel

 float mToDegrees
----------------METHODS----------------

public void <init>(
android.graphics.drawable.RotateDrawable$RotateState
android.graphics.drawable.RotateDrawable)

public boolean canConstantState()

public int getChangingConfigurations()

public android.graphics.drawable.Drawable newDrawable()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/drawable/RotateDrawable$1;Landroid/graphics/drawable/RotateDrawable$RotateState; )
public class android.graphics.drawable.RotateDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable$Callback

----------------FIELDS----------------

private static final float MAX_LEVEL

private android.graphics.drawable.RotateDrawable$RotateState mState
----------------METHODS----------------

public void <init>()

private void <init>(
android.graphics.drawable.RotateDrawable$RotateState)

 void <init>(
android.graphics.drawable.RotateDrawable$RotateState
android.graphics.drawable.RotateDrawable$1)

public void draw(
android.graphics.Canvas)

public int getChangingConfigurations()

public android.graphics.drawable.Drawable$ConstantState getConstantState()

public int getIntrinsicHeight()

public int getIntrinsicWidth()

public int getOpacity()

public boolean getPadding(
android.graphics.Rect)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public void inflate(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

public void invalidateDrawable(
android.graphics.drawable.Drawable)

public boolean isStateful()

protected void onBoundsChange(
android.graphics.Rect)

protected boolean onLevelChange(
int)

protected boolean onStateChange(
int[])

public void scheduleDrawable(
android.graphics.drawable.Drawable
java.lang.Runnable
long)

public void setAlpha(
int)

public void setColorFilter(
android.graphics.ColorFilter)

public boolean setVisible(
boolean
boolean)

public void unscheduleDrawable(
android.graphics.drawable.Drawable
java.lang.Runnable)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/ScaleDrawable; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.graphics.drawable.ScaleDrawable$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =24 name =ScaleState )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/ScaleDrawable; )
final class android.graphics.drawable.ScaleDrawable$ScaleState extends android.graphics.drawable.Drawable$ConstantState

----------------FIELDS----------------

private boolean mCanConstantState

 int mChangingConfigurations

private boolean mCheckedConstantState

 android.graphics.drawable.Drawable mDrawable

 int mGravity

 float mScaleHeight

 float mScaleWidth
----------------METHODS----------------

 void <init>(
android.graphics.drawable.ScaleDrawable$ScaleState
android.graphics.drawable.ScaleDrawable)

 boolean canConstantState()

public int getChangingConfigurations()

public android.graphics.drawable.Drawable newDrawable()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/drawable/ScaleDrawable$1;Landroid/graphics/drawable/ScaleDrawable$ScaleState; )
public class android.graphics.drawable.ScaleDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable$Callback

----------------FIELDS----------------

private android.graphics.drawable.ScaleDrawable$ScaleState mScaleState

private final android.graphics.Rect mTmpRect
----------------METHODS----------------

 void <init>()

public void <init>(
android.graphics.drawable.Drawable
int
float
float)

private void <init>(
android.graphics.drawable.ScaleDrawable$ScaleState)

 void <init>(
android.graphics.drawable.ScaleDrawable$ScaleState
android.graphics.drawable.ScaleDrawable$1)

private static float getPercent(
android.content.res.TypedArray
int)

public void draw(
android.graphics.Canvas)

public int getChangingConfigurations()

public android.graphics.drawable.Drawable$ConstantState getConstantState()

public int getIntrinsicHeight()

public int getIntrinsicWidth()

public int getOpacity()

public boolean getPadding(
android.graphics.Rect)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public void inflate(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

public void invalidateDrawable(
android.graphics.drawable.Drawable)

public boolean isStateful()

protected void onBoundsChange(
android.graphics.Rect)

protected boolean onLevelChange(
int)

protected boolean onStateChange(
int[])

public void scheduleDrawable(
android.graphics.drawable.Drawable
java.lang.Runnable
long)

public void setAlpha(
int)

public void setColorFilter(
android.graphics.ColorFilter)

public boolean setVisible(
boolean
boolean)

public void unscheduleDrawable(
android.graphics.drawable.Drawable
java.lang.Runnable)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/ShapeDrawable; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.graphics.drawable.ShapeDrawable$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =ShaderFactory )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/ShapeDrawable; )
public abstract class android.graphics.drawable.ShapeDrawable$ShaderFactory extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public abstract android.graphics.Shader resize(
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =24 name =ShapeState )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/ShapeDrawable; )
final class android.graphics.drawable.ShapeDrawable$ShapeState extends android.graphics.drawable.Drawable$ConstantState

----------------FIELDS----------------

 int mAlpha

 int mChangingConfigurations

 int mIntrinsicHeight

 int mIntrinsicWidth

 android.graphics.Rect mPadding

 android.graphics.Paint mPaint

 android.graphics.drawable.ShapeDrawable$ShaderFactory mShaderFactory

 android.graphics.drawable.shapes.Shape mShape
----------------METHODS----------------

 void <init>(
android.graphics.drawable.ShapeDrawable$ShapeState)

public int getChangingConfigurations()

public android.graphics.drawable.Drawable newDrawable()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/StateListDrawable; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.graphics.drawable.StateListDrawable$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/StateListDrawable; )
@dalvik.annotation.InnerClass (accessFlags =24 name =StateListState )
final class android.graphics.drawable.StateListDrawable$StateListState extends android.graphics.drawable.DrawableContainer$DrawableContainerState

----------------FIELDS----------------

private int[][] mStateSets
----------------METHODS----------------

 void <init>(
android.graphics.drawable.StateListDrawable$StateListState
android.graphics.drawable.StateListDrawable)

static int access$000(
android.graphics.drawable.StateListDrawable$StateListState
int[])

private int indexOfStateSet(
int[])

 int addStateSet(
int[]
android.graphics.drawable.Drawable)

public void growArray(
int
int)

public android.graphics.drawable.Drawable newDrawable()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/drawable/StateListDrawable$1;Landroid/graphics/drawable/StateListDrawable$StateListState; )
public class android.graphics.drawable.StateListDrawable extends android.graphics.drawable.DrawableContainer

----------------FIELDS----------------

private final android.graphics.drawable.StateListDrawable$StateListState mStateListState
----------------METHODS----------------

public void <init>()

private void <init>(
android.graphics.drawable.StateListDrawable$StateListState)

 void <init>(
android.graphics.drawable.StateListDrawable$StateListState
android.graphics.drawable.StateListDrawable$1)

public void addState(
int[]
android.graphics.drawable.Drawable)

 android.graphics.drawable.StateListDrawable$StateListState getStateListState()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public void inflate(
android.content.res.Resources
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

public boolean isStateful()

protected boolean onStateChange(
int[])

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/TransitionDrawable; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.graphics.drawable.TransitionDrawable$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =TransitionState )
@dalvik.annotation.EnclosingClass (value =Landroid/graphics/drawable/TransitionDrawable; )
 class android.graphics.drawable.TransitionDrawable$TransitionState extends android.graphics.drawable.LayerDrawable$LayerState

----------------FIELDS----------------

 int mAlpha

 boolean mCrossFade

 int mDuration
----------------METHODS----------------

 void <init>(
android.graphics.drawable.TransitionDrawable$TransitionState
android.graphics.drawable.TransitionDrawable)

public int getChangingConfigurations()

public android.graphics.drawable.Drawable newDrawable()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/graphics/drawable/TransitionDrawable$1;Landroid/graphics/drawable/TransitionDrawable$TransitionState; )
public class android.graphics.drawable.TransitionDrawable extends android.graphics.drawable.LayerDrawable implements android.graphics.drawable.Drawable$Callback

----------------FIELDS----------------

private static final int TRANSITION_NONE

private static final int TRANSITION_RUNNING

private static final int TRANSITION_STARTING

private int mDuration

private int mFrom

private boolean mReverse

private long mStartTimeMillis

private android.graphics.drawable.TransitionDrawable$TransitionState mState

private int mTo

private int mTransitionState
----------------METHODS----------------

 void <init>()

private void <init>(
android.graphics.drawable.TransitionDrawable$TransitionState)

 void <init>(
android.graphics.drawable.TransitionDrawable$TransitionState
android.graphics.drawable.TransitionDrawable$1)

 android.graphics.drawable.LayerDrawable$LayerState createConstantState(
android.graphics.drawable.LayerDrawable$LayerState)

public void draw(
android.graphics.Canvas)

public boolean isCrossFadeEnabled()

public void resetTransition()

public void reverseTransition(
int)

public void setCrossFadeEnabled(
boolean)

public void startTransition(
int)

________________CLASS________________


public abstract class android.graphics.drawable.shapes.Shape extends java.lang.Object

----------------FIELDS----------------

private float mHeight

private float mWidth
----------------METHODS----------------

public void <init>()

public abstract void draw(
android.graphics.Canvas
android.graphics.Paint)

public final float getHeight()

public final float getWidth()

public boolean hasAlpha()

protected void onResize(
float
float)

public final void resize(
float
float)

________________CLASS________________


public class android.graphics.drawable.shapes.RectShape extends android.graphics.drawable.shapes.Shape

----------------FIELDS----------------

private android.graphics.RectF mRect
----------------METHODS----------------

public void <init>()

public void draw(
android.graphics.Canvas
android.graphics.Paint)

protected void onResize(
float
float)

protected final android.graphics.RectF rect()

________________CLASS________________


public class android.graphics.drawable.shapes.ArcShape extends android.graphics.drawable.shapes.RectShape

----------------FIELDS----------------

private float mStart

private float mSweep
----------------METHODS----------------

public void <init>(
float
float)

public void draw(
android.graphics.Canvas
android.graphics.Paint)

________________CLASS________________


public class android.graphics.drawable.shapes.OvalShape extends android.graphics.drawable.shapes.RectShape

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void draw(
android.graphics.Canvas
android.graphics.Paint)

________________CLASS________________


public class android.graphics.drawable.shapes.PathShape extends android.graphics.drawable.shapes.Shape

----------------FIELDS----------------

private android.graphics.Path mPath

private float mScaleX

private float mScaleY

private float mStdHeight

private float mStdWidth
----------------METHODS----------------

public void <init>(
android.graphics.Path
float
float)

public void draw(
android.graphics.Canvas
android.graphics.Paint)

protected void onResize(
float
float)

________________CLASS________________


public class android.graphics.drawable.shapes.RoundRectShape extends android.graphics.drawable.shapes.RectShape

----------------FIELDS----------------

private float[] mInnerRadii

private android.graphics.RectF mInnerRect

private android.graphics.RectF mInset

private float[] mOuterRadii

private android.graphics.Path mPath
----------------METHODS----------------

public void <init>(
float[]
android.graphics.RectF
float[])

public void draw(
android.graphics.Canvas
android.graphics.Paint)

protected void onResize(
float
float)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/hardware/Camera; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.hardware.Camera$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/hardware/Camera; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =AutoFocusCallback )
public abstract interface class android.hardware.Camera$AutoFocusCallback extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onAutoFocus(
boolean
android.hardware.Camera)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/hardware/Camera; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ErrorCallback )
public abstract interface class android.hardware.Camera$ErrorCallback extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onError(
int
android.hardware.Camera)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =EventHandler )
@dalvik.annotation.EnclosingClass (value =Landroid/hardware/Camera; )
 class android.hardware.Camera$EventHandler extends android.os.Handler

----------------FIELDS----------------

private android.hardware.Camera mCamera

final android.hardware.Camera this$0
----------------METHODS----------------

public void <init>(
android.hardware.Camera
android.hardware.Camera
android.os.Looper)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/hardware/Camera; )
@dalvik.annotation.InnerClass (accessFlags =1 name =Parameters )
public class android.hardware.Camera$Parameters extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>; )
private java.util.HashMap mMap

final android.hardware.Camera this$0
----------------METHODS----------------

private void <init>(
android.hardware.Camera)

 void <init>(
android.hardware.Camera
android.hardware.Camera$1)

private java.lang.String cameraFormatForPixelFormat(
int)

private int pixelFormatForCameraFormat(
java.lang.String)

public void dump()

public java.lang.String flatten()

public java.lang.String get(
java.lang.String)

public int getInt(
java.lang.String)

public int getPictureFormat()

public android.hardware.Camera$Size getPictureSize()

public int getPreviewFormat()

public int getPreviewFrameRate()

public android.hardware.Camera$Size getPreviewSize()

public void remove(
java.lang.String)

public void set(
java.lang.String
int)

public void set(
java.lang.String
java.lang.String)

public void setPictureFormat(
int)

public void setPictureSize(
int
int)

public void setPreviewFormat(
int)

public void setPreviewFrameRate(
int)

public void setPreviewSize(
int
int)

public void unflatten(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/hardware/Camera; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =PictureCallback )
public abstract interface class android.hardware.Camera$PictureCallback extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onPictureTaken(
byte[]
android.hardware.Camera)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/hardware/Camera; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =PreviewCallback )
public abstract interface class android.hardware.Camera$PreviewCallback extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onPreviewFrame(
byte[]
android.hardware.Camera)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =ShutterCallback )
@dalvik.annotation.EnclosingClass (value =Landroid/hardware/Camera; )
public abstract interface class android.hardware.Camera$ShutterCallback extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onShutter()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/hardware/Camera; )
@dalvik.annotation.InnerClass (accessFlags =1 name =Size )
public class android.hardware.Camera$Size extends java.lang.Object

----------------FIELDS----------------

public int height

final android.hardware.Camera this$0

public int width
----------------METHODS----------------

public void <init>(
android.hardware.Camera
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/hardware/Camera$1;Landroid/hardware/Camera$Parameters;Landroid/hardware/Camera$Size;Landroid/hardware/Camera$ErrorCallback;Landroid/hardware/Camera$PictureCallback;Landroid/hardware/Camera$ShutterCallback;Landroid/hardware/Camera$AutoFocusCallback;Landroid/hardware/Camera$EventHandler;Landroid/hardware/Camera$PreviewCallback; )
public class android.hardware.Camera extends java.lang.Object

----------------FIELDS----------------

private static final int AUTOFOCUS_CALLBACK

public static final int CAMERA_ERROR_SERVER_DIED

public static final int CAMERA_ERROR_UNKNOWN

private static final int ERROR_CALLBACK

private static final int JPEG_PICTURE_CALLBACK

private static final int PREVIEW_CALLBACK

private static final int RAW_PICTURE_CALLBACK

private static final int SHUTTER_CALLBACK

private static final java.lang.String TAG

private android.hardware.Camera$AutoFocusCallback mAutoFocusCallback

private android.hardware.Camera$ErrorCallback mErrorCallback

private android.hardware.Camera$EventHandler mEventHandler

private android.hardware.Camera$PictureCallback mJpegCallback

private int mListenerContext

private int mNativeContext

private android.hardware.Camera$PreviewCallback mPreviewCallback

private android.hardware.Camera$PictureCallback mRawImageCallback

private android.hardware.Camera$ShutterCallback mShutterCallback
----------------METHODS----------------

 void <init>()

static android.hardware.Camera$ShutterCallback access$000(
android.hardware.Camera)

static android.hardware.Camera$PictureCallback access$100(
android.hardware.Camera)

static android.hardware.Camera$PictureCallback access$200(
android.hardware.Camera)

static android.hardware.Camera$PreviewCallback access$300(
android.hardware.Camera)

static android.hardware.Camera$AutoFocusCallback access$400(
android.hardware.Camera)

static android.hardware.Camera$ErrorCallback access$500(
android.hardware.Camera)

private final native void native_autoFocus()

private final native java.lang.String native_getParameters()

private final native void native_release()

private final native void native_setParameters(
java.lang.String)

private final native void native_setup(
java.lang.Object)

private final native void native_takePicture()

public static android.hardware.Camera open()

private static void postEventFromNative(
java.lang.Object
int
int
int
java.lang.Object)

private final native void setHasPreviewCallback(
boolean)

private final native void setPreviewDisplay(
android.view.Surface)

public final void autoFocus(
android.hardware.Camera$AutoFocusCallback)

protected void finalize()

public android.hardware.Camera$Parameters getParameters()

public final void release()

public final void setErrorCallback(
android.hardware.Camera$ErrorCallback)

public void setParameters(
android.hardware.Camera$Parameters)

public final void setPreviewCallback(
android.hardware.Camera$PreviewCallback)

public final void setPreviewDisplay(
android.view.SurfaceHolder)

public final native void startPreview()

public final native void stopPreview()

public final void takePicture(
android.hardware.Camera$ShutterCallback
android.hardware.Camera$PictureCallback
android.hardware.Camera$PictureCallback)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/hardware/ISensorService$Stub; )
public abstract interface class android.hardware.ISensorService extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean enableSensor(
android.os.IBinder
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.os.ParcelFileDescriptor getDataChanel()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void reportAccuracy(
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/hardware/ISensorService$Stub; )
 class android.hardware.ISensorService$Stub$Proxy extends java.lang.Object implements android.hardware.ISensorService

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean enableSensor(
android.os.IBinder
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.os.ParcelFileDescriptor getDataChanel()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void reportAccuracy(
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/hardware/ISensorService$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/hardware/ISensorService; )
public abstract class android.hardware.ISensorService$Stub extends android.os.Binder implements android.hardware.ISensorService

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_enableSensor

static final int TRANSACTION_getDataChanel

static final int TRANSACTION_reportAccuracy
----------------METHODS----------------

public void <init>()

public static android.hardware.ISensorService asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________


public abstract interface class android.hardware.SensorListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onAccuracyChanged(
int
int)

public abstract void onSensorChanged(
int
float[])

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/hardware/SensorManager; )
 class android.hardware.SensorManager$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/hardware/SensorManager$ListenerDelegate; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.hardware.SensorManager$ListenerDelegate$1 extends android.os.Handler

----------------FIELDS----------------

final android.hardware.SensorManager$ListenerDelegate this$1
----------------METHODS----------------

 void <init>(
android.hardware.SensorManager$ListenerDelegate
android.os.Looper)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =ListenerDelegate )
@dalvik.annotation.EnclosingClass (value =Landroid/hardware/SensorManager; )
 class android.hardware.SensorManager$ListenerDelegate extends android.os.Binder

----------------FIELDS----------------

private final android.os.Handler mHandler

private android.hardware.SensorListener mListener

private int mSensors

private float[] mValuesPool

final android.hardware.SensorManager this$0
----------------METHODS----------------

 void <init>(
android.hardware.SensorManager
android.hardware.SensorListener
int)

static android.hardware.SensorListener access$1000(
android.hardware.SensorManager$ListenerDelegate)

static float[] access$1100(
android.hardware.SensorManager$ListenerDelegate)

static float[] access$1102(
android.hardware.SensorManager$ListenerDelegate
float[])

static int access$300(
android.hardware.SensorManager$ListenerDelegate)

 int addSensors(
int)

 boolean hasSensor(
int)

 void onSensorChanged(
int
float[]
int)

 int removeSensors(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/hardware/SensorManager$SensorThread; )
@dalvik.annotation.InnerClass (accessFlags =2 name =SensorThreadRunnable )
 class android.hardware.SensorManager$SensorThread$SensorThreadRunnable extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

private final byte[] mAccuracies

private android.os.ParcelFileDescriptor mSensorDataFd

private android.hardware.ISensorService mSensorService

final android.hardware.SensorManager$SensorThread this$0
----------------METHODS----------------

 void <init>(
android.hardware.SensorManager$SensorThread
android.os.ParcelFileDescriptor
android.hardware.ISensorService)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/hardware/SensorManager; )
@dalvik.annotation.InnerClass (accessFlags =10 name =SensorThread )
@dalvik.annotation.MemberClasses (value =Landroid/hardware/SensorManager$SensorThread$SensorThreadRunnable; )
 class android.hardware.SensorManager$SensorThread extends java.lang.Object

----------------FIELDS----------------

private java.lang.Thread mThread
----------------METHODS----------------

private void <init>()

 void <init>(
android.hardware.SensorManager$1)

static java.lang.Thread access$602(
android.hardware.SensorManager$SensorThread
java.lang.Thread)

 void startLocked(
android.hardware.ISensorService)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/IRotationWatcher$Stub; )
public abstract interface class android.view.IRotationWatcher extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onRotationChanged(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/IRotationWatcher; )
@dalvik.annotation.MemberClasses (value =Landroid/view/IRotationWatcher$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.view.IRotationWatcher$Stub extends android.os.Binder implements android.view.IRotationWatcher

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_onRotationChanged
----------------METHODS----------------

public void <init>()

public static android.view.IRotationWatcher asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/hardware/SensorManager$1;Landroid/hardware/SensorManager$ListenerDelegate;Landroid/hardware/SensorManager$SensorThread; )
public class android.hardware.SensorManager extends android.view.IRotationWatcher$Stub

----------------FIELDS----------------

public static final int DATA_X

public static final int DATA_Y

public static final int DATA_Z

public static final float GRAVITY_DEATH_STAR_I

public static final float GRAVITY_EARTH

public static final float GRAVITY_JUPITER

public static final float GRAVITY_MARS

public static final float GRAVITY_MERCURY

public static final float GRAVITY_MOON

public static final float GRAVITY_NEPTUN

public static final float GRAVITY_PLUTO

public static final float GRAVITY_SATURN

public static final float GRAVITY_SUN

public static final float GRAVITY_THE_ISLAND

public static final float GRAVITY_URANUS

public static final float GRAVITY_VENUS

public static final float LIGHT_CLOUDY

public static final float LIGHT_FULLMOON

public static final float LIGHT_NO_MOON

public static final float LIGHT_OVERCAST

public static final float LIGHT_SHADE

public static final float LIGHT_SUNLIGHT

public static final float LIGHT_SUNLIGHT_MAX

public static final float LIGHT_SUNRISE

public static final float MAGNETIC_FIELD_EARTH_MAX

public static final float MAGNETIC_FIELD_EARTH_MIN

public static final int RAW_DATA_INDEX

public static final int RAW_DATA_X

public static final int RAW_DATA_Y

public static final int RAW_DATA_Z

public static final int SENSOR_ACCELEROMETER

public static final int SENSOR_ALL

public static final int SENSOR_DELAY_FASTEST

public static final int SENSOR_DELAY_GAME

public static final int SENSOR_DELAY_NORMAL

public static final int SENSOR_DELAY_UI

private static final int SENSOR_DISABLE

public static final int SENSOR_LIGHT

public static final int SENSOR_MAGNETIC_FIELD

public static final int SENSOR_MAX

public static final int SENSOR_MIN

private static final int SENSOR_ORDER_MASK

public static final int SENSOR_ORIENTATION

public static final int SENSOR_ORIENTATION_RAW

public static final int SENSOR_PROXIMITY

public static final int SENSOR_STATUS_ACCURACY_HIGH

public static final int SENSOR_STATUS_ACCURACY_LOW

public static final int SENSOR_STATUS_ACCURACY_MEDIUM

private static final int SENSOR_STATUS_SHIFT

public static final int SENSOR_STATUS_UNRELIABLE

public static final int SENSOR_TEMPERATURE

public static final int SENSOR_TRICORDER

public static final float STANDARD_GRAVITY

private static final java.lang.String TAG
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/hardware/SensorManager$ListenerDelegate;>; )
private static final java.util.ArrayList sListeners

private static int sRotation

private static final android.hardware.SensorManager$SensorThread sSensorThread

private static android.view.IWindowManager sWindowManager

private android.os.Looper mLooper

private android.hardware.ISensorService mSensorService
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.os.Looper)

private static native int _sensors_data_close()

private static native int _sensors_data_get_sensors()

private static native int _sensors_data_open(
java.io.FileDescriptor)

private static native int _sensors_data_poll(
float[]
int)

static java.util.ArrayList access$100()

static int access$200(
java.io.FileDescriptor)

static int access$400(
float[]
int)

static int access$500()

static int access$700()

static void access$800(
int
float[]
int)

static android.os.Looper access$900(
android.hardware.SensorManager)

private static int getRotation()

private static void mapSensorDataToWindow(
int
float[]
int)

public int getSensors()

public void onRotationChanged(
int)

public boolean registerListener(
android.hardware.SensorListener
int)

public boolean registerListener(
android.hardware.SensorListener
int
int)

public void unregisterListener(
android.hardware.SensorListener)

public void unregisterListener(
android.hardware.SensorListener
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/location/Address;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/location/Address; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.location.Address$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.location.Address createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.location.Address[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.location.Address extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/location/Address;>; )
public static final android.os.Parcelable$Creator CREATOR
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/String;>; )
private java.util.HashMap mAddressLines

private java.lang.String mAdminArea

private java.lang.String mCountryCode

private java.lang.String mCountryName

private android.os.Bundle mExtras

private java.lang.String mFeatureName

private boolean mHasLatitude

private boolean mHasLongitude

private double mLatitude

private java.util.Locale mLocale

private java.lang.String mLocality

private double mLongitude

private int mMaxAddressLineIndex

private java.lang.String mPhone

private java.lang.String mPostalCode

private java.lang.String mSubAdminArea

private java.lang.String mThoroughfare

private java.lang.String mUrl
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.util.Locale)

static java.util.HashMap access$000(
android.location.Address)

static java.util.HashMap access$002(
android.location.Address
java.util.HashMap)

static int access$100(
android.location.Address)

static boolean access$1000(
android.location.Address)

static boolean access$1002(
android.location.Address
boolean)

static int access$102(
android.location.Address
int)

static double access$1102(
android.location.Address
double)

static boolean access$1200(
android.location.Address)

static boolean access$1202(
android.location.Address
boolean)

static double access$1302(
android.location.Address
double)

static java.lang.String access$1402(
android.location.Address
java.lang.String)

static java.lang.String access$1502(
android.location.Address
java.lang.String)

static android.os.Bundle access$1602(
android.location.Address
android.os.Bundle)

static java.lang.String access$202(
android.location.Address
java.lang.String)

static java.lang.String access$302(
android.location.Address
java.lang.String)

static java.lang.String access$402(
android.location.Address
java.lang.String)

static java.lang.String access$502(
android.location.Address
java.lang.String)

static java.lang.String access$602(
android.location.Address
java.lang.String)

static java.lang.String access$702(
android.location.Address
java.lang.String)

static java.lang.String access$802(
android.location.Address
java.lang.String)

static java.lang.String access$902(
android.location.Address
java.lang.String)

public void clearLatitude()

public void clearLongitude()

public int describeContents()

public java.lang.String getAddressLine(
int)

public java.lang.String getAdminArea()

public java.lang.String getCountryCode()

public java.lang.String getCountryName()

public android.os.Bundle getExtras()

public java.lang.String getFeatureName()

public double getLatitude()

public java.util.Locale getLocale()

public java.lang.String getLocality()

public double getLongitude()

public int getMaxAddressLineIndex()

public java.lang.String getPhone()

public java.lang.String getPostalCode()

public java.lang.String getSubAdminArea()

public java.lang.String getThoroughfare()

public java.lang.String getUrl()

public boolean hasLatitude()

public boolean hasLongitude()

public void setAddressLine(
int
java.lang.String)

public void setAdminArea(
java.lang.String)

public void setCountryCode(
java.lang.String)

public void setCountryName(
java.lang.String)

public void setExtras(
android.os.Bundle)

public void setFeatureName(
java.lang.String)

public void setLatitude(
double)

public void setLocality(
java.lang.String)

public void setLongitude(
double)

public void setPhone(
java.lang.String)

public void setPostalCode(
java.lang.String)

public void setSubAdminArea(
java.lang.String)

public void setThoroughfare(
java.lang.String)

public void setUrl(
java.lang.String)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/location/Criteria; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/location/Criteria;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.location.Criteria$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.location.Criteria createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.location.Criteria[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.location.Criteria extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------

public static final int ACCURACY_COARSE

public static final int ACCURACY_FINE
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/location/Criteria;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final int NO_REQUIREMENT

public static final int POWER_HIGH

public static final int POWER_LOW

public static final int POWER_MEDIUM

private int mAccuracy

private boolean mAltitudeRequired

private boolean mBearingRequired

private boolean mCostAllowed

private int mPowerRequirement

private boolean mSpeedRequired
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
android.location.Criteria)

static int access$002(
android.location.Criteria
int)

static int access$102(
android.location.Criteria
int)

static boolean access$202(
android.location.Criteria
boolean)

static boolean access$302(
android.location.Criteria
boolean)

static boolean access$402(
android.location.Criteria
boolean)

static boolean access$502(
android.location.Criteria
boolean)

public int describeContents()

public int getAccuracy()

public int getPowerRequirement()

public boolean isAltitudeRequired()

public boolean isBearingRequired()

public boolean isCostAllowed()

public boolean isSpeedRequired()

public void setAccuracy(
int)

public void setAltitudeRequired(
boolean)

public void setBearingRequired(
boolean)

public void setCostAllowed(
boolean)

public void setPowerRequirement(
int)

public void setSpeedRequired(
boolean)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public abstract class android.location.LocationProvider extends java.lang.Object

----------------FIELDS----------------

public static final int AVAILABLE

static final java.lang.String BAD_CHARS_REGEX

public static final int OUT_OF_SERVICE

private static final java.lang.String TAG

public static final int TEMPORARILY_UNAVAILABLE

private java.lang.String mName
----------------METHODS----------------

 void <init>(
java.lang.String)

public abstract int getAccuracy()

public java.lang.String getName()

public abstract int getPowerRequirement()

public abstract boolean hasMonetaryCost()

public boolean meetsCriteria(
android.location.Criteria)

public abstract boolean requiresCell()

public abstract boolean requiresNetwork()

public abstract boolean requiresSatellite()

public abstract boolean supportsAltitude()

public abstract boolean supportsBearing()

public abstract boolean supportsSpeed()

________________CLASS________________


 class android.location.DummyLocationProvider extends android.location.LocationProvider

----------------FIELDS----------------

private static final java.lang.String TAG

 int mAccuracy

 boolean mHasMonetaryCost

 java.lang.String mName

 int mPowerRequirement

 boolean mRequiresCell

 boolean mRequiresNetwork

 boolean mRequiresSatellite

 boolean mSupportsAltitude

 boolean mSupportsBearing

 boolean mSupportsSpeed
----------------METHODS----------------

 void <init>(
java.lang.String)

public int getAccuracy()

public int getPowerRequirement()

public boolean hasMonetaryCost()

public boolean requiresCell()

public boolean requiresNetwork()

public boolean requiresSatellite()

public void setAccuracy(
int)

public void setHasMonetaryCost(
boolean)

public void setPowerRequirement(
int)

public void setRequiresCell(
boolean)

public void setRequiresNetwork(
boolean)

public void setRequiresSatellite(
boolean)

public void setSupportsAltitude(
boolean)

public void setSupportsBearing(
boolean)

public void setSupportsSpeed(
boolean)

public boolean supportsAltitude()

public boolean supportsBearing()

public boolean supportsSpeed()

________________CLASS________________


public final class android.location.Geocoder extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG

private java.lang.String mAppName

private java.lang.String mCountry

private java.lang.String mLanguage

private android.location.ILocationManager mService

private java.lang.String mVariant
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
java.util.Locale)
@dalvik.annotation.Signature (value =(DDI)Ljava/util/List<Landroid/location/Address;>; )
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.util.List getFromLocation(
double
double
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
@dalvik.annotation.Signature (value =(Ljava/lang/String;I)Ljava/util/List<Landroid/location/Address;>; )
public java.util.List getFromLocationName(
java.lang.String
int)
@dalvik.annotation.Signature (value =(Ljava/lang/String;IDDDD)Ljava/util/List<Landroid/location/Address;>; )
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.util.List getFromLocationName(
java.lang.String
int
double
double
double
double)

________________CLASS________________


public abstract interface class android.location.GpsStatusListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onFirstFix(
int)

public abstract void onGpsStarted()

public abstract void onGpsStopped()

public abstract void onSvStatusChanged(
int
int[]
float[]
float[]
float[]
int
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/location/IGpsStatusListener$Stub; )
public abstract interface class android.location.IGpsStatusListener extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onFirstFix(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onGpsStarted()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onGpsStopped()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onSvStatusChanged(
int
int[]
float[]
float[]
float[]
int
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/location/IGpsStatusListener$Stub; )
 class android.location.IGpsStatusListener$Stub$Proxy extends java.lang.Object implements android.location.IGpsStatusListener

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onFirstFix(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onGpsStarted()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onGpsStopped()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onSvStatusChanged(
int
int[]
float[]
float[]
float[]
int
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/location/IGpsStatusListener; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/location/IGpsStatusListener$Stub$Proxy; )
public abstract class android.location.IGpsStatusListener$Stub extends android.os.Binder implements android.location.IGpsStatusListener

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_onFirstFix

static final int TRANSACTION_onGpsStarted

static final int TRANSACTION_onGpsStopped

static final int TRANSACTION_onSvStatusChanged
----------------METHODS----------------

public void <init>()

public static android.location.IGpsStatusListener asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/location/ILocationListener$Stub; )
public abstract interface class android.location.ILocationListener extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onLocationChanged(
android.location.Location)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onProviderDisabled(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onProviderEnabled(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onStatusChanged(
java.lang.String
int
android.os.Bundle)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/location/ILocationListener$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.location.ILocationListener$Stub$Proxy extends java.lang.Object implements android.location.ILocationListener

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onLocationChanged(
android.location.Location)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onProviderDisabled(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onProviderEnabled(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onStatusChanged(
java.lang.String
int
android.os.Bundle)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/location/ILocationListener$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/location/ILocationListener; )
public abstract class android.location.ILocationListener$Stub extends android.os.Binder implements android.location.ILocationListener

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_onLocationChanged

static final int TRANSACTION_onProviderDisabled

static final int TRANSACTION_onProviderEnabled

static final int TRANSACTION_onStatusChanged
----------------METHODS----------------

public void <init>()

public static android.location.ILocationListener asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/location/ILocationManager$Stub; )
public abstract interface class android.location.ILocationManager extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean addGpsStatusListener(
android.location.IGpsStatusListener)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void addProximityAlert(
double
double
float
long
android.app.PendingIntent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void addTestProvider(
java.lang.String
boolean
boolean
boolean
boolean
boolean
boolean
boolean
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void clearTestProviderEnabled(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void clearTestProviderLocation(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void clearTestProviderStatus(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.util.List getAllProviders()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(DDILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List<Landroid/location/Address;>;)Ljava/lang/String; )
public abstract java.lang.String getFromLocation(
double
double
int
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.util.List)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Ljava/lang/String;DDDDILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List<Landroid/location/Address;>;)Ljava/lang/String; )
public abstract java.lang.String getFromLocationName(
java.lang.String
double
double
double
double
int
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.util.List)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.location.Location getLastKnownLocation(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.os.Bundle getProviderInfo(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.util.List getProviders(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean isProviderEnabled(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void removeGpsStatusListener(
android.location.IGpsStatusListener)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void removeProximityAlert(
android.app.PendingIntent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void removeTestProvider(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void removeUpdates(
android.location.ILocationListener)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void requestLocationUpdates(
java.lang.String
long
float
android.location.ILocationListener)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean sendExtraCommand(
java.lang.String
java.lang.String
android.os.Bundle)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setTestProviderEnabled(
java.lang.String
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setTestProviderLocation(
java.lang.String
android.location.Location)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setTestProviderStatus(
java.lang.String
int
android.os.Bundle
long)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void updateProviders()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/location/ILocationManager$Stub; )
 class android.location.ILocationManager$Stub$Proxy extends java.lang.Object implements android.location.ILocationManager

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean addGpsStatusListener(
android.location.IGpsStatusListener)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void addProximityAlert(
double
double
float
long
android.app.PendingIntent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void addTestProvider(
java.lang.String
boolean
boolean
boolean
boolean
boolean
boolean
boolean
int
int)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void clearTestProviderEnabled(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void clearTestProviderLocation(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void clearTestProviderStatus(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.util.List getAllProviders()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(DDILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List<Landroid/location/Address;>;)Ljava/lang/String; )
public java.lang.String getFromLocation(
double
double
int
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.util.List)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Ljava/lang/String;DDDDILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List<Landroid/location/Address;>;)Ljava/lang/String; )
public java.lang.String getFromLocationName(
java.lang.String
double
double
double
double
int
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.util.List)

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.location.Location getLastKnownLocation(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.os.Bundle getProviderInfo(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.util.List getProviders(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean isProviderEnabled(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void removeGpsStatusListener(
android.location.IGpsStatusListener)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void removeProximityAlert(
android.app.PendingIntent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void removeTestProvider(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void removeUpdates(
android.location.ILocationListener)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void requestLocationUpdates(
java.lang.String
long
float
android.location.ILocationListener)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean sendExtraCommand(
java.lang.String
java.lang.String
android.os.Bundle)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setTestProviderEnabled(
java.lang.String
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setTestProviderLocation(
java.lang.String
android.location.Location)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setTestProviderStatus(
java.lang.String
int
android.os.Bundle
long)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void updateProviders()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/location/ILocationManager$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/location/ILocationManager; )
public abstract class android.location.ILocationManager$Stub extends android.os.Binder implements android.location.ILocationManager

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_addGpsStatusListener

static final int TRANSACTION_addProximityAlert

static final int TRANSACTION_addTestProvider

static final int TRANSACTION_clearTestProviderEnabled

static final int TRANSACTION_clearTestProviderLocation

static final int TRANSACTION_clearTestProviderStatus

static final int TRANSACTION_getAllProviders

static final int TRANSACTION_getFromLocation

static final int TRANSACTION_getFromLocationName

static final int TRANSACTION_getLastKnownLocation

static final int TRANSACTION_getProviderInfo

static final int TRANSACTION_getProviders

static final int TRANSACTION_isProviderEnabled

static final int TRANSACTION_removeGpsStatusListener

static final int TRANSACTION_removeProximityAlert

static final int TRANSACTION_removeTestProvider

static final int TRANSACTION_removeUpdates

static final int TRANSACTION_requestLocationUpdates

static final int TRANSACTION_sendExtraCommand

static final int TRANSACTION_setTestProviderEnabled

static final int TRANSACTION_setTestProviderLocation

static final int TRANSACTION_setTestProviderStatus

static final int TRANSACTION_updateProviders
----------------METHODS----------------

public void <init>()

public static android.location.ILocationManager asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/location/Location; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/location/Location;>; )
final class android.location.Location$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.location.Location createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.location.Location[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.location.Location extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/location/Location;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final int FORMAT_DEGREES

public static final int FORMAT_MINUTES

public static final int FORMAT_SECONDS

private float mAccuracy

private double mAltitude

private float mBearing

private float mDistance

private android.os.Bundle mExtras

private boolean mHasAccuracy

private boolean mHasAltitude

private boolean mHasBearing

private boolean mHasSpeed

private float mInitialBearing

private double mLat1

private double mLat2

private double mLatitude

private double mLon1

private double mLon2

private double mLongitude

private java.lang.String mProvider

private float[] mResults

private float mSpeed

private long mTime
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.location.Location)

public void <init>(
java.lang.String)

static long access$002(
android.location.Location
long)

static float access$1002(
android.location.Location
float)

static double access$102(
android.location.Location
double)

static android.os.Bundle access$1102(
android.location.Location
android.os.Bundle)

static double access$202(
android.location.Location
double)

static boolean access$302(
android.location.Location
boolean)

static double access$402(
android.location.Location
double)

static boolean access$502(
android.location.Location
boolean)

static float access$602(
android.location.Location
float)

static boolean access$702(
android.location.Location
boolean)

static float access$802(
android.location.Location
float)

static boolean access$902(
android.location.Location
boolean)

private static void computeDistanceAndBearing(
double
double
double
double
float[])

public static double convert(
java.lang.String)

public static java.lang.String convert(
double
int)

public static void distanceBetween(
double
double
double
double
float[])

public float bearingTo(
android.location.Location)

public int describeContents()

public float distanceTo(
android.location.Location)

public float getAccuracy()

public double getAltitude()

public float getBearing()

public android.os.Bundle getExtras()

public double getLatitude()

public double getLongitude()

public java.lang.String getProvider()

public float getSpeed()

public long getTime()

public boolean hasAccuracy()

public boolean hasAltitude()

public boolean hasBearing()

public boolean hasSpeed()

public void removeAccuracy()

public void removeAltitude()

public void removeBearing()

public void removeSpeed()

public void reset()

public void set(
android.location.Location)

public void setAccuracy(
float)

public void setAltitude(
double)

public void setBearing(
float)

public void setExtras(
android.os.Bundle)

public void setLatitude(
double)

public void setLongitude(
double)

public void setProvider(
java.lang.String)

public void setSpeed(
float)

public void setTime(
long)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public abstract interface class android.location.LocationListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onLocationChanged(
android.location.Location)

public abstract void onProviderDisabled(
java.lang.String)

public abstract void onProviderEnabled(
java.lang.String)

public abstract void onStatusChanged(
java.lang.String
int
android.os.Bundle)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/location/LocationManager; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.location.LocationManager$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/location/LocationManager$GpsStatusListenerTransport; )
 class android.location.LocationManager$GpsStatusListenerTransport$1 extends android.os.Handler

----------------FIELDS----------------

final android.location.LocationManager$GpsStatusListenerTransport this$1
----------------METHODS----------------

 void <init>(
android.location.LocationManager$GpsStatusListenerTransport)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =GpsStatusListenerTransport )
@dalvik.annotation.EnclosingClass (value =Landroid/location/LocationManager; )
 class android.location.LocationManager$GpsStatusListenerTransport extends android.location.IGpsStatusListener$Stub

----------------FIELDS----------------

private static final int GPS_FIRST_FIX

private static final int GPS_STARTED

private static final int GPS_STOPPED

private static final int GPS_SV_STATUS

private int mAlmanacMask

private float[] mAzimuths

private float[] mElevations

private int mEphemerisMask

private final android.os.Handler mGpsHandler

private android.location.GpsStatusListener mListener

private int[] mPrns

private float[] mSnrs

private int mSvCount

private int mTTFF

private int mUsedInFixMask

final android.location.LocationManager this$0
----------------METHODS----------------

 void <init>(
android.location.LocationManager
android.location.GpsStatusListener)

static float[] access$1000(
android.location.LocationManager$GpsStatusListenerTransport)

static float[] access$1100(
android.location.LocationManager$GpsStatusListenerTransport)

static int access$1200(
android.location.LocationManager$GpsStatusListenerTransport)

static int access$1300(
android.location.LocationManager$GpsStatusListenerTransport)

static int access$1400(
android.location.LocationManager$GpsStatusListenerTransport)

static android.location.GpsStatusListener access$500(
android.location.LocationManager$GpsStatusListenerTransport)

static int access$600(
android.location.LocationManager$GpsStatusListenerTransport)

static int access$700(
android.location.LocationManager$GpsStatusListenerTransport)

static int[] access$800(
android.location.LocationManager$GpsStatusListenerTransport)

static float[] access$900(
android.location.LocationManager$GpsStatusListenerTransport)

public void onFirstFix(
int)

public void onGpsStarted()

public void onGpsStopped()

public void onSvStatusChanged(
int
int[]
float[]
float[]
float[]
int
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.location.LocationManager$ListenerTransport$1 extends android.os.Handler

----------------FIELDS----------------

final android.location.LocationManager$ListenerTransport this$1

final android.location.LocationManager val$this$0
----------------METHODS----------------

 void <init>(
android.location.LocationManager$ListenerTransport
android.location.LocationManager)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.location.LocationManager$ListenerTransport$2 extends android.os.Handler

----------------FIELDS----------------

final android.location.LocationManager$ListenerTransport this$1

final android.location.LocationManager val$this$0
----------------METHODS----------------

 void <init>(
android.location.LocationManager$ListenerTransport
android.os.Looper
android.location.LocationManager)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =ListenerTransport )
@dalvik.annotation.EnclosingClass (value =Landroid/location/LocationManager; )
 class android.location.LocationManager$ListenerTransport extends android.location.ILocationListener$Stub

----------------FIELDS----------------

private static final int TYPE_LOCATION_CHANGED

private static final int TYPE_PROVIDER_DISABLED

private static final int TYPE_PROVIDER_ENABLED

private static final int TYPE_STATUS_CHANGED

private android.location.LocationListener mListener

private final android.os.Handler mListenerHandler

final android.location.LocationManager this$0
----------------METHODS----------------

 void <init>(
android.location.LocationManager
android.location.LocationListener
android.os.Looper)

private void _handleMessage(
android.os.Message)

static void access$000(
android.location.LocationManager$ListenerTransport
android.os.Message)

public void onLocationChanged(
android.location.Location)

public void onProviderDisabled(
java.lang.String)

public void onProviderEnabled(
java.lang.String)

public void onStatusChanged(
java.lang.String
int
android.os.Bundle)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1026 name =LpComparator )
@dalvik.annotation.EnclosingClass (value =Landroid/location/LocationManager; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Ljava/util/Comparator<Landroid/location/LocationProvider;>; )
abstract class android.location.LocationManager$LpComparator extends java.lang.Object implements java.util.Comparator

----------------FIELDS----------------

final android.location.LocationManager this$0
----------------METHODS----------------

private void <init>(
android.location.LocationManager)

 void <init>(
android.location.LocationManager
android.location.LocationManager$1)

public int compare(
float
float)

public int compare(
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/location/LocationManager; )
@dalvik.annotation.InnerClass (accessFlags =2 name =LpAccuracyComparator )
 class android.location.LocationManager$LpAccuracyComparator extends android.location.LocationManager$LpComparator

----------------FIELDS----------------

final android.location.LocationManager this$0
----------------METHODS----------------

private void <init>(
android.location.LocationManager)

 void <init>(
android.location.LocationManager
android.location.LocationManager$1)

public int compare(
android.location.LocationProvider
android.location.LocationProvider)

public volatile int compare(
java.lang.Object
java.lang.Object)

public boolean equals(
android.location.LocationProvider
android.location.LocationProvider)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/location/LocationManager; )
@dalvik.annotation.InnerClass (accessFlags =2 name =LpCapabilityComparator )
 class android.location.LocationManager$LpCapabilityComparator extends android.location.LocationManager$LpComparator

----------------FIELDS----------------

private static final int ALTITUDE_SCORE

private static final int BEARING_SCORE

private static final int SPEED_SCORE

final android.location.LocationManager this$0
----------------METHODS----------------

private void <init>(
android.location.LocationManager)

 void <init>(
android.location.LocationManager
android.location.LocationManager$1)

private int score(
android.location.LocationProvider)

public int compare(
android.location.LocationProvider
android.location.LocationProvider)

public volatile int compare(
java.lang.Object
java.lang.Object)

public boolean equals(
android.location.LocationProvider
android.location.LocationProvider)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/location/LocationManager; )
@dalvik.annotation.InnerClass (accessFlags =2 name =LpPowerComparator )
 class android.location.LocationManager$LpPowerComparator extends android.location.LocationManager$LpComparator

----------------FIELDS----------------

final android.location.LocationManager this$0
----------------METHODS----------------

private void <init>(
android.location.LocationManager)

 void <init>(
android.location.LocationManager
android.location.LocationManager$1)

public int compare(
android.location.LocationProvider
android.location.LocationProvider)

public volatile int compare(
java.lang.Object
java.lang.Object)

public boolean equals(
android.location.LocationProvider
android.location.LocationProvider)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/location/LocationManager$1;Landroid/location/LocationManager$GpsStatusListenerTransport;Landroid/location/LocationManager$LpCapabilityComparator;Landroid/location/LocationManager$LpAccuracyComparator;Landroid/location/LocationManager$LpPowerComparator;Landroid/location/LocationManager$LpComparator;Landroid/location/LocationManager$ListenerTransport; )
public class android.location.LocationManager extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String GPS_PROVIDER

public static final java.lang.String KEY_PROXIMITY_ENTERING

public static final java.lang.String NETWORK_PROVIDER

public static final java.lang.String PROVIDER_DIR

public static final java.lang.String SYSTEM_DIR

private static final java.lang.String TAG
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/location/GpsStatusListener;Landroid/location/LocationManager$GpsStatusListenerTransport;>; )
private java.util.HashMap mGpsStatusListeners
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/location/LocationListener;Landroid/location/LocationManager$ListenerTransport;>; )
private java.util.HashMap mListeners

private android.location.ILocationManager mService
----------------METHODS----------------

public void <init>(
android.location.ILocationManager)

private void _requestLocationUpdates(
java.lang.String
long
float
android.location.LocationListener
android.os.Looper)
@dalvik.annotation.Signature (value =(Ljava/util/List<Ljava/lang/String;>;)Landroid/location/LocationProvider; )
private android.location.LocationProvider best(
java.util.List)

private android.location.LocationProvider createProvider(
java.lang.String
android.os.Bundle)

private int nextAccuracy(
int)

private int nextPower(
int)

public void addProximityAlert(
double
double
float
long
android.app.PendingIntent)

public void addTestProvider(
java.lang.String
boolean
boolean
boolean
boolean
boolean
boolean
boolean
int
int)

public void clearTestProviderEnabled(
java.lang.String)

public void clearTestProviderLocation(
java.lang.String)

public void clearTestProviderStatus(
java.lang.String)
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getAllProviders()

public java.lang.String getBestProvider(
android.location.Criteria
boolean)

public android.location.Location getLastKnownLocation(
java.lang.String)

public android.location.LocationProvider getProvider(
java.lang.String)
@dalvik.annotation.Signature (value =(Landroid/location/Criteria;Z)Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getProviders(
android.location.Criteria
boolean)
@dalvik.annotation.Signature (value =(Z)Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getProviders(
boolean)

public boolean isProviderEnabled(
java.lang.String)

public boolean registerGpsStatusListener(
android.location.GpsStatusListener)

public void removeProximityAlert(
android.app.PendingIntent)

public void removeTestProvider(
java.lang.String)

public void removeUpdates(
android.location.LocationListener)

public void requestLocationUpdates(
java.lang.String
long
float
android.location.LocationListener)

public void requestLocationUpdates(
java.lang.String
long
float
android.location.LocationListener
android.os.Looper)

public boolean sendExtraCommand(
java.lang.String
java.lang.String
android.os.Bundle)

public void setTestProviderEnabled(
java.lang.String
boolean)

public void setTestProviderLocation(
java.lang.String
android.location.Location)

public void setTestProviderStatus(
java.lang.String
int
android.os.Bundle
long)

public void unregisterGpsStatusListener(
android.location.GpsStatusListener)

public void updateProviders()

________________CLASS________________


public abstract class android.location.LocationProviderImpl extends android.location.LocationProvider

----------------FIELDS----------------

private static final java.lang.String TAG
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/location/LocationProviderImpl;>; )
private static java.util.ArrayList sProviders
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Landroid/location/LocationProviderImpl;>; )
private static java.util.HashMap sProvidersByName

private boolean mLocationTracking

private long mMinTime
----------------METHODS----------------

static void <clinit>()

protected void <init>(
java.lang.String)

public static void addProvider(
android.location.LocationProviderImpl)

public static android.location.LocationProviderImpl getProvider(
java.lang.String)
@dalvik.annotation.Signature (value =()Ljava/util/List<Landroid/location/LocationProviderImpl;>; )
public static java.util.List getProviders()

public static android.location.LocationProviderImpl loadFromClass(
java.io.File)

public static void removeProvider(
android.location.LocationProviderImpl)

public abstract void disable()

public abstract void enable()

public void enableLocationTracking(
boolean)

public abstract boolean getLocation(
android.location.Location)

public long getMinTime()

public int getStatus()

public abstract int getStatus(
android.os.Bundle)

public long getStatusUpdateTime()

public abstract boolean isEnabled()

public boolean isLocationTracking()

public boolean sendExtraCommand(
java.lang.String
android.os.Bundle)

public void setMinTime(
long)

public void updateCellState(
com.android.internal.location.CellState)

public void updateNetworkState(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/media/AsyncPlayer; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.media.AsyncPlayer$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =Command )
@dalvik.annotation.EnclosingClass (value =Landroid/media/AsyncPlayer; )
final class android.media.AsyncPlayer$Command extends java.lang.Object

----------------FIELDS----------------

 int code

 android.content.Context context

 boolean looping

 android.media.AsyncPlayer$Command next

 int stream

 android.net.Uri uri
----------------METHODS----------------

private void <init>()

 void <init>(
android.media.AsyncPlayer$1)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/media/AsyncPlayer; )
@dalvik.annotation.InnerClass (accessFlags =18 name =Thread )
final class android.media.AsyncPlayer$Thread extends java.lang.Thread

----------------FIELDS----------------

final android.media.AsyncPlayer this$0
----------------METHODS----------------

 void <init>(
android.media.AsyncPlayer)

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/media/AsyncPlayer$1;Landroid/media/AsyncPlayer$Thread;Landroid/media/AsyncPlayer$Command; )
public class android.media.AsyncPlayer extends java.lang.Object

----------------FIELDS----------------

private static final int PLAY

private static final int STOP

private android.media.AsyncPlayer$Command mHead

private java.lang.Object mLock

private android.media.MediaPlayer mPlayer

private int mState

private java.lang.String mTag

private android.media.AsyncPlayer$Command mTail

private android.media.AsyncPlayer$Thread mThread

private android.os.PowerManager$WakeLock mWakeLock
----------------METHODS----------------

public void <init>(
java.lang.String)

static java.lang.String access$000(
android.media.AsyncPlayer)

static java.lang.Object access$100(
android.media.AsyncPlayer)

static android.media.AsyncPlayer$Command access$200(
android.media.AsyncPlayer)

static android.media.AsyncPlayer$Command access$202(
android.media.AsyncPlayer
android.media.AsyncPlayer$Command)

static android.media.AsyncPlayer$Command access$300(
android.media.AsyncPlayer)

static android.media.AsyncPlayer$Command access$302(
android.media.AsyncPlayer
android.media.AsyncPlayer$Command)

static android.media.MediaPlayer access$400(
android.media.AsyncPlayer)

static android.media.MediaPlayer access$402(
android.media.AsyncPlayer
android.media.MediaPlayer)

static android.media.AsyncPlayer$Thread access$502(
android.media.AsyncPlayer
android.media.AsyncPlayer$Thread)

static void access$600(
android.media.AsyncPlayer)

private void acquireWakeLock()

private void enqueueLocked(
android.media.AsyncPlayer$Command)

private void releaseWakeLock()

public void play(
android.content.Context
android.net.Uri
boolean
int)

public void setUsesWakeLock(
android.content.Context)

public void stop()

________________CLASS________________


public class android.media.AudioManager extends java.lang.Object

----------------FIELDS----------------

public static final int ADJUST_LOWER

public static final int ADJUST_RAISE

public static final int ADJUST_SAME

private static boolean DEBUG

public static final int[] DEFAULT_STREAM_VOLUME

public static final java.lang.String EXTRA_RINGER_MODE

public static final java.lang.String EXTRA_VIBRATE_SETTING

public static final java.lang.String EXTRA_VIBRATE_TYPE

public static final int FLAG_ALLOW_RINGER_MODES

public static final int FLAG_PLAY_SOUND

public static final int FLAG_REMOVE_SOUND_AND_VIBRATE

public static final int FLAG_SHOW_UI

public static final int FLAG_VIBRATE

public static final int FX_FOCUS_NAVIGATION_DOWN

public static final int FX_FOCUS_NAVIGATION_LEFT

public static final int FX_FOCUS_NAVIGATION_RIGHT

public static final int FX_FOCUS_NAVIGATION_UP

public static final int FX_KEY_CLICK

public static final int[] MAX_STREAM_VOLUME

public static final int MODE_CURRENT

public static final int MODE_INVALID

public static final int MODE_IN_CALL

public static final int MODE_NORMAL

public static final int MODE_RINGTONE

public static final int NUM_SOUND_EFFECTS

public static final int NUM_STREAMS

public static final java.lang.String RINGER_MODE_CHANGED_ACTION

public static final int RINGER_MODE_NORMAL

public static final int RINGER_MODE_SILENT

public static final int RINGER_MODE_VIBRATE

public static final int ROUTE_ALL

public static final int ROUTE_BLUETOOTH

public static final int ROUTE_EARPIECE

public static final int ROUTE_HEADSET

public static final int ROUTE_SPEAKER

public static final int STREAM_ALARM

public static final int STREAM_MUSIC

public static final int STREAM_RING

public static final int STREAM_SYSTEM

public static final int STREAM_VOICE_CALL

private static java.lang.String TAG

public static final int USE_DEFAULT_STREAM_TYPE

public static final java.lang.String VIBRATE_SETTING_CHANGED_ACTION

public static final int VIBRATE_SETTING_OFF

public static final int VIBRATE_SETTING_ON

public static final int VIBRATE_SETTING_ONLY_SILENT

public static final int VIBRATE_TYPE_NOTIFICATION

public static final int VIBRATE_TYPE_RINGER

private static boolean localLOGV

private static android.media.IAudioService sService

private android.database.ContentObserver mContentObserver

private final android.content.Context mContext

private final android.os.Handler mHandler

private android.os.IBinder mICallBack
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

private static android.media.IAudioService getService()

private boolean querySoundEffectsEnabled()

public void adjustStreamVolume(
int
int
int)

public void adjustSuggestedStreamVolume(
int
int
int)

public void adjustVolume(
int
int)

public int getMode()

public int getRingerMode()

public int getRouting(
int)

public int getStreamMaxVolume(
int)

public int getStreamVolume(
int)

public int getVibrateSetting(
int)

public boolean isBluetoothScoOn()

public boolean isMicrophoneMute()

public boolean isMusicActive()

public boolean isSpeakerphoneOn()

public void loadSoundEffects()

public void playSoundEffect(
int)

public void setBluetoothScoOn(
boolean)

public void setMicrophoneMute(
boolean)

public void setMode(
int)

public void setParameter(
java.lang.String
java.lang.String)

public void setRingerMode(
int)

public void setRouting(
int
int
int)

public void setSpeakerphoneOn(
boolean)

public void setStreamMute(
int
boolean)

public void setStreamSolo(
int
boolean)

public void setStreamVolume(
int
int
int)

public void setVibrateSetting(
int
int)

public boolean shouldVibrate(
int)

public void unloadSoundEffects()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/media/AudioSystem; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ErrorCallback )
public abstract interface class android.media.AudioSystem$ErrorCallback extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onError(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/media/AudioService; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.media.AudioService$1 extends java.lang.Object implements android.media.AudioSystem$ErrorCallback

----------------FIELDS----------------

final android.media.AudioService this$0
----------------METHODS----------------

 void <init>(
android.media.AudioService)

public void onError(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnCompletionListener )
@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaPlayer; )
public abstract interface class android.media.MediaPlayer$OnCompletionListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onCompletion(
android.media.MediaPlayer)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.media.AudioService$AudioHandler$1 extends java.lang.Object implements android.media.MediaPlayer$OnCompletionListener

----------------FIELDS----------------

final android.media.AudioService$AudioHandler this$1
----------------METHODS----------------

 void <init>(
android.media.AudioService$AudioHandler)

public void onCompletion(
android.media.MediaPlayer)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaPlayer; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnErrorListener )
public abstract interface class android.media.MediaPlayer$OnErrorListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onError(
android.media.MediaPlayer
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.media.AudioService$AudioHandler$2 extends java.lang.Object implements android.media.MediaPlayer$OnErrorListener

----------------FIELDS----------------

final android.media.AudioService$AudioHandler this$1
----------------METHODS----------------

 void <init>(
android.media.AudioService$AudioHandler)

public boolean onError(
android.media.MediaPlayer
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =AudioHandler )
@dalvik.annotation.EnclosingClass (value =Landroid/media/AudioService; )
 class android.media.AudioService$AudioHandler extends android.os.Handler

----------------FIELDS----------------

final android.media.AudioService this$0
----------------METHODS----------------

private void <init>(
android.media.AudioService)

 void <init>(
android.media.AudioService
android.media.AudioService$1)

static void access$2200(
android.media.AudioService$AudioHandler
android.media.MediaPlayer)

private void cleanupPlayer(
android.media.MediaPlayer)

private void persistRingerMode()

private void persistVibrateSetting()

private void persistVolume(
android.media.AudioService$VolumeStreamState)

private void playSoundEffect(
int)

private void setSystemVolume(
android.media.AudioService$VolumeStreamState)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/media/AudioService; )
@dalvik.annotation.InnerClass (accessFlags =2 name =AudioSystemThread )
 class android.media.AudioService$AudioSystemThread extends java.lang.Thread

----------------FIELDS----------------

final android.media.AudioService this$0
----------------METHODS----------------

 void <init>(
android.media.AudioService)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/media/AudioService$VolumeStreamState; )
@dalvik.annotation.InnerClass (accessFlags =2 name =VolumeDeathHandler )
 class android.media.AudioService$VolumeStreamState$VolumeDeathHandler extends java.lang.Object implements android.os.IBinder$DeathRecipient

----------------FIELDS----------------

private android.os.IBinder mICallback

private int mMuteCount

final android.media.AudioService$VolumeStreamState this$1
----------------METHODS----------------

 void <init>(
android.media.AudioService$VolumeStreamState
android.os.IBinder)

static int access$1100(
android.media.AudioService$VolumeStreamState$VolumeDeathHandler)

static android.os.IBinder access$1200(
android.media.AudioService$VolumeStreamState$VolumeDeathHandler)

public void binderDied()

public void mute(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1 name =VolumeStreamState )
@dalvik.annotation.EnclosingClass (value =Landroid/media/AudioService; )
@dalvik.annotation.MemberClasses (value =Landroid/media/AudioService$VolumeStreamState$VolumeDeathHandler; )
public class android.media.AudioService$VolumeStreamState extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/media/AudioService$VolumeStreamState$VolumeDeathHandler;>; )
private java.util.ArrayList mDeathHandlers

private int mIndex

private int mLastAudibleIndex

private final java.lang.String mLastAudibleVolumeIndexSettingName

private final int mStreamType

private final java.lang.String mVolumeIndexSettingName

private final int[] mVolumes

final android.media.AudioService this$0
----------------METHODS----------------

private void <init>(
android.media.AudioService
java.lang.String
int
int[])

 void <init>(
android.media.AudioService
java.lang.String
int
int[]
android.media.AudioService$1)

static int[] access$1400(
android.media.AudioService$VolumeStreamState)

static java.lang.String access$1500(
android.media.AudioService$VolumeStreamState)

static java.lang.String access$1600(
android.media.AudioService$VolumeStreamState)

static int access$400(
android.media.AudioService$VolumeStreamState)

static int access$500(
android.media.AudioService$VolumeStreamState)

static int access$600(
android.media.AudioService$VolumeStreamState)

static java.util.ArrayList access$800(
android.media.AudioService$VolumeStreamState)

static int access$900(
android.media.AudioService$VolumeStreamState)

private android.media.AudioService$VolumeStreamState$VolumeDeathHandler getDeathHandler(
android.os.IBinder
boolean)

private int getValidIndex(
int)

private int muteCount()

public boolean adjustIndex(
int)

public int getMaxIndex()

public void mute(
android.os.IBinder
boolean)

public boolean setIndex(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/media/IAudioService$Stub; )
public abstract interface class android.media.IAudioService extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void adjustStreamVolume(
int
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void adjustSuggestedStreamVolume(
int
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void adjustVolume(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getMode()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getRingerMode()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getRouting(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getStreamMaxVolume(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getStreamVolume(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getVibrateSetting(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean isMicrophoneMute()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean isMusicActive()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean loadSoundEffects()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void playSoundEffect(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setMicrophoneMute(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setMode(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setParameter(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setRingerMode(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setRouting(
int
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setStreamMute(
int
boolean
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setStreamSolo(
int
boolean
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setStreamVolume(
int
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setVibrateSetting(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean shouldVibrate(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void unloadSoundEffects()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/media/IAudioService$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/media/IAudioService; )
public abstract class android.media.IAudioService$Stub extends android.os.Binder implements android.media.IAudioService

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_adjustStreamVolume

static final int TRANSACTION_adjustSuggestedStreamVolume

static final int TRANSACTION_adjustVolume

static final int TRANSACTION_getMode

static final int TRANSACTION_getRingerMode

static final int TRANSACTION_getRouting

static final int TRANSACTION_getStreamMaxVolume

static final int TRANSACTION_getStreamVolume

static final int TRANSACTION_getVibrateSetting

static final int TRANSACTION_isMicrophoneMute

static final int TRANSACTION_isMusicActive

static final int TRANSACTION_loadSoundEffects

static final int TRANSACTION_playSoundEffect

static final int TRANSACTION_setMicrophoneMute

static final int TRANSACTION_setMode

static final int TRANSACTION_setParameter

static final int TRANSACTION_setRingerMode

static final int TRANSACTION_setRouting

static final int TRANSACTION_setStreamMute

static final int TRANSACTION_setStreamSolo

static final int TRANSACTION_setStreamVolume

static final int TRANSACTION_setVibrateSetting

static final int TRANSACTION_shouldVibrate

static final int TRANSACTION_unloadSoundEffects
----------------METHODS----------------

public void <init>()

public static android.media.IAudioService asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/media/AudioService$AudioHandler;Landroid/media/AudioService$AudioSystemThread;Landroid/media/AudioService$VolumeStreamState; )
public class android.media.AudioService extends android.media.IAudioService$Stub

----------------FIELDS----------------

private static final int MSG_MEDIA_SERVER_DIED

private static final int MSG_MEDIA_SERVER_STARTED

private static final int MSG_PERSIST_RINGER_MODE

private static final int MSG_PERSIST_VIBRATE_SETTING

private static final int MSG_PERSIST_VOLUME

private static final int MSG_PLAY_SOUND_EFFECT

private static final int MSG_SET_SYSTEM_VOLUME

private static final int NUM_SOUNDPOOL_CHANNELS

private static final int PERSIST_DELAY

private static final int SENDMSG_NOOP

private static final int SENDMSG_QUEUE

private static final int SENDMSG_REPLACE

private static final int SHARED_MSG

private static final java.lang.String SOUND_EFFECTS_PATH

private static final java.lang.String[] SOUND_EFFECT_FILES

private static final float SOUND_EFFECT_VOLUME

private static final java.lang.String TAG

private int[][] SOUND_EFFECT_FILES_MAP

private android.media.AudioService$AudioHandler mAudioHandler

private android.media.AudioSystem$ErrorCallback mAudioSystemCallback

private android.media.AudioService$AudioSystemThread mAudioSystemThread

private android.content.ContentResolver mContentResolver

private android.content.Context mContext

private boolean mMediaServerOk

private boolean mMicMute

private int mMode

private int mMuteAffectedStreams

private int mRingerMode

private int mRingerModeAffectedStreams

private int[] mRoutes

private java.lang.Object mSettingsLock

private java.lang.Object mSoundEffectsLock

private android.media.SoundPool mSoundPool

private android.media.AudioService$VolumeStreamState[] mStreamStates

private int mVibrateSetting

private android.view.VolumePanel mVolumePanel
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

static boolean access$000(
android.media.AudioService)

static boolean access$002(
android.media.AudioService
boolean)

static android.media.AudioService$AudioHandler access$100(
android.media.AudioService)

static int access$1000(
android.media.AudioService)

static android.media.AudioService$AudioHandler access$102(
android.media.AudioService
android.media.AudioService$AudioHandler)

static int access$1700(
android.media.AudioService)

static java.lang.Object access$1800(
android.media.AudioService)

static android.media.SoundPool access$1900(
android.media.AudioService)

static void access$200(
android.os.Handler
int
int
int
int
int
java.lang.Object
int)

static int[][] access$2000(
android.media.AudioService)

static java.lang.String[] access$2100()

static int access$2300(
int)

static void access$2400(
android.media.AudioService)

static android.media.AudioService$VolumeStreamState[] access$2500(
android.media.AudioService)

static android.content.ContentResolver access$700(
android.media.AudioService)

private void applyAudioSettings()

private void broadcastRingerMode()

private void broadcastVibrateSetting(
int)

private boolean checkForRingerModeChange(
int
int)

private void createAudioSystemThread()

private void createStreamStates()

private static int[] createVolumeLevels(
int
int)

private void ensureValidDirection(
int)

private void ensureValidStreamType(
int)

private int getActiveStreamType(
int)

private static int getMsg(
int
int)

private static int getMsgBase(
int)

public static int getValueForVibrateSetting(
int
int
int)

private void readAudioSettings()

private void readPersistedSettings()

private static void sendMsg(
android.os.Handler
int
int
int
int
int
java.lang.Object
int)

private void setStreamVolumeInt(
int
int)

private void waitForAudioHandlerCreation()

public void adjustStreamVolume(
int
int
int)

public void adjustSuggestedStreamVolume(
int
int
int)

public void adjustVolume(
int
int)

 boolean checkAudioSettingsPermission(
java.lang.String)

public int getMode()

public int getRingerMode()

public int getRouting(
int)

public int getStreamMaxVolume(
int)

public int getStreamVolume(
int)

public int getVibrateSetting(
int)

public boolean isMicrophoneMute()

public boolean isMusicActive()

public boolean isStreamAffectedByMute(
int)

public boolean isStreamAffectedByRingerMode(
int)

public boolean loadSoundEffects()

public void playSoundEffect(
int)

public void setMicrophoneMute(
boolean)

public void setMode(
int)

public void setParameter(
java.lang.String
java.lang.String)

public void setRingerMode(
int)

public void setRouting(
int
int
int)

public void setStreamMute(
int
boolean
android.os.IBinder)

public void setStreamSolo(
int
boolean
android.os.IBinder)

public void setStreamVolume(
int
int
int)

public void setVibrateSetting(
int
int)

public boolean shouldVibrate(
int)

public void unloadSoundEffects()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/media/AudioSystem$ErrorCallback; )
public class android.media.AudioSystem extends java.lang.Object

----------------FIELDS----------------

public static final int AUDIO_STATUS_ERROR

public static final int AUDIO_STATUS_OK

public static final int AUDIO_STATUS_SERVER_DIED

public static final int MAX_VOLUME

public static final int MIN_VOLUME

public static final int MODE_CURRENT

public static final int MODE_INVALID

public static final int MODE_IN_CALL

public static final int MODE_NORMAL

public static final int MODE_RINGTONE

public static final int NUM_MODES

public static final int NUM_STREAMS

public static final int ROUTE_ALL

public static final int ROUTE_BLUETOOTH

public static final int ROUTE_EARPIECE

public static final int ROUTE_HEADSET

public static final int ROUTE_SPEAKER

public static final int STREAM_ALARM

public static final int STREAM_MUSIC

public static final int STREAM_RING

public static final int STREAM_SYSTEM

public static final int STREAM_VOICE_CALL

private static android.media.AudioSystem$ErrorCallback mErrorCallback
----------------METHODS----------------

public void <init>()

private static void errorCallbackFromNative(
int)

public static native int getMode()

public static native int getRouting(
int)

public static native int getVolume(
int)

public static native boolean isMicrophoneMuted()

public static native boolean isMusicActive()

public static native int muteMicrophone(
boolean)

public static void setErrorCallback(
android.media.AudioSystem$ErrorCallback)

public static native int setMode(
int)

public static native void setParameter(
java.lang.String
java.lang.String)

public static native int setRouting(
int
int
int)

public static native int setVolume(
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/media/FaceDetector; )
 class android.media.FaceDetector$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1 name =Face )
@dalvik.annotation.EnclosingClass (value =Landroid/media/FaceDetector; )
public class android.media.FaceDetector$Face extends java.lang.Object

----------------FIELDS----------------

public static final float CONFIDENCE_THRESHOLD

public static final int EULER_X

public static final int EULER_Y

public static final int EULER_Z

private float mConfidence

private float mEyesDist

private float mMidPointX

private float mMidPointY

private float mPoseEulerX

private float mPoseEulerY

private float mPoseEulerZ

final android.media.FaceDetector this$0
----------------METHODS----------------

private void <init>(
android.media.FaceDetector)

 void <init>(
android.media.FaceDetector
android.media.FaceDetector$1)

public float confidence()

public float eyesDistance()

public void getMidPoint(
android.graphics.PointF)

public float pose(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/media/FaceDetector$1;Landroid/media/FaceDetector$Face; )
public class android.media.FaceDetector extends java.lang.Object

----------------FIELDS----------------

private byte[] mBWBuffer

private int mFD

private byte[] mFaceDataArray

private int mFaceDataSize

private int mHeight

private int mMaxFaces

private int mWidth
----------------METHODS----------------

static void <clinit>()

public void <init>(
int
int
int)

private native void fft_destroy()

private native int fft_detect(
android.graphics.Bitmap)

private native void fft_get_face(
android.media.FaceDetector$Face
int)

private native int fft_initialize(
int
int
int)

private static native void nativeClassInit()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public int findFaces(
android.graphics.Bitmap
android.media.FaceDetector$Face[])

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/media/IAudioService$Stub; )
 class android.media.IAudioService$Stub$Proxy extends java.lang.Object implements android.media.IAudioService

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void adjustStreamVolume(
int
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void adjustSuggestedStreamVolume(
int
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void adjustVolume(
int
int)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getMode()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getRingerMode()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getRouting(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getStreamMaxVolume(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getStreamVolume(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getVibrateSetting(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean isMicrophoneMute()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean isMusicActive()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean loadSoundEffects()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void playSoundEffect(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setMicrophoneMute(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setMode(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setParameter(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setRingerMode(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setRouting(
int
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setStreamMute(
int
boolean
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setStreamSolo(
int
boolean
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setStreamVolume(
int
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setVibrateSetting(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean shouldVibrate(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void unloadSoundEffects()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/media/IMediaScannerListener$Stub; )
public abstract interface class android.media.IMediaScannerListener extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scanCompleted(
java.lang.String
android.net.Uri)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/media/IMediaScannerListener$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.media.IMediaScannerListener$Stub$Proxy extends java.lang.Object implements android.media.IMediaScannerListener

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void scanCompleted(
java.lang.String
android.net.Uri)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/media/IMediaScannerListener$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/media/IMediaScannerListener; )
public abstract class android.media.IMediaScannerListener$Stub extends android.os.Binder implements android.media.IMediaScannerListener

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_scanCompleted
----------------METHODS----------------

public void <init>()

public static android.media.IMediaScannerListener asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/media/IMediaScannerService$Stub; )
public abstract interface class android.media.IMediaScannerService extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void requestScanFile(
java.lang.String
java.lang.String
android.media.IMediaScannerListener)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void scanFile(
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/media/IMediaScannerService$Stub; )
 class android.media.IMediaScannerService$Stub$Proxy extends java.lang.Object implements android.media.IMediaScannerService

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void requestScanFile(
java.lang.String
java.lang.String
android.media.IMediaScannerListener)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void scanFile(
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/media/IMediaScannerService$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/media/IMediaScannerService; )
public abstract class android.media.IMediaScannerService$Stub extends android.os.Binder implements android.media.IMediaScannerService

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_requestScanFile

static final int TRANSACTION_scanFile
----------------METHODS----------------

public void <init>()

public static android.media.IMediaScannerService asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =MediaFileType )
@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaFile; )
 class android.media.MediaFile$MediaFileType extends java.lang.Object

----------------FIELDS----------------

 int fileType

 java.lang.String mimeType
----------------METHODS----------------

 void <init>(
int
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/media/MediaFile$MediaFileType; )
public class android.media.MediaFile extends java.lang.Object

----------------FIELDS----------------

public static final int FILE_TYPE_3GPP

public static final int FILE_TYPE_3GPP2

public static final int FILE_TYPE_AMR

public static final int FILE_TYPE_AWB

public static final int FILE_TYPE_BMP

public static final int FILE_TYPE_GIF

public static final int FILE_TYPE_IMY

public static final int FILE_TYPE_JPEG

public static final int FILE_TYPE_M3U

public static final int FILE_TYPE_M4A

public static final int FILE_TYPE_M4V

public static final int FILE_TYPE_MID

public static final int FILE_TYPE_MP3

public static final int FILE_TYPE_MP4

public static final int FILE_TYPE_OGG

public static final int FILE_TYPE_PLS

public static final int FILE_TYPE_PNG

public static final int FILE_TYPE_SMF

public static final int FILE_TYPE_WAV

public static final int FILE_TYPE_WBMP

public static final int FILE_TYPE_WMA

public static final int FILE_TYPE_WMV

public static final int FILE_TYPE_WPL

private static final int FIRST_AUDIO_FILE_TYPE

private static final int FIRST_IMAGE_FILE_TYPE

private static final int FIRST_MIDI_FILE_TYPE

private static final int FIRST_PLAYLIST_FILE_TYPE

private static final int FIRST_VIDEO_FILE_TYPE

private static final int LAST_AUDIO_FILE_TYPE

private static final int LAST_IMAGE_FILE_TYPE

private static final int LAST_MIDI_FILE_TYPE

private static final int LAST_PLAYLIST_FILE_TYPE

private static final int LAST_VIDEO_FILE_TYPE

public static final java.lang.String UNKNOWN_STRING

public static java.lang.String sFileExtensions
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Landroid/media/MediaFile$MediaFileType;>; )
private static java.util.HashMap sFileTypeMap
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/Integer;>; )
private static java.util.HashMap sMimeTypeMap
----------------METHODS----------------

static void <clinit>()

public void <init>()

static void addFileType(
java.lang.String
int
java.lang.String)

public static android.media.MediaFile$MediaFileType getFileType(
java.lang.String)

public static int getFileTypeForMimeType(
java.lang.String)

public static boolean isAudioFileType(
int)

public static boolean isImageFileType(
int)

public static boolean isPlayListFileType(
int)

public static boolean isVideoFileType(
int)

________________CLASS________________


public class android.media.MediaMetadataRetriever extends java.lang.Object

----------------FIELDS----------------

public static final int METADATA_KEY_ALBUM

public static final int METADATA_KEY_ARTIST

public static final int METADATA_KEY_AUTHOR

public static final int METADATA_KEY_CD_TRACK_NUMBER

public static final int METADATA_KEY_COMPOSER

public static final int METADATA_KEY_DATE

public static final int METADATA_KEY_DURATION

public static final int METADATA_KEY_GENRE

public static final int METADATA_KEY_NUM_TRACKS

public static final int METADATA_KEY_TITLE

public static final int METADATA_KEY_YEAR

public static final int MODE_CAPTURE_FRAME_ONLY

public static final int MODE_GET_METADATA_ONLY
----------------METHODS----------------

static void <clinit>()

public void <init>()

private final native void native_finalize()

private native void native_setup()

public native android.graphics.Bitmap captureFrame()

public native byte[] extractAlbumArt()

public native java.lang.String extractMetadata(
int)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public native void release()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public native void setDataSource(
java.lang.String)

public native void setMode(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =EventHandler )
@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaPlayer; )
 class android.media.MediaPlayer$EventHandler extends android.os.Handler

----------------FIELDS----------------

private android.media.MediaPlayer mMediaPlayer

final android.media.MediaPlayer this$0
----------------METHODS----------------

public void <init>(
android.media.MediaPlayer
android.media.MediaPlayer
android.os.Looper)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnBufferingUpdateListener )
@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaPlayer; )
public abstract interface class android.media.MediaPlayer$OnBufferingUpdateListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onBufferingUpdate(
android.media.MediaPlayer
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaPlayer; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnPreparedListener )
public abstract interface class android.media.MediaPlayer$OnPreparedListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onPrepared(
android.media.MediaPlayer)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaPlayer; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnSeekCompleteListener )
public abstract interface class android.media.MediaPlayer$OnSeekCompleteListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onSeekComplete(
android.media.MediaPlayer)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/media/MediaPlayer$OnErrorListener;Landroid/media/MediaPlayer$OnSeekCompleteListener;Landroid/media/MediaPlayer$OnBufferingUpdateListener;Landroid/media/MediaPlayer$OnCompletionListener;Landroid/media/MediaPlayer$OnPreparedListener;Landroid/media/MediaPlayer$EventHandler; )
public class android.media.MediaPlayer extends java.lang.Object

----------------FIELDS----------------

private static final int ERROR_CONTENT_IS_POORLY_INTERLEAVED

private static final int ERROR_SEEK_NOT_SUPPORTED

private static final int ERROR_VIDEO_TRACK_IS_FALLING_BEHIND

private static final int MEDIA_BUFFERING_UPDATE

private static final int MEDIA_ERROR

public static final int MEDIA_ERROR_SERVER_DIED

public static final int MEDIA_ERROR_UNKNOWN

private static final int MEDIA_NOP

private static final int MEDIA_PLAYBACK_COMPLETE

private static final int MEDIA_PREPARED

private static final int MEDIA_SEEK_COMPLETE

private static final java.lang.String TAG

private android.media.MediaPlayer$EventHandler mEventHandler

private int mListenerContext

private int mNativeContext

private android.media.MediaPlayer$OnBufferingUpdateListener mOnBufferingUpdateListener

private android.media.MediaPlayer$OnCompletionListener mOnCompletionListener

private android.media.MediaPlayer$OnErrorListener mOnErrorListener

private android.media.MediaPlayer$OnPreparedListener mOnPreparedListener

private android.media.MediaPlayer$OnSeekCompleteListener mOnSeekCompleteListener

private boolean mScreenOnWhilePlaying

private boolean mStayAwake

private android.view.Surface mSurface

private android.view.SurfaceHolder mSurfaceHolder

private android.os.PowerManager$WakeLock mWakeLock
----------------METHODS----------------

static void <clinit>()

public void <init>()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
private native void _pause()

private native void _release()

private native void _reset()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
private native void _start()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
private native void _stop()

static int access$000(
android.media.MediaPlayer)

static android.media.MediaPlayer$OnPreparedListener access$100(
android.media.MediaPlayer)

static android.media.MediaPlayer$OnCompletionListener access$200(
android.media.MediaPlayer)

static void access$300(
android.media.MediaPlayer
boolean)

static android.media.MediaPlayer$OnBufferingUpdateListener access$400(
android.media.MediaPlayer)

static android.media.MediaPlayer$OnSeekCompleteListener access$500(
android.media.MediaPlayer)

static android.media.MediaPlayer$OnErrorListener access$600(
android.media.MediaPlayer)

public static android.media.MediaPlayer create(
android.content.Context
int)

public static android.media.MediaPlayer create(
android.content.Context
android.net.Uri)

public static android.media.MediaPlayer create(
android.content.Context
android.net.Uri
android.view.SurfaceHolder)

private final native void native_finalize()

private final native void native_setup(
java.lang.Object)

private static void postEventFromNative(
java.lang.Object
int
int
int
java.lang.Object)

private void stayAwake(
boolean)

private void updateSurfaceScreenOn()

protected void finalize()

public native int getCurrentPosition()

public native int getDuration()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public native android.graphics.Bitmap getFrameAt(
int)

public native int getVideoHeight()

public native int getVideoWidth()

public native boolean isPlaying()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public void pause()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalStateException; )
public native void prepare()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public native void prepareAsync()

public void release()

public void reset()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public native void seekTo(
int)

public native void setAudioStreamType(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/SecurityException;Ljava/lang/IllegalStateException; )
public void setDataSource(
android.content.Context
android.net.Uri)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public void setDataSource(
java.io.FileDescriptor)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public native void setDataSource(
java.io.FileDescriptor
long
long)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public native void setDataSource(
java.lang.String)

public void setDisplay(
android.view.SurfaceHolder)

public native void setLooping(
boolean)

public void setOnBufferingUpdateListener(
android.media.MediaPlayer$OnBufferingUpdateListener)

public void setOnCompletionListener(
android.media.MediaPlayer$OnCompletionListener)

public void setOnErrorListener(
android.media.MediaPlayer$OnErrorListener)

public void setOnPreparedListener(
android.media.MediaPlayer$OnPreparedListener)

public void setOnSeekCompleteListener(
android.media.MediaPlayer$OnSeekCompleteListener)

public void setScreenOnWhilePlaying(
boolean)

public native void setVolume(
float
float)

public void setWakeMode(
android.content.Context
int)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public void start()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public void stop()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaRecorder; )
@dalvik.annotation.InnerClass (accessFlags =17 name =AudioEncoder )
public final class android.media.MediaRecorder$AudioEncoder extends java.lang.Object

----------------FIELDS----------------

public static final int AMR_NB

public static final int DEFAULT

final android.media.MediaRecorder this$0
----------------METHODS----------------

private void <init>(
android.media.MediaRecorder)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaRecorder; )
@dalvik.annotation.InnerClass (accessFlags =17 name =AudioSource )
public final class android.media.MediaRecorder$AudioSource extends java.lang.Object

----------------FIELDS----------------

public static final int DEFAULT

public static final int MIC

final android.media.MediaRecorder this$0
----------------METHODS----------------

private void <init>(
android.media.MediaRecorder)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaRecorder; )
@dalvik.annotation.InnerClass (accessFlags =17 name =OutputFormat )
public final class android.media.MediaRecorder$OutputFormat extends java.lang.Object

----------------FIELDS----------------

public static final int DEFAULT

public static final int MPEG_4

public static final int THREE_GPP

final android.media.MediaRecorder this$0
----------------METHODS----------------

private void <init>(
android.media.MediaRecorder)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaRecorder; )
@dalvik.annotation.InnerClass (accessFlags =17 name =VideoEncoder )
public final class android.media.MediaRecorder$VideoEncoder extends java.lang.Object

----------------FIELDS----------------

public static final int DEFAULT

public static final int H263

public static final int H264

public static final int MPEG_4_SP

final android.media.MediaRecorder this$0
----------------METHODS----------------

private void <init>(
android.media.MediaRecorder)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =17 name =VideoSource )
@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaRecorder; )
public final class android.media.MediaRecorder$VideoSource extends java.lang.Object

----------------FIELDS----------------

public static final int CAMERA

public static final int DEFAULT

final android.media.MediaRecorder this$0
----------------METHODS----------------

private void <init>(
android.media.MediaRecorder)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/media/MediaRecorder$VideoEncoder;Landroid/media/MediaRecorder$AudioEncoder;Landroid/media/MediaRecorder$OutputFormat;Landroid/media/MediaRecorder$VideoSource;Landroid/media/MediaRecorder$AudioSource; )
public class android.media.MediaRecorder extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG

private int mNativeContext

private android.view.Surface mSurface
----------------METHODS----------------

static void <clinit>()

public void <init>()

private void log(
java.lang.String)

private final native void native_finalize()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
private final native void native_setup()

protected void finalize()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public native int getMaxAmplitude()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public native void prepare()

public native void release()

public native void reset()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public native void setAudioEncoder(
int)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public native void setAudioSource(
int)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public native void setOutputFile(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public native void setOutputFormat(
int)

public void setPreviewDisplay(
android.view.Surface)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public native void setVideoEncoder(
int)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public native void setVideoFrameRate(
int)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public native void setVideoSize(
int
int)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public native void setVideoSource(
int)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public native void start()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public native void stop()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaScanner; )
 class android.media.MediaScanner$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaScanner; )
@dalvik.annotation.InnerClass (accessFlags =10 name =FileCacheEntry )
 class android.media.MediaScanner$FileCacheEntry extends java.lang.Object

----------------FIELDS----------------

 long mLastModified

 boolean mLastModifiedChanged

 java.lang.String mPath

 long mRowId

 boolean mSeenInFileSystem

 android.net.Uri mTableUri
----------------METHODS----------------

 void <init>(
android.net.Uri
long
java.lang.String
long)

public java.lang.String toString()

________________CLASS________________


public abstract interface class android.media.MediaScannerClient extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void handleStringTag(
java.lang.String
java.lang.String)

public abstract void scanFile(
java.lang.String
long
long)

public abstract void scanFile(
java.lang.String
java.lang.String
long
long)

public abstract void setMimeType(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaScanner; )
@dalvik.annotation.InnerClass (accessFlags =2 name =MyMediaScannerClient )
 class android.media.MediaScanner$MyMediaScannerClient extends java.lang.Object implements android.media.MediaScannerClient

----------------FIELDS----------------

private java.lang.String mAlbum

private java.lang.String mAlbumArtist

private java.lang.String mArtist

private java.lang.String mComposer

private int mDuration

private long mFileSize

private int mFileType

private java.lang.String mGenre

private long mLastModified

private java.lang.String mMimeType

private java.lang.String mPath

private java.lang.String mTitle

private int mTrack

private int mYear

final android.media.MediaScanner this$0
----------------METHODS----------------

private void <init>(
android.media.MediaScanner)

 void <init>(
android.media.MediaScanner
android.media.MediaScanner$1)

private boolean doesPathHaveFilename(
java.lang.String
java.lang.String)

private int parseSubstring(
java.lang.String
int
int)

private void setSettingIfNotSet(
java.lang.String
android.net.Uri
long)

private android.content.ContentValues toValues()

public android.media.MediaScanner$FileCacheEntry beginFile(
java.lang.String
java.lang.String
long
long)

public android.net.Uri doScanFile(
java.lang.String
java.lang.String
long
long
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.net.Uri endFile(
android.media.MediaScanner$FileCacheEntry
boolean
boolean
boolean
boolean)

public void handleStringTag(
java.lang.String
java.lang.String)

public void scanFile(
java.lang.String
long
long)

public void scanFile(
java.lang.String
java.lang.String
long
long)

public void setMimeType(
java.lang.String)

________________CLASS________________


public abstract interface class android.sax.StartElementListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void start(
org.xml.sax.Attributes)

________________CLASS________________


public abstract interface class android.sax.EndElementListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void end()

________________CLASS________________


public abstract interface class android.sax.ElementListener extends java.lang.Object implements android.sax.StartElementListener, android.sax.EndElementListener

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =WplHandler )
@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaScanner; )
 class android.media.MediaScanner$WplHandler extends java.lang.Object implements android.sax.ElementListener

----------------FIELDS----------------

final org.xml.sax.ContentHandler handler

 int index

 java.lang.String playListDirectory

final android.media.MediaScanner this$0

 android.net.Uri uri

 android.content.ContentValues values
----------------METHODS----------------

public void <init>(
android.media.MediaScanner
java.lang.String
android.net.Uri)

public void end()

 org.xml.sax.ContentHandler getContentHandler()

public void start(
org.xml.sax.Attributes)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/media/MediaScanner$1;Landroid/media/MediaScanner$WplHandler;Landroid/media/MediaScanner$MyMediaScannerClient;Landroid/media/MediaScanner$FileCacheEntry; )
public class android.media.MediaScanner extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String ALARMS_DIR

private static final java.lang.String[] AUDIO_PROJECTION

private static final int DATE_MODIFIED_AUDIO_COLUMN_INDEX

private static final int DATE_MODIFIED_IMAGES_COLUMN_INDEX

private static final int DATE_MODIFIED_PLAYLISTS_COLUMN_INDEX

private static final int DATE_MODIFIED_VIDEO_COLUMN_INDEX

private static final java.lang.String DEFAULT_RINGTONE_PROPERTY_PREFIX

private static final java.lang.String[] GENRE_LOOKUP_PROJECTION

private static final java.lang.String[] ID3_GENRES

private static final int ID_AUDIO_COLUMN_INDEX

private static final int ID_IMAGES_COLUMN_INDEX

private static final int ID_PLAYLISTS_COLUMN_INDEX

private static final int ID_VIDEO_COLUMN_INDEX

private static final java.lang.String[] IMAGES_PROJECTION

private static final java.lang.String MUSIC_DIR

private static final java.lang.String NOTIFICATIONS_DIR

private static final int PATH_AUDIO_COLUMN_INDEX

private static final int PATH_IMAGES_COLUMN_INDEX

private static final int PATH_PLAYLISTS_COLUMN_INDEX

private static final int PATH_VIDEO_COLUMN_INDEX

private static final java.lang.String[] PLAYLISTS_PROJECTION

private static final java.lang.String[] PLAYLIST_MEMBERS_PROJECTION

private static final java.lang.String RINGTONES_DIR

private static final java.lang.String TAG

private static final java.lang.String[] VIDEO_PROJECTION

private android.net.Uri mAudioUri

private android.graphics.BitmapFactory$Options mBitmapOptions

private boolean mCaseInsensitivePaths

private android.media.MediaScanner$MyMediaScannerClient mClient

private android.content.Context mContext

private java.lang.String mDefaultNotificationFilename

private boolean mDefaultNotificationSet

private java.lang.String mDefaultRingtoneFilename

private boolean mDefaultRingtoneSet
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Landroid/media/MediaScanner$FileCacheEntry;>; )
private java.util.HashMap mFileCache
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Landroid/net/Uri;>; )
private java.util.HashMap mGenreCache

private android.net.Uri mGenresUri

private android.net.Uri mImagesUri

private android.content.IContentProvider mMediaProvider

private int mNativeContext

private int mOriginalCount
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/media/MediaScanner$FileCacheEntry;>; )
private java.util.ArrayList mPlayLists

private android.net.Uri mPlaylistsUri

private boolean mProcessGenres

private boolean mProcessPlaylists

private android.net.Uri mThumbsUri

private android.net.Uri mVideoUri
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

static boolean access$100(
android.media.MediaScanner)

static android.content.IContentProvider access$1000(
android.media.MediaScanner)

static boolean access$1100(
android.media.MediaScanner)

static java.util.HashMap access$1200(
android.media.MediaScanner)

static android.net.Uri access$1300(
android.media.MediaScanner)

static java.lang.String[] access$1400()

static boolean access$1500(
android.media.MediaScanner)

static boolean access$1502(
android.media.MediaScanner
boolean)

static java.lang.String access$1600(
android.media.MediaScanner)

static boolean access$1700(
android.media.MediaScanner)

static boolean access$1702(
android.media.MediaScanner
boolean)

static java.lang.String access$1800(
android.media.MediaScanner)

static android.content.Context access$1900(
android.media.MediaScanner)

static java.util.HashMap access$200(
android.media.MediaScanner)

static boolean access$2000(
android.media.MediaScanner
java.lang.String
java.lang.String
android.net.Uri
android.content.ContentValues
int)

static boolean access$300(
android.media.MediaScanner)

static java.util.ArrayList access$400(
android.media.MediaScanner)

static void access$500(
android.media.MediaScanner
java.lang.String
java.lang.String
android.media.MediaScannerClient)

static java.lang.String[] access$600()

static android.net.Uri access$700(
android.media.MediaScanner)

static android.net.Uri access$800(
android.media.MediaScanner)

static android.net.Uri access$900(
android.media.MediaScanner)

private boolean addPlayListEntry(
java.lang.String
java.lang.String
android.net.Uri
android.content.ContentValues
int)

private boolean inScanDirectory(
java.lang.String
java.lang.String[])

private void initialize(
java.lang.String)

private int matchPaths(
java.lang.String
java.lang.String)

private final native void native_finalize()

private final native void native_setup()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
private void postscan(
java.lang.String[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
private void prescan(
java.lang.String)

private native void processDirectory(
java.lang.String
java.lang.String
android.media.MediaScannerClient)

private native void processFile(
java.lang.String
java.lang.String
android.media.MediaScannerClient)

private void processM3uPlayList(
java.lang.String
java.lang.String
android.net.Uri
android.content.ContentValues)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
private void processPlayLists()

private void processPlsPlayList(
java.lang.String
java.lang.String
android.net.Uri
android.content.ContentValues)

private void processWplPlayList(
java.lang.String
java.lang.String
android.net.Uri)

private void pruneDeadThumbnailFiles()

private void setDefaultRingtoneFileNames()

public native byte[] extractAlbumArt(
java.io.FileDescriptor)

protected void finalize()

public void scanDirectories(
java.lang.String[]
java.lang.String)

public android.net.Uri scanSingleFile(
java.lang.String
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaScannerConnection; )
 class android.media.MediaScannerConnection$1 extends android.media.IMediaScannerListener$Stub

----------------FIELDS----------------

final android.media.MediaScannerConnection this$0
----------------METHODS----------------

 void <init>(
android.media.MediaScannerConnection)

public void scanCompleted(
java.lang.String
android.net.Uri)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =MediaScannerConnectionClient )
@dalvik.annotation.EnclosingClass (value =Landroid/media/MediaScannerConnection; )
public abstract interface class android.media.MediaScannerConnection$MediaScannerConnectionClient extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onMediaScannerConnected()

public abstract void onScanCompleted(
java.lang.String
android.net.Uri)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/media/MediaScannerConnection$MediaScannerConnectionClient; )
public class android.media.MediaScannerConnection extends java.lang.Object implements android.content.ServiceConnection

----------------FIELDS----------------

private static final java.lang.String TAG

private android.media.MediaScannerConnection$MediaScannerConnectionClient mClient

private boolean mConnected

private android.content.Context mContext

private android.media.IMediaScannerListener$Stub mListener

private android.media.IMediaScannerService mService
----------------METHODS----------------

public void <init>(
android.content.Context
android.media.MediaScannerConnection$MediaScannerConnectionClient)

static android.media.MediaScannerConnection$MediaScannerConnectionClient access$000(
android.media.MediaScannerConnection)

public void connect()

public void disconnect()

public boolean isConnected()

public void onServiceConnected(
android.content.ComponentName
android.os.IBinder)

public void onServiceDisconnected(
android.content.ComponentName)

public void scanFile(
java.lang.String
java.lang.String)

________________CLASS________________


public class android.media.Ringtone extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String[] DRM_COLUMNS

private static final java.lang.String[] MEDIA_COLUMNS

private static java.lang.String TAG

private android.content.res.AssetFileDescriptor mAssetFileDescriptor

private android.media.MediaPlayer mAudio

private android.content.Context mContext

private java.io.FileDescriptor mFileDescriptor

private int mStreamType

private java.lang.String mTitle

private android.net.Uri mUri
----------------METHODS----------------

static void <clinit>()

 void <init>(
android.content.Context)

private static java.lang.String getTitle(
android.content.Context
android.net.Uri
boolean)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private void openMediaPlayer()

public int getStreamType()

public java.lang.String getTitle(
android.content.Context)

public boolean isPlaying()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
 void open(
android.content.res.AssetFileDescriptor)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
 void open(
android.net.Uri)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
 void open(
java.io.FileDescriptor)

public void play()

public void setStreamType(
int)

 void setTitle(
java.lang.String)

public void stop()

________________CLASS________________


public class android.media.RingtoneManager extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACTION_RINGTONE_PICKER

private static final java.lang.String[] DRM_COLUMNS

public static final java.lang.String EXTRA_RINGTONE_DEFAULT_URI

public static final java.lang.String EXTRA_RINGTONE_EXISTING_URI

public static final java.lang.String EXTRA_RINGTONE_INCLUDE_DRM

public static final java.lang.String EXTRA_RINGTONE_PICKED_URI

public static final java.lang.String EXTRA_RINGTONE_SHOW_DEFAULT

public static final java.lang.String EXTRA_RINGTONE_SHOW_SILENT

public static final java.lang.String EXTRA_RINGTONE_TITLE

public static final java.lang.String EXTRA_RINGTONE_TYPE

public static final int ID_COLUMN_INDEX

private static final java.lang.String[] INTERNAL_COLUMNS

private static final java.lang.String[] MEDIA_COLUMNS

private static final java.lang.String TAG

public static final int TITLE_COLUMN_INDEX

public static final int TYPE_ALARM

public static final int TYPE_ALL

public static final int TYPE_NOTIFICATION

public static final int TYPE_RINGTONE

public static final int URI_COLUMN_INDEX

private android.app.Activity mActivity

private android.content.Context mContext

private android.database.Cursor mCursor
@dalvik.annotation.Signature (value =Ljava/util/List<Ljava/lang/String;>; )
private java.util.List mFilterColumns

private boolean mIncludeDrm

private android.media.Ringtone mPreviousRingtone

private boolean mStopPreviousRingtone

private int mType
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.app.Activity)

public void <init>(
android.content.Context)
@dalvik.annotation.Signature (value =(Ljava/util/List<Ljava/lang/String;>;)Ljava/lang/String; )
private static java.lang.String constructBooleanTrueWhereClause(
java.util.List)

public static android.net.Uri getActualDefaultRingtoneUri(
android.content.Context
int)

public static int getDefaultType(
android.net.Uri)

public static android.net.Uri getDefaultUri(
int)

private android.database.Cursor getDrmRingtones()

private android.database.Cursor getInternalRingtones()

private android.database.Cursor getMediaRingtones()

public static android.media.Ringtone getRingtone(
android.content.Context
android.net.Uri)

private static java.lang.String getSettingForType(
int)

private static android.net.Uri getUriFromCursor(
android.database.Cursor)

public static android.net.Uri getValidRingtoneUri(
android.content.Context)

private static android.net.Uri getValidRingtoneUriFromCursorAndClose(
android.content.Context
android.database.Cursor)

public static boolean isDefault(
android.net.Uri)

private android.database.Cursor query(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)

public static void setActualDefaultRingtoneUri(
android.content.Context
int
android.net.Uri)

private void setFilterColumnsList(
int)

public android.database.Cursor getCursor()

public boolean getIncludeDrm()

public android.media.Ringtone getRingtone(
int)

public int getRingtonePosition(
android.net.Uri)

public android.net.Uri getRingtoneUri(
int)

public boolean getStopPreviousRingtone()

public void setIncludeDrm(
boolean)

public void setStopPreviousRingtone(
boolean)

public void setType(
int)

public void stopPreviousRingtone()

________________CLASS________________


public class android.media.SoundPool extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG

private int mNativeContext
----------------METHODS----------------

static void <clinit>()

public void <init>(
int
int
int)

private final native int _load(
java.io.FileDescriptor
long
long
int)

private final native int _load(
java.lang.String
int)

private final native void native_setup(
java.lang.Object
int
int
int)

protected void finalize()

public int load(
android.content.Context
int
int)

public int load(
java.lang.String
int)

public final native void pause(
int)

public final native int play(
int
float
float
int
int
float)

public final native void release()

public final native void resume(
int)

public final native void setLoop(
int
int)

public final native void setPriority(
int
int)

public final native void setRate(
int
float)

public final native void setVolume(
int
float
float)

public final native void stop(
int)

public final native boolean unload(
int)

________________CLASS________________


public class android.media.ToneGenerator extends java.lang.Object

----------------FIELDS----------------

public static final int MAX_VOLUME

public static final int MIN_VOLUME

public static final int TONE_DTMF_0

public static final int TONE_DTMF_1

public static final int TONE_DTMF_2

public static final int TONE_DTMF_3

public static final int TONE_DTMF_4

public static final int TONE_DTMF_5

public static final int TONE_DTMF_6

public static final int TONE_DTMF_7

public static final int TONE_DTMF_8

public static final int TONE_DTMF_9

public static final int TONE_DTMF_A

public static final int TONE_DTMF_B

public static final int TONE_DTMF_C

public static final int TONE_DTMF_D

public static final int TONE_DTMF_P

public static final int TONE_DTMF_S

public static final int TONE_PROP_ACK

public static final int TONE_PROP_BEEP

public static final int TONE_PROP_BEEP2

public static final int TONE_PROP_NACK

public static final int TONE_PROP_PROMPT

public static final int TONE_SUP_BUSY

public static final int TONE_SUP_CALL_WAITING

public static final int TONE_SUP_CONGESTION

public static final int TONE_SUP_DIAL

public static final int TONE_SUP_ERROR

public static final int TONE_SUP_RADIO_ACK

public static final int TONE_SUP_RADIO_NOTAVAIL

public static final int TONE_SUP_RINGTONE

private int mNativeContext
----------------METHODS----------------

public void <init>(
int
int)

private final native void native_finalize()

private final native void native_setup(
int
int)

protected void finalize()

public native void release()

public native boolean startTone(
int)

public native void stopTone()

________________CLASS________________


public class android.net.ConnectivityManager extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String CONNECTIVITY_ACTION

public static final int DEFAULT_NETWORK_PREFERENCE

public static final java.lang.String EXTRA_EXTRA_INFO

public static final java.lang.String EXTRA_IS_FAILOVER

public static final java.lang.String EXTRA_NETWORK_INFO

public static final java.lang.String EXTRA_NO_CONNECTIVITY

public static final java.lang.String EXTRA_OTHER_NETWORK_INFO

public static final java.lang.String EXTRA_REASON

public static final int TYPE_MOBILE

public static final int TYPE_WIFI

private android.net.IConnectivityManager mService
----------------METHODS----------------

private void <init>()

public void <init>(
android.net.IConnectivityManager)

public static boolean isNetworkTypeValid(
int)

public android.net.NetworkInfo getActiveNetworkInfo()

public android.net.NetworkInfo[] getAllNetworkInfo()

public android.net.NetworkInfo getNetworkInfo(
int)

public int getNetworkPreference()

public boolean requestRouteToHost(
int
int)

public void setNetworkPreference(
int)

public boolean setRadio(
int
boolean)

public boolean setRadios(
boolean)

public int startUsingNetworkFeature(
int
java.lang.String)

public int stopUsingNetworkFeature(
int
java.lang.String)

________________CLASS________________


public class android.net.Credentials extends java.lang.Object

----------------FIELDS----------------

private final int gid

private final int pid

private final int uid
----------------METHODS----------------

public void <init>(
int
int
int)

public int getGid()

public int getPid()

public int getUid()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/net/DhcpInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/net/DhcpInfo;>; )
final class android.net.DhcpInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.net.DhcpInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.net.DhcpInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.net.DhcpInfo extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/net/DhcpInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public int dns1

public int dns2

public int gateway

public int ipAddress

public int leaseDuration

public int netmask

public int serverAddress
----------------METHODS----------------

static void <clinit>()

public void <init>()

private static void putAddress(
java.lang.StringBuffer
int)

public int describeContents()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/IConnectivityManager$Stub; )
public abstract interface class android.net.IConnectivityManager extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.net.NetworkInfo getActiveNetworkInfo()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.net.NetworkInfo[] getAllNetworkInfo()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.net.NetworkInfo getNetworkInfo(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getNetworkPreference()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean requestRouteToHost(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setNetworkPreference(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean setRadio(
int
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean setRadios(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int startUsingNetworkFeature(
int
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int stopUsingNetworkFeature(
int
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/net/IConnectivityManager$Stub; )
 class android.net.IConnectivityManager$Stub$Proxy extends java.lang.Object implements android.net.IConnectivityManager

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.net.NetworkInfo getActiveNetworkInfo()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.net.NetworkInfo[] getAllNetworkInfo()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.net.NetworkInfo getNetworkInfo(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getNetworkPreference()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean requestRouteToHost(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setNetworkPreference(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean setRadio(
int
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean setRadios(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int startUsingNetworkFeature(
int
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int stopUsingNetworkFeature(
int
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/net/IConnectivityManager; )
@dalvik.annotation.MemberClasses (value =Landroid/net/IConnectivityManager$Stub$Proxy; )
public abstract class android.net.IConnectivityManager$Stub extends android.os.Binder implements android.net.IConnectivityManager

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_getActiveNetworkInfo

static final int TRANSACTION_getAllNetworkInfo

static final int TRANSACTION_getNetworkInfo

static final int TRANSACTION_getNetworkPreference

static final int TRANSACTION_requestRouteToHost

static final int TRANSACTION_setNetworkPreference

static final int TRANSACTION_setRadio

static final int TRANSACTION_setRadios

static final int TRANSACTION_startUsingNetworkFeature

static final int TRANSACTION_stopUsingNetworkFeature
----------------METHODS----------------

public void <init>()

public static android.net.IConnectivityManager asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________


public class android.net.LocalServerSocket extends java.lang.Object

----------------FIELDS----------------

private static final int LISTEN_BACKLOG

private final android.net.LocalSocketImpl impl

private final android.net.LocalSocketAddress localAddress
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void <init>(
java.io.FileDescriptor)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void <init>(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public android.net.LocalSocket accept()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()

public java.io.FileDescriptor getFileDescriptor()

public android.net.LocalSocketAddress getLocalSocketAddress()

________________CLASS________________


public class android.net.LocalSocket extends java.lang.Object

----------------FIELDS----------------

private android.net.LocalSocketImpl impl

private volatile boolean implCreated

private boolean isBound

private boolean isConnected

private android.net.LocalSocketAddress localAddress
----------------METHODS----------------

public void <init>()

 void <init>(
android.net.LocalSocketImpl)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private void implCreateIfNeeded()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void bind(
android.net.LocalSocketAddress)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void connect(
android.net.LocalSocketAddress)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void connect(
android.net.LocalSocketAddress
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.io.FileDescriptor[] getAncillaryFileDescriptors()

public java.io.FileDescriptor getFileDescriptor()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.io.InputStream getInputStream()

public android.net.LocalSocketAddress getLocalSocketAddress()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.io.OutputStream getOutputStream()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public android.net.Credentials getPeerCredentials()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int getReceiveBufferSize()

public android.net.LocalSocketAddress getRemoteSocketAddress()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int getSendBufferSize()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int getSoTimeout()

public boolean isBound()

public boolean isClosed()

public boolean isConnected()

public boolean isInputShutdown()

public boolean isOutputShutdown()

public void setFileDescriptorsForSend(
java.io.FileDescriptor[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void setReceiveBufferSize(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void setSendBufferSize(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void setSoTimeout(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void shutdownInput()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void shutdownOutput()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/LocalSocketAddress; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Namespace )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/net/LocalSocketAddress$Namespace;>; )
public final class android.net.LocalSocketAddress$Namespace extends java.lang.Enum

----------------FIELDS----------------

private static final android.net.LocalSocketAddress$Namespace[] $VALUES

public static final android.net.LocalSocketAddress$Namespace ABSTRACT

public static final android.net.LocalSocketAddress$Namespace FILESYSTEM

public static final android.net.LocalSocketAddress$Namespace RESERVED

private int id
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.net.LocalSocketAddress$Namespace valueOf(
java.lang.String)

public static android.net.LocalSocketAddress$Namespace[] values()

 int getId()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/LocalSocketAddress$Namespace; )
public class android.net.LocalSocketAddress extends java.lang.Object

----------------FIELDS----------------

private final java.lang.String name

private final android.net.LocalSocketAddress$Namespace namespace
----------------METHODS----------------

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
android.net.LocalSocketAddress$Namespace)

public java.lang.String getName()

public android.net.LocalSocketAddress$Namespace getNamespace()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =SocketInputStream )
@dalvik.annotation.EnclosingClass (value =Landroid/net/LocalSocketImpl; )
 class android.net.LocalSocketImpl$SocketInputStream extends java.io.InputStream

----------------FIELDS----------------

final android.net.LocalSocketImpl this$0
----------------METHODS----------------

 void <init>(
android.net.LocalSocketImpl)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int available()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read(
byte[]
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/LocalSocketImpl; )
@dalvik.annotation.InnerClass (accessFlags =0 name =SocketOutputStream )
 class android.net.LocalSocketImpl$SocketOutputStream extends java.io.OutputStream

----------------FIELDS----------------

final android.net.LocalSocketImpl this$0
----------------METHODS----------------

 void <init>(
android.net.LocalSocketImpl)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
byte[]
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/LocalSocketImpl$SocketOutputStream;Landroid/net/LocalSocketImpl$SocketInputStream; )
 class android.net.LocalSocketImpl extends java.lang.Object

----------------FIELDS----------------

private java.io.FileDescriptor fd

private android.net.LocalSocketImpl$SocketInputStream fis

private android.net.LocalSocketImpl$SocketOutputStream fos

 java.io.FileDescriptor[] inboundFileDescriptors

 java.io.FileDescriptor[] outboundFileDescriptors

private java.lang.Object readMonitor

private java.lang.Object writeMonitor
----------------METHODS----------------

 void <init>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
 void <init>(
java.io.FileDescriptor)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native java.io.FileDescriptor accept(
java.io.FileDescriptor
android.net.LocalSocketImpl)

static java.io.FileDescriptor access$000(
android.net.LocalSocketImpl)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static int access$100(
android.net.LocalSocketImpl
java.io.FileDescriptor)

static java.lang.Object access$200(
android.net.LocalSocketImpl)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static int access$300(
android.net.LocalSocketImpl
java.io.FileDescriptor)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static int access$400(
android.net.LocalSocketImpl
byte[]
int
int
java.io.FileDescriptor)

static java.lang.Object access$500(
android.net.LocalSocketImpl)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static void access$600(
android.net.LocalSocketImpl
byte[]
int
int
java.io.FileDescriptor)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static void access$700(
android.net.LocalSocketImpl
int
java.io.FileDescriptor)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native int available_native(
java.io.FileDescriptor)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native void bindLocal(
java.io.FileDescriptor
java.lang.String
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native void close_native(
java.io.FileDescriptor)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native void connectLocal(
java.io.FileDescriptor
java.lang.String
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native java.io.FileDescriptor create_native(
boolean)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native int getOption_native(
java.io.FileDescriptor
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native android.net.Credentials getPeerCredentials_native(
java.io.FileDescriptor)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native void listen_native(
java.io.FileDescriptor
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native int read_native(
java.io.FileDescriptor)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native int readba_native(
byte[]
int
int
java.io.FileDescriptor)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native void setOption_native(
java.io.FileDescriptor
int
int
int)

private native void shutdown(
java.io.FileDescriptor
boolean)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native void write_native(
int
java.io.FileDescriptor)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private native void writeba_native(
byte[]
int
int
java.io.FileDescriptor)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void accept(
android.net.LocalSocketImpl)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected int available()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void bind(
android.net.LocalSocketAddress)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void connect(
android.net.LocalSocketAddress
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void create(
boolean)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void finalize()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.io.FileDescriptor[] getAncillaryFileDescriptors()

protected java.io.FileDescriptor getFileDescriptor()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected java.io.InputStream getInputStream()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.lang.Object getOption(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected java.io.OutputStream getOutputStream()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public android.net.Credentials getPeerCredentials()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public android.net.LocalSocketAddress getSockAddress()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void listen(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void sendUrgentData(
int)

public void setFileDescriptorsForSend(
java.io.FileDescriptor[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void setOption(
int
java.lang.Object)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void shutdownInput()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void shutdownOutput()

protected boolean supportsUrgentData()

public java.lang.String toString()

________________CLASS________________


public class android.net.MailTo extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String BODY

private static final java.lang.String CC

public static final java.lang.String MAILTO_SCHEME

private static final java.lang.String SUBJECT

private static final java.lang.String TO
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>; )
private java.util.HashMap mHeaders
----------------METHODS----------------

private void <init>()

public static boolean isMailTo(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/net/ParseException; )
public static android.net.MailTo parse(
java.lang.String)

public java.lang.String getBody()

public java.lang.String getCc()
@dalvik.annotation.Signature (value =()Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>; )
public java.util.Map getHeaders()

public java.lang.String getSubject()

public java.lang.String getTo()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/net/MobileDataStateTracker; )
 class android.net.MobileDataStateTracker$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$com$android$internal$telephony$Phone$DataState
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/MobileDataStateTracker; )
@dalvik.annotation.InnerClass (accessFlags =2 name =MobileDataStateReceiver )
 class android.net.MobileDataStateTracker$MobileDataStateReceiver extends android.content.BroadcastReceiver

----------------FIELDS----------------

final android.net.MobileDataStateTracker this$0
----------------METHODS----------------

private void <init>(
android.net.MobileDataStateTracker)

 void <init>(
android.net.MobileDataStateTracker
android.net.MobileDataStateTracker$1)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________


public abstract class android.net.NetworkStateTracker extends android.os.Handler

----------------FIELDS----------------

private static boolean DBG

public static final int EVENT_CONFIGURATION_CHANGED

public static final int EVENT_NOTIFICATION_CHANGED

public static final int EVENT_SCAN_RESULTS_AVAILABLE

public static final int EVENT_STATE_CHANGED

private static final java.lang.String TAG

protected android.content.Context mContext

protected android.net.NetworkInfo mNetworkInfo

protected android.os.Handler mTarget
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context
android.os.Handler
int)

protected static java.lang.String[] getNameServerList(
java.lang.String[])

private void setBufferSize(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private void stringToFile(
java.lang.String
java.lang.String)

public abstract java.lang.String[] getNameServers()

public android.net.NetworkInfo getNetworkInfo()

public abstract java.lang.String getTcpBufferSizesPropName()

public void interpretScanResultsAvailable()

public abstract boolean isAvailable()

public abstract boolean reconnect()

public boolean requestRouteToHost(
int)

protected void sendScanResultsAvailable()

public void setDetailedState(
android.net.NetworkInfo$DetailedState)

public void setDetailedState(
android.net.NetworkInfo$DetailedState
java.lang.String
java.lang.String)

protected void setDetailedStateInternal(
android.net.NetworkInfo$DetailedState)

public abstract boolean setRadio(
boolean)

public abstract void startMonitoring()

public abstract int startUsingNetworkFeature(
java.lang.String
int
int)

public abstract int stopUsingNetworkFeature(
java.lang.String
int
int)

public abstract boolean teardown()

public void updateNetworkSettings()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/MobileDataStateTracker$1;Landroid/net/MobileDataStateTracker$MobileDataStateReceiver; )
public class android.net.MobileDataStateTracker extends android.net.NetworkStateTracker

----------------FIELDS----------------

private static final boolean DBG

private static final java.lang.String TAG

private static final java.lang.String[] sDnsPropNames

private int mDefaultGatewayAddr
@dalvik.annotation.Signature (value =Ljava/util/List<Ljava/lang/String;>; )
private java.util.List mDnsServers

private java.lang.String mInterfaceName

private int mLastCallingPid

private com.android.internal.telephony.Phone$DataState mMobileDataState

private com.android.internal.telephony.ITelephony mPhoneService
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context
android.os.Handler)

static com.android.internal.telephony.Phone$DataState access$100(
android.content.Intent)

static com.android.internal.telephony.Phone$DataState access$200(
android.net.MobileDataStateTracker)

static com.android.internal.telephony.Phone$DataState access$202(
android.net.MobileDataStateTracker
com.android.internal.telephony.Phone$DataState)

static java.lang.String access$300(
android.net.MobileDataStateTracker)

static java.lang.String access$302(
android.net.MobileDataStateTracker
java.lang.String)

static int access$402(
android.net.MobileDataStateTracker
int)

static void access$500(
android.net.MobileDataStateTracker)

private static com.android.internal.telephony.Phone$DataState getMobileDataState(
android.content.Intent)

private void getPhoneService(
boolean)

private int setEnableApn(
java.lang.String
boolean)

private void setupDnsProperties()

public void addPrivateRoutes()

public java.lang.String[] getNameServers()

public java.lang.String getTcpBufferSizesPropName()

public boolean isAvailable()

public boolean reconnect()

public void removeDefaultRoute()

public void removePrivateRoutes()

public boolean requestRouteToHost(
int)

public void restoreDefaultRoute()

public boolean setRadio(
boolean)

public void startMonitoring()

public int startUsingNetworkFeature(
java.lang.String
int
int)

public int stopUsingNetworkFeature(
java.lang.String
int
int)

public boolean teardown()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/net/NetworkConnectivityListener; )
 class android.net.NetworkConnectivityListener$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/NetworkConnectivityListener; )
@dalvik.annotation.InnerClass (accessFlags =2 name =ConnectivityBroadcastReceiver )
 class android.net.NetworkConnectivityListener$ConnectivityBroadcastReceiver extends android.content.BroadcastReceiver

----------------FIELDS----------------

final android.net.NetworkConnectivityListener this$0
----------------METHODS----------------

private void <init>(
android.net.NetworkConnectivityListener)

 void <init>(
android.net.NetworkConnectivityListener
android.net.NetworkConnectivityListener$1)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/net/NetworkConnectivityListener$State;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/net/NetworkConnectivityListener; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =State )
public final class android.net.NetworkConnectivityListener$State extends java.lang.Enum

----------------FIELDS----------------

private static final android.net.NetworkConnectivityListener$State[] $VALUES

public static final android.net.NetworkConnectivityListener$State CONNECTED

public static final android.net.NetworkConnectivityListener$State NOT_CONNECTED

public static final android.net.NetworkConnectivityListener$State UNKNOWN
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.net.NetworkConnectivityListener$State valueOf(
java.lang.String)

public static android.net.NetworkConnectivityListener$State[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/NetworkConnectivityListener$1;Landroid/net/NetworkConnectivityListener$State;Landroid/net/NetworkConnectivityListener$ConnectivityBroadcastReceiver; )
public class android.net.NetworkConnectivityListener extends java.lang.Object

----------------FIELDS----------------

private static final boolean DBG

private static final java.lang.String TAG

private android.content.Context mContext
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/os/Handler;Ljava/lang/Integer;>; )
private java.util.HashMap mHandlers

private boolean mIsFailover

private boolean mListening

private android.net.NetworkInfo mNetworkInfo

private android.net.NetworkInfo mOtherNetworkInfo

private java.lang.String mReason

private android.net.NetworkConnectivityListener$ConnectivityBroadcastReceiver mReceiver

private android.net.NetworkConnectivityListener$State mState
----------------METHODS----------------

public void <init>()

static boolean access$000(
android.net.NetworkConnectivityListener)

static android.net.NetworkConnectivityListener$State access$100(
android.net.NetworkConnectivityListener)

static android.net.NetworkConnectivityListener$State access$102(
android.net.NetworkConnectivityListener
android.net.NetworkConnectivityListener$State)

static android.net.NetworkInfo access$202(
android.net.NetworkConnectivityListener
android.net.NetworkInfo)

static android.net.NetworkInfo access$302(
android.net.NetworkConnectivityListener
android.net.NetworkInfo)

static java.lang.String access$402(
android.net.NetworkConnectivityListener
java.lang.String)

static boolean access$502(
android.net.NetworkConnectivityListener
boolean)

static java.util.HashMap access$600(
android.net.NetworkConnectivityListener)

public android.net.NetworkInfo getNetworkInfo()

public android.net.NetworkInfo getOtherNetworkInfo()

public java.lang.String getReason()

public android.net.NetworkConnectivityListener$State getState()

public boolean isFailover()

public void registerHandler(
android.os.Handler
int)

public void startListening(
android.content.Context)

public void stopListening()

public void unregisterHandler(
android.os.Handler)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/NetworkInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/net/NetworkInfo;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.net.NetworkInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.net.NetworkInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.net.NetworkInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/NetworkInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/net/NetworkInfo$DetailedState;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =DetailedState )
public final class android.net.NetworkInfo$DetailedState extends java.lang.Enum

----------------FIELDS----------------

private static final android.net.NetworkInfo$DetailedState[] $VALUES

public static final android.net.NetworkInfo$DetailedState AUTHENTICATING

public static final android.net.NetworkInfo$DetailedState CONNECTED

public static final android.net.NetworkInfo$DetailedState CONNECTING

public static final android.net.NetworkInfo$DetailedState DISCONNECTED

public static final android.net.NetworkInfo$DetailedState DISCONNECTING

public static final android.net.NetworkInfo$DetailedState FAILED

public static final android.net.NetworkInfo$DetailedState IDLE

public static final android.net.NetworkInfo$DetailedState OBTAINING_IPADDR

public static final android.net.NetworkInfo$DetailedState SCANNING

public static final android.net.NetworkInfo$DetailedState SUSPENDED
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.net.NetworkInfo$DetailedState valueOf(
java.lang.String)

public static android.net.NetworkInfo$DetailedState[] values()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/net/NetworkInfo$State;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =State )
@dalvik.annotation.EnclosingClass (value =Landroid/net/NetworkInfo; )
public final class android.net.NetworkInfo$State extends java.lang.Enum

----------------FIELDS----------------

private static final android.net.NetworkInfo$State[] $VALUES

public static final android.net.NetworkInfo$State CONNECTED

public static final android.net.NetworkInfo$State CONNECTING

public static final android.net.NetworkInfo$State DISCONNECTED

public static final android.net.NetworkInfo$State DISCONNECTING

public static final android.net.NetworkInfo$State SUSPENDED

public static final android.net.NetworkInfo$State UNKNOWN
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.net.NetworkInfo$State valueOf(
java.lang.String)

public static android.net.NetworkInfo$State[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/NetworkInfo$DetailedState;Landroid/net/NetworkInfo$State; )
public class android.net.NetworkInfo extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/net/NetworkInfo;>; )
public static final android.os.Parcelable$Creator CREATOR
@dalvik.annotation.Signature (value =Ljava/util/EnumMap<Landroid/net/NetworkInfo$DetailedState;Landroid/net/NetworkInfo$State;>; )
private static final java.util.EnumMap stateMap

private android.net.NetworkInfo$DetailedState mDetailedState

private java.lang.String mExtraInfo

private boolean mIsAvailable

private boolean mIsFailover

private int mNetworkType

private java.lang.String mReason

private android.net.NetworkInfo$State mState
----------------METHODS----------------

static void <clinit>()

public void <init>(
int)

static android.net.NetworkInfo$State access$002(
android.net.NetworkInfo
android.net.NetworkInfo$State)

static android.net.NetworkInfo$DetailedState access$102(
android.net.NetworkInfo
android.net.NetworkInfo$DetailedState)

static boolean access$202(
android.net.NetworkInfo
boolean)

static boolean access$302(
android.net.NetworkInfo
boolean)

static java.lang.String access$402(
android.net.NetworkInfo
java.lang.String)

static java.lang.String access$502(
android.net.NetworkInfo
java.lang.String)

public int describeContents()

public android.net.NetworkInfo$DetailedState getDetailedState()

public java.lang.String getExtraInfo()

public java.lang.String getReason()

public android.net.NetworkInfo$State getState()

public int getType()

public java.lang.String getTypeName()

public boolean isAvailable()

public boolean isConnected()

public boolean isConnectedOrConnecting()

public boolean isFailover()

 void setDetailedState(
android.net.NetworkInfo$DetailedState
java.lang.String
java.lang.String)

public void setFailover(
boolean)

public void setIsAvailable(
boolean)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public class android.net.NetworkUtils extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static native int addHostRoute(
java.lang.String
int)

public static boolean configureInterface(
java.lang.String
android.net.DhcpInfo)

private static native boolean configureNative(
java.lang.String
int
int
int
int
int)

public static native int disableInterface(
java.lang.String)

public static native int getDefaultRoute(
java.lang.String)

public static native java.lang.String getDhcpError()

public static int lookupHost(
java.lang.String)

public static native int removeDefaultRoute(
java.lang.String)

public static native int removeHostRoutes(
java.lang.String)

public static native int resetConnections(
java.lang.String)

public static native boolean runDhcp(
java.lang.String
android.net.DhcpInfo)

public static native int setDefaultRoute(
java.lang.String
int)

public static native boolean stopDhcp(
java.lang.String)

________________CLASS________________


public class android.net.ParseException extends java.lang.RuntimeException

----------------FIELDS----------------

public java.lang.String response
----------------METHODS----------------

 void <init>(
java.lang.String)

________________CLASS________________


public final class android.net.Proxy extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String PROXY_CHANGE_ACTION
----------------METHODS----------------

public void <init>()

public static final java.lang.String getDefaultHost()

public static final int getDefaultPort()

public static final java.lang.String getHost(
android.content.Context)

public static final int getPort(
android.content.Context)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/SSLCertificateSocketFactory; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.net.SSLCertificateSocketFactory$1 extends java.lang.Object implements javax.net.ssl.X509TrustManager

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public void checkClientTrusted(
java.security.cert.X509Certificate[]
java.lang.String)

public void checkServerTrusted(
java.security.cert.X509Certificate[]
java.lang.String)

public java.security.cert.X509Certificate[] getAcceptedIssuers()

________________CLASS________________


public class android.net.SSLCertificateSocketFactory extends javax.net.ssl.SSLSocketFactory

----------------FIELDS----------------

private static final boolean DBG

private static final java.lang.String LOG_TAG

private static final javax.net.ssl.TrustManager[] TRUST_MANAGER

private static javax.net.ssl.X509TrustManager sDefaultTrustManager

private javax.net.ssl.SSLSocketFactory factory

private final int socketReadTimeoutForSslHandshake
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Throws (value =Ljava/security/NoSuchAlgorithmException;Ljava/security/KeyManagementException; )
public void <init>(
int)

public static javax.net.SocketFactory getDefault(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private boolean hasValidCertificateChain(
java.security.cert.Certificate[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private void validateSocket(
javax.net.ssl.SSLSocket
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.net.Socket createSocket(
java.lang.String
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.net.Socket createSocket(
java.lang.String
int
java.net.InetAddress
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.net.Socket createSocket(
java.net.InetAddress
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.net.Socket createSocket(
java.net.InetAddress
int
java.net.InetAddress
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.net.Socket createSocket(
java.net.Socket
java.lang.String
int
boolean)

public java.lang.String[] getDefaultCipherSuites()

public java.lang.String[] getSupportedCipherSuites()

________________CLASS________________


public class android.net.SntpClient extends java.lang.Object

----------------FIELDS----------------

private static final int NTP_MODE_CLIENT

private static final int NTP_PACKET_SIZE

private static final int NTP_PORT

private static final int NTP_VERSION

private static final long OFFSET_1900_TO_1970

private static final int ORIGINATE_TIME_OFFSET

private static final int RECEIVE_TIME_OFFSET

private static final int REFERENCE_TIME_OFFSET

private static final java.lang.String TAG

private static final int TRANSMIT_TIME_OFFSET

private long mNtpTime

private long mNtpTimeReference

private long mRoundTripTime
----------------METHODS----------------

public void <init>()

private long read32(
byte[]
int)

private long readTimeStamp(
byte[]
int)

private void writeTimeStamp(
byte[]
int
long)

public long getNtpTime()

public long getNtpTimeReference()

public long getRoundTripTime()

public boolean requestTime(
java.lang.String
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/net/Uri;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/net/Uri; )
final class android.net.Uri$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.net.Uri createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.net.Uri[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/Uri$PathPart;Landroid/net/Uri$Part;Landroid/net/Uri$AbstractPart;Landroid/net/Uri$Builder;Landroid/net/Uri$HierarchicalUri;Landroid/net/Uri$AbstractHierarchicalUri;Landroid/net/Uri$PathSegmentsBuilder;Landroid/net/Uri$PathSegments;Landroid/net/Uri$OpaqueUri;Landroid/net/Uri$StringUri; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable;Ljava/lang/Comparable<Landroid/net/Uri;>; )
public abstract class android.net.Uri extends java.lang.Object implements android.os.Parcelable, java.lang.Comparable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/net/Uri;>; )
public static final android.os.Parcelable$Creator CREATOR

private static final java.lang.String DEFAULT_ENCODING

public static final android.net.Uri EMPTY

private static final char[] HEX_DIGITS

private static final java.lang.String LOG

private static final java.lang.String NOT_CACHED

private static final int NOT_CALCULATED

private static final int NOT_FOUND

private static final java.lang.String NOT_HIERARCHICAL

private static final int NULL_TYPE_ID

private static final byte[] REPLACEMENT
----------------METHODS----------------

static void <clinit>()

private void <init>()

 void <init>(
android.net.Uri$1)

static java.lang.String access$300()

static java.lang.String access$600()

public static java.lang.String decode(
java.lang.String)

public static java.lang.String encode(
java.lang.String)

public static java.lang.String encode(
java.lang.String
java.lang.String)

public static android.net.Uri fromFile(
java.io.File)

public static android.net.Uri fromParts(
java.lang.String
java.lang.String
java.lang.String)

private static boolean isAllowed(
char
java.lang.String)

public static android.net.Uri parse(
java.lang.String)

public static android.net.Uri withAppendedPath(
android.net.Uri
java.lang.String)

public static void writeToParcel(
android.os.Parcel
android.net.Uri)

public abstract android.net.Uri$Builder buildUpon()

public int compareTo(
android.net.Uri)

public volatile int compareTo(
java.lang.Object)

public boolean equals(
java.lang.Object)

public abstract java.lang.String getAuthority()

public abstract java.lang.String getEncodedAuthority()

public abstract java.lang.String getEncodedFragment()

public abstract java.lang.String getEncodedPath()

public abstract java.lang.String getEncodedQuery()

public abstract java.lang.String getEncodedSchemeSpecificPart()

public abstract java.lang.String getEncodedUserInfo()

public abstract java.lang.String getFragment()

public abstract java.lang.String getHost()

public abstract java.lang.String getLastPathSegment()

public abstract java.lang.String getPath()
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public abstract java.util.List getPathSegments()

public abstract int getPort()

public abstract java.lang.String getQuery()

public java.lang.String getQueryParameter(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/String;)Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getQueryParameters(
java.lang.String)

public abstract java.lang.String getScheme()

public abstract java.lang.String getSchemeSpecificPart()

public abstract java.lang.String getUserInfo()

public int hashCode()

public boolean isAbsolute()

public abstract boolean isHierarchical()

public boolean isOpaque()

public abstract boolean isRelative()

public abstract java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/Uri; )
@dalvik.annotation.InnerClass (accessFlags =1034 name =AbstractHierarchicalUri )
abstract class android.net.Uri$AbstractHierarchicalUri extends android.net.Uri

----------------FIELDS----------------

private volatile java.lang.String host

private volatile int port

private android.net.Uri$Part userInfo
----------------METHODS----------------

private void <init>()

 void <init>(
android.net.Uri$1)

private android.net.Uri$Part getUserInfoPart()

private java.lang.String parseHost()

private int parsePort()

private java.lang.String parseUserInfo()

public volatile int compareTo(
java.lang.Object)

public final java.lang.String getEncodedUserInfo()

public java.lang.String getHost()

public java.lang.String getLastPathSegment()

public int getPort()

public java.lang.String getUserInfo()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =Representation )
@dalvik.annotation.EnclosingClass (value =Landroid/net/Uri$AbstractPart; )
 class android.net.Uri$AbstractPart$Representation extends java.lang.Object

----------------FIELDS----------------

static final int BOTH

static final int DECODED

static final int ENCODED
----------------METHODS----------------

 void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/Uri; )
@dalvik.annotation.MemberClasses (value =Landroid/net/Uri$AbstractPart$Representation; )
@dalvik.annotation.InnerClass (accessFlags =1032 name =AbstractPart )
abstract class android.net.Uri$AbstractPart extends java.lang.Object

----------------FIELDS----------------

volatile java.lang.String decoded

volatile java.lang.String encoded
----------------METHODS----------------

 void <init>(
java.lang.String
java.lang.String)

final java.lang.String getDecoded()

abstract java.lang.String getEncoded()

final void writeTo(
android.os.Parcel)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Builder )
@dalvik.annotation.EnclosingClass (value =Landroid/net/Uri; )
public final class android.net.Uri$Builder extends java.lang.Object

----------------FIELDS----------------

private android.net.Uri$Part authority

private android.net.Uri$Part fragment

private android.net.Uri$Part opaquePart

private android.net.Uri$PathPart path

private android.net.Uri$Part query

private java.lang.String scheme
----------------METHODS----------------

public void <init>()

private boolean hasSchemeOrAuthority()

public android.net.Uri$Builder appendEncodedPath(
java.lang.String)

public android.net.Uri$Builder appendPath(
java.lang.String)

public android.net.Uri$Builder appendQueryParameter(
java.lang.String
java.lang.String)

 android.net.Uri$Builder authority(
android.net.Uri$Part)

public android.net.Uri$Builder authority(
java.lang.String)

public android.net.Uri build()

public android.net.Uri$Builder encodedAuthority(
java.lang.String)

public android.net.Uri$Builder encodedFragment(
java.lang.String)

public android.net.Uri$Builder encodedOpaquePart(
java.lang.String)

public android.net.Uri$Builder encodedPath(
java.lang.String)

public android.net.Uri$Builder encodedQuery(
java.lang.String)

 android.net.Uri$Builder fragment(
android.net.Uri$Part)

public android.net.Uri$Builder fragment(
java.lang.String)

 android.net.Uri$Builder opaquePart(
android.net.Uri$Part)

public android.net.Uri$Builder opaquePart(
java.lang.String)

 android.net.Uri$Builder path(
android.net.Uri$PathPart)

public android.net.Uri$Builder path(
java.lang.String)

 android.net.Uri$Builder query(
android.net.Uri$Part)

public android.net.Uri$Builder query(
java.lang.String)

public android.net.Uri$Builder scheme(
java.lang.String)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/Uri; )
@dalvik.annotation.InnerClass (accessFlags =10 name =HierarchicalUri )
 class android.net.Uri$HierarchicalUri extends android.net.Uri$AbstractHierarchicalUri

----------------FIELDS----------------

static final int TYPE_ID

private final android.net.Uri$Part authority

private final android.net.Uri$Part fragment

private final android.net.Uri$PathPart path

private final android.net.Uri$Part query

private final java.lang.String scheme

private android.net.Uri$Part ssp

private volatile java.lang.String uriString
----------------METHODS----------------

private void <init>(
java.lang.String
android.net.Uri$Part
android.net.Uri$PathPart
android.net.Uri$Part
android.net.Uri$Part)

 void <init>(
java.lang.String
android.net.Uri$Part
android.net.Uri$PathPart
android.net.Uri$Part
android.net.Uri$Part
android.net.Uri$1)

private void appendSspTo(
java.lang.StringBuilder)

private android.net.Uri$Part getSsp()

private java.lang.String makeSchemeSpecificPart()

private java.lang.String makeUriString()

static android.net.Uri readFrom(
android.os.Parcel)

public android.net.Uri$Builder buildUpon()

public int describeContents()

public java.lang.String getAuthority()

public java.lang.String getEncodedAuthority()

public java.lang.String getEncodedFragment()

public java.lang.String getEncodedPath()

public java.lang.String getEncodedQuery()

public java.lang.String getEncodedSchemeSpecificPart()

public java.lang.String getFragment()

public java.lang.String getPath()
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getPathSegments()

public java.lang.String getQuery()

public java.lang.String getScheme()

public java.lang.String getSchemeSpecificPart()

public boolean isHierarchical()

public boolean isRelative()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/Uri; )
@dalvik.annotation.InnerClass (accessFlags =10 name =OpaqueUri )
 class android.net.Uri$OpaqueUri extends android.net.Uri

----------------FIELDS----------------

static final int TYPE_ID

private volatile java.lang.String cachedString

private final android.net.Uri$Part fragment

private final java.lang.String scheme

private final android.net.Uri$Part ssp
----------------METHODS----------------

private void <init>(
java.lang.String
android.net.Uri$Part
android.net.Uri$Part)

 void <init>(
java.lang.String
android.net.Uri$Part
android.net.Uri$Part
android.net.Uri$1)

static android.net.Uri readFrom(
android.os.Parcel)

public android.net.Uri$Builder buildUpon()

public volatile int compareTo(
java.lang.Object)

public int describeContents()

public java.lang.String getAuthority()

public java.lang.String getEncodedAuthority()

public java.lang.String getEncodedFragment()

public java.lang.String getEncodedPath()

public java.lang.String getEncodedQuery()

public java.lang.String getEncodedSchemeSpecificPart()

public java.lang.String getEncodedUserInfo()

public java.lang.String getFragment()

public java.lang.String getHost()

public java.lang.String getLastPathSegment()

public java.lang.String getPath()
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getPathSegments()

public int getPort()

public java.lang.String getQuery()

public java.lang.String getScheme()

public java.lang.String getSchemeSpecificPart()

public java.lang.String getUserInfo()

public boolean isHierarchical()

public boolean isRelative()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/Uri$Part$EmptyPart; )
@dalvik.annotation.EnclosingClass (value =Landroid/net/Uri; )
@dalvik.annotation.InnerClass (accessFlags =8 name =Part )
 class android.net.Uri$Part extends android.net.Uri$AbstractPart

----------------FIELDS----------------

static final android.net.Uri$Part EMPTY

static final android.net.Uri$Part NULL
----------------METHODS----------------

static void <clinit>()

private void <init>(
java.lang.String
java.lang.String)

 void <init>(
java.lang.String
java.lang.String
android.net.Uri$1)

static android.net.Uri$Part from(
java.lang.String
java.lang.String)

static android.net.Uri$Part fromDecoded(
java.lang.String)

static android.net.Uri$Part fromEncoded(
java.lang.String)

static android.net.Uri$Part nonNull(
android.net.Uri$Part)

static android.net.Uri$Part readFrom(
android.os.Parcel)

 java.lang.String getEncoded()

 boolean isEmpty()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =EmptyPart )
@dalvik.annotation.EnclosingClass (value =Landroid/net/Uri$Part; )
 class android.net.Uri$Part$EmptyPart extends android.net.Uri$Part

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)

 boolean isEmpty()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =PathPart )
@dalvik.annotation.EnclosingClass (value =Landroid/net/Uri; )
 class android.net.Uri$PathPart extends android.net.Uri$AbstractPart

----------------FIELDS----------------

static final android.net.Uri$PathPart EMPTY

static final android.net.Uri$PathPart NULL

private android.net.Uri$PathSegments pathSegments
----------------METHODS----------------

static void <clinit>()

private void <init>(
java.lang.String
java.lang.String)

static android.net.Uri$PathPart appendDecodedSegment(
android.net.Uri$PathPart
java.lang.String)

static android.net.Uri$PathPart appendEncodedSegment(
android.net.Uri$PathPart
java.lang.String)

static android.net.Uri$PathPart from(
java.lang.String
java.lang.String)

static android.net.Uri$PathPart fromDecoded(
java.lang.String)

static android.net.Uri$PathPart fromEncoded(
java.lang.String)

static android.net.Uri$PathPart makeAbsolute(
android.net.Uri$PathPart)

static android.net.Uri$PathPart readFrom(
android.os.Parcel)

 java.lang.String getEncoded()

 android.net.Uri$PathSegments getPathSegments()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/Uri; )
@dalvik.annotation.InnerClass (accessFlags =8 name =PathSegments )
@dalvik.annotation.Signature (value =Ljava/util/AbstractList<Ljava/lang/String;>;Ljava/util/RandomAccess; )
 class android.net.Uri$PathSegments extends java.util.AbstractList implements java.util.RandomAccess

----------------FIELDS----------------

static final android.net.Uri$PathSegments EMPTY

final java.lang.String[] segments

final int size
----------------METHODS----------------

static void <clinit>()

 void <init>(
java.lang.String[]
int)

public volatile java.lang.Object get(
int)

public java.lang.String get(
int)

public int size()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/Uri; )
@dalvik.annotation.InnerClass (accessFlags =8 name =PathSegmentsBuilder )
 class android.net.Uri$PathSegmentsBuilder extends java.lang.Object

----------------FIELDS----------------

 java.lang.String[] segments

 int size
----------------METHODS----------------

 void <init>()

 void add(
java.lang.String)

 android.net.Uri$PathSegments build()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =StringUri )
@dalvik.annotation.EnclosingClass (value =Landroid/net/Uri; )
 class android.net.Uri$StringUri extends android.net.Uri$AbstractHierarchicalUri

----------------FIELDS----------------

static final int TYPE_ID

private android.net.Uri$Part authority

private volatile int cachedFsi

private volatile int cachedSsi

private android.net.Uri$Part fragment

private android.net.Uri$PathPart path

private android.net.Uri$Part query

private volatile java.lang.String scheme

private android.net.Uri$Part ssp

private final java.lang.String uriString
----------------METHODS----------------

private void <init>(
java.lang.String)

 void <init>(
java.lang.String
android.net.Uri$1)

private int findFragmentSeparator()

private int findSchemeSeparator()

private android.net.Uri$Part getAuthorityPart()

private android.net.Uri$Part getFragmentPart()

private android.net.Uri$PathPart getPathPart()

private android.net.Uri$Part getQueryPart()

private android.net.Uri$Part getSsp()

static java.lang.String parseAuthority(
java.lang.String
int)

private java.lang.String parseFragment()

private java.lang.String parsePath()

static java.lang.String parsePath(
java.lang.String
int)

private java.lang.String parseQuery()

private java.lang.String parseScheme()

private java.lang.String parseSsp()

static android.net.Uri readFrom(
android.os.Parcel)

public android.net.Uri$Builder buildUpon()

public int describeContents()

public java.lang.String getAuthority()

public java.lang.String getEncodedAuthority()

public java.lang.String getEncodedFragment()

public java.lang.String getEncodedPath()

public java.lang.String getEncodedQuery()

public java.lang.String getEncodedSchemeSpecificPart()

public java.lang.String getFragment()

public java.lang.String getPath()
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getPathSegments()

public java.lang.String getQuery()

public java.lang.String getScheme()

public java.lang.String getSchemeSpecificPart()

public boolean isHierarchical()

public boolean isRelative()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/UrlQuerySanitizer; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ValueSanitizer )
public abstract interface class android.net.UrlQuerySanitizer$ValueSanitizer extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.lang.String sanitize(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =IllegalCharacterValueSanitizer )
@dalvik.annotation.EnclosingClass (value =Landroid/net/UrlQuerySanitizer; )
public class android.net.UrlQuerySanitizer$IllegalCharacterValueSanitizer extends java.lang.Object implements android.net.UrlQuerySanitizer$ValueSanitizer

----------------FIELDS----------------

public static final int ALL_BUT_NUL_AND_ANGLE_BRACKETS_LEGAL

public static final int ALL_BUT_NUL_LEGAL

public static final int ALL_BUT_WHITESPACE_LEGAL

public static final int ALL_ILLEGAL

public static final int ALL_OK

public static final int ALL_WHITESPACE_OK

public static final int AMP_AND_SPACE_LEGAL

public static final int AMP_LEGAL

public static final int AMP_OK

public static final int DQUOTE_OK

public static final int GT_OK

private static final java.lang.String JAVASCRIPT_PREFIX

public static final int LT_OK

private static final int MIN_SCRIPT_PREFIX_LENGTH

public static final int NON_7_BIT_ASCII_OK

public static final int NUL_OK

public static final int OTHER_WHITESPACE_OK

public static final int PCT_OK

public static final int SCRIPT_URL_OK

public static final int SPACE_LEGAL

public static final int SPACE_OK

public static final int SQUOTE_OK

public static final int URL_AND_SPACE_LEGAL

public static final int URL_LEGAL

private static final java.lang.String VBSCRIPT_PREFIX

private int mFlags
----------------METHODS----------------

static void <clinit>()

public void <init>(
int)

private boolean characterIsLegal(
char)

private boolean isWhitespace(
char)

private java.lang.String trimWhitespace(
java.lang.String)

public java.lang.String sanitize(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1 name =ParameterValuePair )
@dalvik.annotation.EnclosingClass (value =Landroid/net/UrlQuerySanitizer; )
public class android.net.UrlQuerySanitizer$ParameterValuePair extends java.lang.Object

----------------FIELDS----------------

public java.lang.String mParameter

public java.lang.String mValue

final android.net.UrlQuerySanitizer this$0
----------------METHODS----------------

public void <init>(
android.net.UrlQuerySanitizer
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/UrlQuerySanitizer$IllegalCharacterValueSanitizer;Landroid/net/UrlQuerySanitizer$ValueSanitizer;Landroid/net/UrlQuerySanitizer$ParameterValuePair; )
public class android.net.UrlQuerySanitizer extends java.lang.Object

----------------FIELDS----------------

private static final android.net.UrlQuerySanitizer$ValueSanitizer sAllButNulAndAngleBracketsLegal

private static final android.net.UrlQuerySanitizer$ValueSanitizer sAllButNulLegal

private static final android.net.UrlQuerySanitizer$ValueSanitizer sAllButWhitespaceLegal

private static final android.net.UrlQuerySanitizer$ValueSanitizer sAllIllegal

private static final android.net.UrlQuerySanitizer$ValueSanitizer sAmpAndSpaceLegal

private static final android.net.UrlQuerySanitizer$ValueSanitizer sAmpLegal

private static final android.net.UrlQuerySanitizer$ValueSanitizer sSpaceLegal

private static final android.net.UrlQuerySanitizer$ValueSanitizer sURLLegal

private static final android.net.UrlQuerySanitizer$ValueSanitizer sUrlAndSpaceLegal

private boolean mAllowUnregisteredParamaters
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>; )
private final java.util.HashMap mEntries
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/net/UrlQuerySanitizer$ParameterValuePair;>; )
private final java.util.ArrayList mEntriesList

private boolean mPreferFirstRepeatedParameter
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Landroid/net/UrlQuerySanitizer$ValueSanitizer;>; )
private final java.util.HashMap mSanitizers

private android.net.UrlQuerySanitizer$ValueSanitizer mUnregisteredParameterValueSanitizer
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
java.lang.String)

public static final android.net.UrlQuerySanitizer$ValueSanitizer getAllButNulAndAngleBracketsLegal()

public static final android.net.UrlQuerySanitizer$ValueSanitizer getAllButNulLegal()

public static final android.net.UrlQuerySanitizer$ValueSanitizer getAllButWhitespaceLegal()

public static final android.net.UrlQuerySanitizer$ValueSanitizer getAllIllegal()

public static final android.net.UrlQuerySanitizer$ValueSanitizer getAmpAndSpaceLegal()

public static final android.net.UrlQuerySanitizer$ValueSanitizer getAmpLegal()

public static final android.net.UrlQuerySanitizer$ValueSanitizer getSpaceLegal()

public static final android.net.UrlQuerySanitizer$ValueSanitizer getUrlAndSpaceLegal()

public static final android.net.UrlQuerySanitizer$ValueSanitizer getUrlLegal()

protected void addSanitizedEntry(
java.lang.String
java.lang.String)

protected void clear()

protected int decodeHexDigit(
char)

public boolean getAllowUnregisteredParamaters()

public android.net.UrlQuerySanitizer$ValueSanitizer getEffectiveValueSanitizer(
java.lang.String)
@dalvik.annotation.Signature (value =()Ljava/util/List<Landroid/net/UrlQuerySanitizer$ParameterValuePair;>; )
public java.util.List getParameterList()
@dalvik.annotation.Signature (value =()Ljava/util/Set<Ljava/lang/String;>; )
public java.util.Set getParameterSet()

public boolean getPreferFirstRepeatedParameter()

public android.net.UrlQuerySanitizer$ValueSanitizer getUnregisteredParameterValueSanitizer()

public java.lang.String getValue(
java.lang.String)

public android.net.UrlQuerySanitizer$ValueSanitizer getValueSanitizer(
java.lang.String)

public boolean hasParameter(
java.lang.String)

protected boolean isHexDigit(
char)

protected void parseEntry(
java.lang.String
java.lang.String)

public void parseQuery(
java.lang.String)

public void parseUrl(
java.lang.String)

public void registerParameter(
java.lang.String
android.net.UrlQuerySanitizer$ValueSanitizer)

public void registerParameters(
java.lang.String[]
android.net.UrlQuerySanitizer$ValueSanitizer)

public void setAllowUnregisteredParamaters(
boolean)

public void setPreferFirstRepeatedParameter(
boolean)

public void setUnregisteredParameterValueSanitizer(
android.net.UrlQuerySanitizer$ValueSanitizer)

public java.lang.String unescape(
java.lang.String)

________________CLASS________________


public class android.net.WebAddress extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String LOGTAG

static final int MATCH_GROUP_AUTHORITY

static final int MATCH_GROUP_HOST

static final int MATCH_GROUP_PATH

static final int MATCH_GROUP_PORT

static final int MATCH_GROUP_SCHEME

static java.util.regex.Pattern sAddressPattern

public java.lang.String mAuthInfo

public java.lang.String mHost

public java.lang.String mPath

public int mPort

public java.lang.String mScheme
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Throws (value =Landroid/net/ParseException; )
public void <init>(
java.lang.String)

public java.lang.String toString()

________________CLASS________________


public abstract interface class org.apache.http.HttpRequestInterceptor extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public abstract void process(
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/http/AndroidHttpClient; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.net.http.AndroidHttpClient$1 extends java.lang.Object implements org.apache.http.HttpRequestInterceptor

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public void process(
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

________________CLASS________________


public abstract interface class org.apache.http.client.HttpClient extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/client/ResponseHandler<+TT;>;)TT; )
public abstract java.lang.Object execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.client.ResponseHandler)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/client/ResponseHandler<+TT;>;Lorg/apache/http/protocol/HttpContext;)TT; )
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public abstract java.lang.Object execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.client.ResponseHandler
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/client/ResponseHandler<+TT;>;)TT; )
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public abstract java.lang.Object execute(
org.apache.http.client.methods.HttpUriRequest
org.apache.http.client.ResponseHandler)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/client/ResponseHandler<+TT;>;Lorg/apache/http/protocol/HttpContext;)TT; )
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public abstract java.lang.Object execute(
org.apache.http.client.methods.HttpUriRequest
org.apache.http.client.ResponseHandler
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public abstract org.apache.http.HttpResponse execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public abstract org.apache.http.HttpResponse execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public abstract org.apache.http.HttpResponse execute(
org.apache.http.client.methods.HttpUriRequest)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public abstract org.apache.http.HttpResponse execute(
org.apache.http.client.methods.HttpUriRequest
org.apache.http.protocol.HttpContext)

public abstract org.apache.http.conn.ClientConnectionManager getConnectionManager()

public abstract org.apache.http.params.HttpParams getParams()

________________CLASS________________


public abstract class org.apache.http.impl.client.AbstractHttpClient extends java.lang.Object implements org.apache.http.client.HttpClient

----------------FIELDS----------------

private org.apache.http.conn.ClientConnectionManager connManager

private org.apache.http.client.CookieStore cookieStore

private org.apache.http.client.CredentialsProvider credsProvider

private org.apache.http.params.HttpParams defaultParams

private org.apache.http.protocol.BasicHttpProcessor httpProcessor

private org.apache.http.conn.ConnectionKeepAliveStrategy keepAliveStrategy

private final org.apache.commons.logging.Log log

private org.apache.http.client.AuthenticationHandler proxyAuthHandler

private org.apache.http.client.RedirectHandler redirectHandler

private org.apache.http.protocol.HttpRequestExecutor requestExec

private org.apache.http.client.HttpRequestRetryHandler retryHandler

private org.apache.http.ConnectionReuseStrategy reuseStrategy

private org.apache.http.conn.routing.HttpRoutePlanner routePlanner

private org.apache.http.auth.AuthSchemeRegistry supportedAuthSchemes

private org.apache.http.cookie.CookieSpecRegistry supportedCookieSpecs

private org.apache.http.client.AuthenticationHandler targetAuthHandler

private org.apache.http.client.UserTokenHandler userTokenHandler
----------------METHODS----------------

protected void <init>(
org.apache.http.conn.ClientConnectionManager
org.apache.http.params.HttpParams)

private org.apache.http.HttpHost determineTarget(
org.apache.http.client.methods.HttpUriRequest)

public void addRequestInterceptor(
org.apache.http.HttpRequestInterceptor)

public void addRequestInterceptor(
org.apache.http.HttpRequestInterceptor
int)

public void addResponseInterceptor(
org.apache.http.HttpResponseInterceptor)

public void addResponseInterceptor(
org.apache.http.HttpResponseInterceptor
int)

public void clearRequestInterceptors()

public void clearResponseInterceptors()

protected abstract org.apache.http.auth.AuthSchemeRegistry createAuthSchemeRegistry()

protected abstract org.apache.http.conn.ClientConnectionManager createClientConnectionManager()

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)

protected abstract org.apache.http.conn.ConnectionKeepAliveStrategy createConnectionKeepAliveStrategy()

protected abstract org.apache.http.ConnectionReuseStrategy createConnectionReuseStrategy()

protected abstract org.apache.http.cookie.CookieSpecRegistry createCookieSpecRegistry()

protected abstract org.apache.http.client.CookieStore createCookieStore()

protected abstract org.apache.http.client.CredentialsProvider createCredentialsProvider()

protected abstract org.apache.http.protocol.HttpContext createHttpContext()

protected abstract org.apache.http.params.HttpParams createHttpParams()

protected abstract org.apache.http.protocol.BasicHttpProcessor createHttpProcessor()

protected abstract org.apache.http.client.HttpRequestRetryHandler createHttpRequestRetryHandler()

protected abstract org.apache.http.conn.routing.HttpRoutePlanner createHttpRoutePlanner()

protected abstract org.apache.http.client.AuthenticationHandler createProxyAuthenticationHandler()

protected abstract org.apache.http.client.RedirectHandler createRedirectHandler()

protected abstract org.apache.http.protocol.HttpRequestExecutor createRequestExecutor()

protected abstract org.apache.http.client.AuthenticationHandler createTargetAuthenticationHandler()

protected abstract org.apache.http.client.UserTokenHandler createUserTokenHandler()

protected org.apache.http.params.HttpParams determineParams(
org.apache.http.HttpRequest)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/client/ResponseHandler<+TT;>;)TT; )
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public java.lang.Object execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.client.ResponseHandler)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/client/ResponseHandler<+TT;>;Lorg/apache/http/protocol/HttpContext;)TT; )
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public java.lang.Object execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.client.ResponseHandler
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/client/ResponseHandler<+TT;>;)TT; )
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public java.lang.Object execute(
org.apache.http.client.methods.HttpUriRequest
org.apache.http.client.ResponseHandler)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/client/ResponseHandler<+TT;>;Lorg/apache/http/protocol/HttpContext;)TT; )
public java.lang.Object execute(
org.apache.http.client.methods.HttpUriRequest
org.apache.http.client.ResponseHandler
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public final org.apache.http.HttpResponse execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public final org.apache.http.HttpResponse execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public final org.apache.http.HttpResponse execute(
org.apache.http.client.methods.HttpUriRequest)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public final org.apache.http.HttpResponse execute(
org.apache.http.client.methods.HttpUriRequest
org.apache.http.protocol.HttpContext)

public final org.apache.http.auth.AuthSchemeRegistry getAuthSchemes()

public final org.apache.http.conn.ConnectionKeepAliveStrategy getConnectionKeepAliveStrategy()

public final org.apache.http.conn.ClientConnectionManager getConnectionManager()

public final org.apache.http.ConnectionReuseStrategy getConnectionReuseStrategy()

public final org.apache.http.cookie.CookieSpecRegistry getCookieSpecs()

public final org.apache.http.client.CookieStore getCookieStore()

public final org.apache.http.client.CredentialsProvider getCredentialsProvider()

protected final org.apache.http.protocol.BasicHttpProcessor getHttpProcessor()

public final org.apache.http.client.HttpRequestRetryHandler getHttpRequestRetryHandler()

public final org.apache.http.params.HttpParams getParams()

public final org.apache.http.client.AuthenticationHandler getProxyAuthenticationHandler()

public final org.apache.http.client.RedirectHandler getRedirectHandler()

public final org.apache.http.protocol.HttpRequestExecutor getRequestExecutor()

public org.apache.http.HttpRequestInterceptor getRequestInterceptor(
int)

public int getRequestInterceptorCount()

public org.apache.http.HttpResponseInterceptor getResponseInterceptor(
int)

public int getResponseInterceptorCount()

public final org.apache.http.conn.routing.HttpRoutePlanner getRoutePlanner()

public final org.apache.http.client.AuthenticationHandler getTargetAuthenticationHandler()

public final org.apache.http.client.UserTokenHandler getUserTokenHandler()
@dalvik.annotation.Signature (value =(Ljava/lang/Class<+Lorg/apache/http/HttpRequestInterceptor;>;)V )
public void removeRequestInterceptorByClass(
java.lang.Class)
@dalvik.annotation.Signature (value =(Ljava/lang/Class<+Lorg/apache/http/HttpResponseInterceptor;>;)V )
public void removeResponseInterceptorByClass(
java.lang.Class)

public void setAuthSchemes(
org.apache.http.auth.AuthSchemeRegistry)

public void setCookieSpecs(
org.apache.http.cookie.CookieSpecRegistry)

public void setCookieStore(
org.apache.http.client.CookieStore)

public void setCredentialsProvider(
org.apache.http.client.CredentialsProvider)

public void setHttpRequestRetryHandler(
org.apache.http.client.HttpRequestRetryHandler)

public void setKeepAliveStrategy(
org.apache.http.conn.ConnectionKeepAliveStrategy)

public void setParams(
org.apache.http.params.HttpParams)

public void setProxyAuthenticationHandler(
org.apache.http.client.AuthenticationHandler)

public void setRedirectHandler(
org.apache.http.client.RedirectHandler)

public void setReuseStrategy(
org.apache.http.ConnectionReuseStrategy)

public void setRoutePlanner(
org.apache.http.conn.routing.HttpRoutePlanner)

public void setTargetAuthenticationHandler(
org.apache.http.client.AuthenticationHandler)

public void setUserTokenHandler(
org.apache.http.client.UserTokenHandler)

________________CLASS________________


public class org.apache.http.impl.client.DefaultHttpClient extends org.apache.http.impl.client.AbstractHttpClient

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
org.apache.http.conn.ClientConnectionManager
org.apache.http.params.HttpParams)

public void <init>(
org.apache.http.params.HttpParams)

protected org.apache.http.auth.AuthSchemeRegistry createAuthSchemeRegistry()

protected org.apache.http.conn.ClientConnectionManager createClientConnectionManager()

protected org.apache.http.conn.ConnectionKeepAliveStrategy createConnectionKeepAliveStrategy()

protected org.apache.http.ConnectionReuseStrategy createConnectionReuseStrategy()

protected org.apache.http.cookie.CookieSpecRegistry createCookieSpecRegistry()

protected org.apache.http.client.CookieStore createCookieStore()

protected org.apache.http.client.CredentialsProvider createCredentialsProvider()

protected org.apache.http.protocol.HttpContext createHttpContext()

protected org.apache.http.params.HttpParams createHttpParams()

protected org.apache.http.protocol.BasicHttpProcessor createHttpProcessor()

protected org.apache.http.client.HttpRequestRetryHandler createHttpRequestRetryHandler()

protected org.apache.http.conn.routing.HttpRoutePlanner createHttpRoutePlanner()

protected org.apache.http.client.AuthenticationHandler createProxyAuthenticationHandler()

protected org.apache.http.client.RedirectHandler createRedirectHandler()

protected org.apache.http.protocol.HttpRequestExecutor createRequestExecutor()

protected org.apache.http.client.AuthenticationHandler createTargetAuthenticationHandler()

protected org.apache.http.client.UserTokenHandler createUserTokenHandler()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.net.http.AndroidHttpClient$2 extends org.apache.http.impl.client.DefaultHttpClient

----------------FIELDS----------------

final android.net.http.AndroidHttpClient this$0
----------------METHODS----------------

 void <init>(
android.net.http.AndroidHttpClient
org.apache.http.conn.ClientConnectionManager
org.apache.http.params.HttpParams)

protected org.apache.http.protocol.HttpContext createHttpContext()

protected org.apache.http.protocol.BasicHttpProcessor createHttpProcessor()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/http/AndroidHttpClient; )
@dalvik.annotation.InnerClass (accessFlags =2 name =CurlLogger )
 class android.net.http.AndroidHttpClient$CurlLogger extends java.lang.Object implements org.apache.http.HttpRequestInterceptor

----------------FIELDS----------------

final android.net.http.AndroidHttpClient this$0
----------------METHODS----------------

private void <init>(
android.net.http.AndroidHttpClient)

 void <init>(
android.net.http.AndroidHttpClient
android.net.http.AndroidHttpClient$1)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void process(
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =LoggingConfiguration )
@dalvik.annotation.EnclosingClass (value =Landroid/net/http/AndroidHttpClient; )
 class android.net.http.AndroidHttpClient$LoggingConfiguration extends java.lang.Object

----------------FIELDS----------------

private final int level

private final java.lang.String tag
----------------METHODS----------------

private void <init>(
java.lang.String
int)

 void <init>(
java.lang.String
int
android.net.http.AndroidHttpClient$1)

static boolean access$500(
android.net.http.AndroidHttpClient$LoggingConfiguration)

static void access$700(
android.net.http.AndroidHttpClient$LoggingConfiguration
java.lang.String)

private boolean isLoggable()

private void println(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/http/AndroidHttpClient$CurlLogger;Landroid/net/http/AndroidHttpClient$LoggingConfiguration; )
public final class android.net.http.AndroidHttpClient extends java.lang.Object implements org.apache.http.client.HttpClient

----------------FIELDS----------------

public static long DEFAULT_SYNC_MIN_GZIP_BYTES

private static final java.lang.String TAG
@dalvik.annotation.Signature (value =Ljava/lang/ThreadLocal<Ljava/lang/Boolean;>; )
private static final java.lang.ThreadLocal sThreadBlocked

private static final org.apache.http.HttpRequestInterceptor sThreadCheckInterceptor

private volatile android.net.http.AndroidHttpClient$LoggingConfiguration curlConfiguration

private final org.apache.http.client.HttpClient delegate

private java.lang.RuntimeException mLeakedException
----------------METHODS----------------

static void <clinit>()

private void <init>(
org.apache.http.conn.ClientConnectionManager
org.apache.http.params.HttpParams)

static java.lang.ThreadLocal access$000()

static org.apache.http.HttpRequestInterceptor access$100()

static android.net.http.AndroidHttpClient$LoggingConfiguration access$400(
android.net.http.AndroidHttpClient)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static java.lang.String access$600(
org.apache.http.client.methods.HttpUriRequest)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public static org.apache.http.entity.AbstractHttpEntity getCompressedEntity(
byte[]
android.content.ContentResolver)

public static long getMinGzipSize(
android.content.ContentResolver)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public static java.io.InputStream getUngzippedContent(
org.apache.http.HttpEntity)

public static void modifyRequestToAcceptGzipResponse(
org.apache.http.HttpRequest)

public static android.net.http.AndroidHttpClient newInstance(
java.lang.String)

public static void setThreadBlocked(
boolean)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private static java.lang.String toCurl(
org.apache.http.client.methods.HttpUriRequest)

public void close()

public void disableCurlLogging()

public void enableCurlLogging(
java.lang.String
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/client/ResponseHandler<+TT;>;)TT; )
public java.lang.Object execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.client.ResponseHandler)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/client/ResponseHandler<+TT;>;Lorg/apache/http/protocol/HttpContext;)TT; )
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public java.lang.Object execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.client.ResponseHandler
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/client/ResponseHandler<+TT;>;)TT; )
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public java.lang.Object execute(
org.apache.http.client.methods.HttpUriRequest
org.apache.http.client.ResponseHandler)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/client/ResponseHandler<+TT;>;Lorg/apache/http/protocol/HttpContext;)TT; )
public java.lang.Object execute(
org.apache.http.client.methods.HttpUriRequest
org.apache.http.client.ResponseHandler
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public org.apache.http.HttpResponse execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public org.apache.http.HttpResponse execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public org.apache.http.HttpResponse execute(
org.apache.http.client.methods.HttpUriRequest)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public org.apache.http.HttpResponse execute(
org.apache.http.client.methods.HttpUriRequest
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public org.apache.http.conn.ClientConnectionManager getConnectionManager()

public org.apache.http.params.HttpParams getParams()

________________CLASS________________


public abstract interface class org.apache.http.HttpConnection extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void close()

public abstract org.apache.http.HttpConnectionMetrics getMetrics()

public abstract int getSocketTimeout()

public abstract boolean isOpen()

public abstract boolean isStale()

public abstract void setSocketTimeout(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void shutdown()

________________CLASS________________


public abstract interface class org.apache.http.HttpInetConnection extends java.lang.Object implements org.apache.http.HttpConnection

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.net.InetAddress getLocalAddress()

public abstract int getLocalPort()

public abstract java.net.InetAddress getRemoteAddress()

public abstract int getRemotePort()

________________CLASS________________


public class android.net.http.AndroidHttpClientConnection extends java.lang.Object implements org.apache.http.HttpInetConnection, org.apache.http.HttpConnection

----------------FIELDS----------------

private final org.apache.http.impl.entity.EntitySerializer entityserializer

private org.apache.http.io.SessionInputBuffer inbuffer

private int maxHeaderCount

private int maxLineLength

private org.apache.http.impl.HttpConnectionMetricsImpl metrics

private volatile boolean open

private org.apache.http.io.SessionOutputBuffer outbuffer

private org.apache.http.io.HttpMessageWriter requestWriter

private java.net.Socket socket
----------------METHODS----------------

public void <init>()

private void assertNotOpen()

private void assertOpen()

private long determineLength(
android.net.http.Headers)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void bind(
java.net.Socket
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void doFlush()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void flush()

public java.net.InetAddress getLocalAddress()

public int getLocalPort()

public org.apache.http.HttpConnectionMetrics getMetrics()

public java.net.InetAddress getRemoteAddress()

public int getRemotePort()

public int getSocketTimeout()

public boolean isOpen()

public boolean isStale()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/ParseException; )
public org.apache.http.StatusLine parseResponseHeader(
android.net.http.Headers)

public org.apache.http.HttpEntity receiveResponseEntity(
android.net.http.Headers)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void sendRequestEntity(
org.apache.http.HttpEntityEnclosingRequest)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void sendRequestHeader(
org.apache.http.HttpRequest)

public void setSocketTimeout(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void shutdown()

public java.lang.String toString()

________________CLASS________________


 class android.net.http.CertificateChainValidator extends java.lang.Object

----------------FIELDS----------------

private static android.net.http.CertificateChainValidator sInstance

private static long sTotal

private static long sTotalReused

private javax.net.ssl.X509TrustManager mDefaultTrustManager
----------------METHODS----------------

static void <clinit>()

private void <init>()
@dalvik.annotation.Throws (value =Ljavax/net/ssl/SSLHandshakeException;Ljava/io/IOException; )
private void closeSocketThrowException(
javax.net.ssl.SSLSocket
java.lang.String)
@dalvik.annotation.Throws (value =Ljavax/net/ssl/SSLHandshakeException;Ljava/io/IOException; )
private void closeSocketThrowException(
javax.net.ssl.SSLSocket
java.lang.String
java.lang.String)

public static android.net.http.CertificateChainValidator getInstance()

private javax.net.ssl.SSLSession getSSLSession(
javax.net.ssl.SSLContext
org.apache.http.HttpHost)
@dalvik.annotation.Throws (value =Ljavax/net/ssl/SSLHandshakeException;Ljava/io/IOException; )
public android.net.http.SslError doHandshakeAndValidateServerCertificates(
android.net.http.HttpsConnection
javax.net.ssl.SSLSocket
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/http/CertificateValidatorCache; )
@dalvik.annotation.InnerClass (accessFlags =2 name =CacheEntry )
 class android.net.http.CertificateValidatorCache$CacheEntry extends java.lang.Object

----------------FIELDS----------------

private java.lang.String mDomain

private byte[] mHash

public long mSave

private long mTime

final android.net.http.CertificateValidatorCache this$0
----------------METHODS----------------

public void <init>(
android.net.http.CertificateValidatorCache
java.lang.String
byte[]
long)

public boolean expired()

public boolean has(
java.lang.String
byte[])

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/http/CertificateValidatorCache$CacheEntry; )
 class android.net.http.CertificateValidatorCache extends java.lang.Object

----------------FIELDS----------------

private static final long CACHE_ENTRY_LIFETIME

public static long mCost

public static long mSave

private static java.security.cert.CertificateFactory sCertificateFactory

private int mBigScrew
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Landroid/net/http/CertificateValidatorCache$CacheEntry;>; )
private java.util.HashMap mCacheMap
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static byte[] secureHash(
java.security.cert.Certificate[])

public boolean has(
java.lang.String
byte[])

public boolean put(
java.lang.String
byte[]
long)

________________CLASS________________


 class android.net.http.CharArrayBuffers extends java.lang.Object

----------------FIELDS----------------

static final char uppercaseAddon
----------------METHODS----------------

 void <init>()

static boolean containsIgnoreCaseTrimmed(
org.apache.http.util.CharArrayBuffer
int
java.lang.String)

static int setLowercaseIndexOf(
org.apache.http.util.CharArrayBuffer
int)

private static char toLower(
char)

________________CLASS________________


abstract class android.net.http.Connection extends java.lang.Object

----------------FIELDS----------------

private static final int DONE

private static final int DRAIN

private static final java.lang.String HTTP_CONNECTION

private static final int MAX_PIPE

private static final int MIN_PIPE

private static final int READ

private static final int RETRY_REQUEST_LIMIT

private static final int SEND

static final int SOCKET_TIMEOUT

private static int STATE_CANCEL_REQUESTED

private static int STATE_NORMAL

private static final java.lang.String[] states

private int mActive

private byte[] mBuf

private boolean mCanPersist

protected android.net.http.SslCertificate mCertificate

 android.net.http.RequestQueue$ConnectionManager mConnectionManager

 android.content.Context mContext

 org.apache.http.HttpHost mHost

protected android.net.http.AndroidHttpClientConnection mHttpClientConnection

private org.apache.http.protocol.HttpContext mHttpContext

 android.net.http.RequestFeeder mRequestFeeder
----------------METHODS----------------

static void <clinit>()

protected void <init>(
android.content.Context
org.apache.http.HttpHost
android.net.http.RequestQueue$ConnectionManager
android.net.http.RequestFeeder)
@dalvik.annotation.Signature (value =(Ljava/util/LinkedList<Landroid/net/http/Request;>;)Z )
private boolean clearPipe(
java.util.LinkedList)

static android.net.http.Connection getConnection(
android.content.Context
org.apache.http.HttpHost
android.net.http.RequestQueue$ConnectionManager
android.net.http.RequestFeeder)

private boolean httpFailure(
android.net.http.Request
int
java.lang.Exception)

private boolean keepAlive(
org.apache.http.HttpEntity
org.apache.http.ProtocolVersion
int
org.apache.http.protocol.HttpContext)

private boolean openHttpConnection(
android.net.http.Request)

 void cancel()

abstract void closeConnection()

 byte[] getBuf()

 boolean getCanPersist()

 android.net.http.SslCertificate getCertificate()

 org.apache.http.HttpHost getHost()

 org.apache.http.protocol.HttpContext getHttpContext()

abstract java.lang.String getScheme()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
abstract android.net.http.AndroidHttpClientConnection openConnection(
android.net.http.Request)

 void processRequests(
android.net.http.Request)

 void setCanPersist(
org.apache.http.HttpEntity
org.apache.http.ProtocolVersion
int)

 void setCanPersist(
boolean)

public java.lang.String toString()

________________CLASS________________


 class android.net.http.ConnectionThread extends java.lang.Thread

----------------FIELDS----------------

static final int WAIT_TICK

static final int WAIT_TIMEOUT

 android.net.http.Connection mConnection

private android.net.http.RequestQueue$ConnectionManager mConnectionManager

private android.content.Context mContext

 long mCurrentThreadTime

private int mId

private android.net.http.RequestFeeder mRequestFeeder

private volatile boolean mRunning

 long mStartThreadTime

private boolean mWaiting
----------------METHODS----------------

 void <init>(
android.content.Context
int
android.net.http.RequestQueue$ConnectionManager
android.net.http.RequestFeeder)

 void requestStop()

public void run()

public java.lang.String toString()

________________CLASS________________


public class android.net.http.DomainNameChecker extends java.lang.Object

----------------FIELDS----------------

private static final int ALT_DNS_NAME

private static final int ALT_IPA_NAME

private static java.util.regex.Pattern QUICK_IP_PATTERN
----------------METHODS----------------

static void <clinit>()

public void <init>()

private static boolean domainTokenMatch(
java.lang.String
java.lang.String)

private static boolean isIpAddress(
java.lang.String)

public static boolean match(
java.security.cert.X509Certificate
java.lang.String)

private static boolean matchDns(
java.lang.String
java.lang.String)

private static boolean matchDns(
java.security.cert.X509Certificate
java.lang.String)

private static boolean matchIpAddress(
java.security.cert.X509Certificate
java.lang.String)

________________CLASS________________


public abstract interface class android.net.http.EventHandler extends java.lang.Object

----------------FIELDS----------------

public static final int ERROR

public static final int ERROR_AUTH

public static final int ERROR_BAD_URL

public static final int ERROR_CONNECT

public static final int ERROR_FAILED_SSL_HANDSHAKE

public static final int ERROR_IO

public static final int ERROR_LOOKUP

public static final int ERROR_PROXYAUTH

public static final int ERROR_REDIRECT_LOOP

public static final int ERROR_TIMEOUT

public static final int ERROR_UNSUPPORTED_AUTH_SCHEME

public static final int ERROR_UNSUPPORTED_SCHEME

public static final int FILE_ERROR

public static final int FILE_NOT_FOUND_ERROR

public static final int OK

public static final int TOO_MANY_REQUESTS_ERROR

public static final int[] errorStringResources
----------------METHODS----------------

static void <clinit>()

public abstract void certificate(
android.net.http.SslCertificate)

public abstract void data(
byte[]
int)

public abstract void endData()

public abstract void error(
int
java.lang.String)

public abstract void handleSslErrorRequest(
android.net.http.SslError)

public abstract void headers(
android.net.http.Headers)

public abstract void status(
int
int
int
java.lang.String)

________________CLASS________________


public final class android.net.http.Headers extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACCEPT_RANGES

public static final java.lang.String CACHE_CONTROL

public static final int CONN_CLOSE

public static final java.lang.String CONN_DIRECTIVE

public static final int CONN_KEEP_ALIVE

public static final java.lang.String CONTENT_DISPOSITION

public static final java.lang.String CONTENT_ENCODING

public static final java.lang.String CONTENT_LEN

public static final java.lang.String CONTENT_TYPE

public static final java.lang.String ETAG

public static final java.lang.String EXPIRES

private static final int HASH_ACCEPT_RANGES

private static final int HASH_CACHE_CONTROL

private static final int HASH_CONN_DIRECTIVE

private static final int HASH_CONTENT_DISPOSITION

private static final int HASH_CONTENT_ENCODING

private static final int HASH_CONTENT_LEN

private static final int HASH_CONTENT_TYPE

private static final int HASH_ETAG

private static final int HASH_EXPIRES

private static final int HASH_LAST_MODIFIED

private static final int HASH_LOCATION

private static final int HASH_PRAGMA

private static final int HASH_PROXY_AUTHENTICATE

private static final int HASH_PROXY_CONNECTION

private static final int HASH_REFRESH

private static final int HASH_SET_COOKIE

private static final int HASH_TRANSFER_ENCODING

private static final int HASH_WWW_AUTHENTICATE

public static final java.lang.String LAST_MODIFIED

public static final java.lang.String LOCATION

private static final java.lang.String LOGTAG

public static final int NO_CONN_TYPE

public static final long NO_CONTENT_LENGTH

public static final long NO_TRANSFER_ENCODING

public static final java.lang.String PRAGMA

public static final java.lang.String PROXY_AUTHENTICATE

public static final java.lang.String PROXY_CONNECTION

public static final java.lang.String REFRESH

public static final java.lang.String SET_COOKIE

public static final java.lang.String TRANSFER_ENCODING

public static final java.lang.String WWW_AUTHENTICATE

private java.lang.String acceptRanges

private java.lang.String cacheControl

private int connectionType

private java.lang.String contentDisposition

private java.lang.String contentEncoding

private long contentLength

private java.lang.String contentType
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/lang/String;>; )
private java.util.ArrayList cookies

private java.lang.String etag

private java.lang.String expires

private java.lang.String lastModified

private java.lang.String location

private java.lang.String pragma

private java.lang.String proxyAuthenticate

private java.lang.String refresh

private long transferEncoding

private java.lang.String wwwAuthenticate
----------------METHODS----------------

public void <init>()

private void setConnectionType(
org.apache.http.util.CharArrayBuffer
int)

public java.lang.String getAcceptRanges()

public java.lang.String getCacheControl()

public int getConnectionType()

public java.lang.String getContentDisposition()

public java.lang.String getContentEncoding()

public long getContentLength()

public java.lang.String getContentType()

public java.lang.String getEtag()

public java.lang.String getExpires()

public java.lang.String getLastModified()

public java.lang.String getLocation()

public java.lang.String getPragma()

public java.lang.String getProxyAuthenticate()

public java.lang.String getRefresh()
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Ljava/lang/String;>; )
public java.util.ArrayList getSetCookie()

public long getTransferEncoding()

public java.lang.String getWwwAuthenticate()

public void parseHeader(
org.apache.http.util.CharArrayBuffer)

public void setAcceptRanges(
java.lang.String)

public void setCacheControl(
java.lang.String)

public void setContentDisposition(
java.lang.String)

public void setContentEncoding(
java.lang.String)

public void setContentLength(
long)

public void setContentType(
java.lang.String)

public void setEtag(
java.lang.String)

public void setExpires(
java.lang.String)

public void setLastModified(
java.lang.String)

public void setLocation(
java.lang.String)

public void setProxyAuthenticate(
java.lang.String)

public void setWwwAuthenticate(
java.lang.String)

________________CLASS________________


public class android.net.http.HttpAuthHeader extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String ALGORITHM_TOKEN

public static final int BASIC

public static final java.lang.String BASIC_TOKEN

public static final int DIGEST

public static final java.lang.String DIGEST_TOKEN

private static final java.lang.String NONCE_TOKEN

private static final java.lang.String OPAQUE_TOKEN

private static final java.lang.String QOP_TOKEN

private static final java.lang.String REALM_TOKEN

private static final java.lang.String STALE_TOKEN

public static final int UNKNOWN

private java.lang.String mAlgorithm

private boolean mIsProxy

private java.lang.String mNonce

private java.lang.String mOpaque

private java.lang.String mPassword

private java.lang.String mQop

private java.lang.String mRealm

private int mScheme

private boolean mStale

private java.lang.String mUsername
----------------METHODS----------------

public void <init>(
java.lang.String)

private void parseHeader(
java.lang.String)

private void parseParameter(
java.lang.String)

private void parseParameter(
java.lang.String
java.lang.String)

private void parseParameters(
java.lang.String)

private java.lang.String parseScheme(
java.lang.String)

private void parseStale(
java.lang.String)

private static java.lang.String trimDoubleQuotesIfAny(
java.lang.String)

public java.lang.String getAlgorithm()

public java.lang.String getNonce()

public java.lang.String getOpaque()

public java.lang.String getPassword()

public java.lang.String getQop()

public java.lang.String getRealm()

public int getScheme()

public boolean getStale()

public java.lang.String getUsername()

public boolean isBasic()

public boolean isDigest()

public boolean isProxy()

public boolean isSupportedScheme()

public void setPassword(
java.lang.String)

public void setProxy()

public void setUsername(
java.lang.String)

________________CLASS________________


 class android.net.http.HttpConnection extends android.net.http.Connection

----------------FIELDS----------------
----------------METHODS----------------

 void <init>(
android.content.Context
org.apache.http.HttpHost
android.net.http.RequestQueue$ConnectionManager
android.net.http.RequestFeeder)

 void closeConnection()

 java.lang.String getScheme()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
 android.net.http.AndroidHttpClientConnection openConnection(
android.net.http.Request)

 void restartConnection(
boolean)

________________CLASS________________


 class android.net.http.HttpLog extends java.lang.Object

----------------FIELDS----------------

private static final boolean DEBUG

private static final java.lang.String LOGTAG

static final boolean LOGV
----------------METHODS----------------

 void <init>()

static void e(
java.lang.String)

static void v(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/net/http/HttpsConnection; )
final class android.net.http.HttpsConnection$1 extends java.lang.Object implements javax.net.ssl.X509TrustManager

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public void checkClientTrusted(
java.security.cert.X509Certificate[]
java.lang.String)

public void checkServerTrusted(
java.security.cert.X509Certificate[]
java.lang.String)

public java.security.cert.X509Certificate[] getAcceptedIssuers()

________________CLASS________________


 class android.net.http.HttpsConnection extends android.net.http.Connection

----------------FIELDS----------------

private static javax.net.ssl.SSLContext mSslContext

private static javax.net.ssl.SSLSocketFactory mSslSocketFactory

private boolean mAborted

private java.lang.Object mSuspendLock

private boolean mSuspended
----------------METHODS----------------

static void <clinit>()

 void <init>(
android.content.Context
org.apache.http.HttpHost
android.net.http.RequestQueue$ConnectionManager
android.net.http.RequestFeeder)

static javax.net.ssl.SSLContext getContext()

 void closeConnection()

 java.lang.String getScheme()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
 android.net.http.AndroidHttpClientConnection openConnection(
android.net.http.Request)

 void restartConnection(
boolean)

 void setCertificate(
android.net.http.SslCertificate)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/net/http/IdleCache; )
 class android.net.http.IdleCache$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/http/IdleCache; )
@dalvik.annotation.InnerClass (accessFlags =0 name =Entry )
 class android.net.http.IdleCache$Entry extends java.lang.Object

----------------FIELDS----------------

 android.net.http.Connection mConnection

 org.apache.http.HttpHost mHost

 long mTimeout

final android.net.http.IdleCache this$0
----------------METHODS----------------

 void <init>(
android.net.http.IdleCache)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/http/IdleCache; )
@dalvik.annotation.InnerClass (accessFlags =2 name =IdleReaper )
 class android.net.http.IdleCache$IdleReaper extends java.lang.Thread

----------------FIELDS----------------

final android.net.http.IdleCache this$0
----------------METHODS----------------

private void <init>(
android.net.http.IdleCache)

 void <init>(
android.net.http.IdleCache
android.net.http.IdleCache$1)

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/http/IdleCache$1;Landroid/net/http/IdleCache$IdleReaper;Landroid/net/http/IdleCache$Entry; )
 class android.net.http.IdleCache extends java.lang.Object

----------------FIELDS----------------

private static final int CHECK_INTERVAL

private static final int EMPTY_CHECK_MAX

private static final int IDLE_CACHE_MAX

private static final int TIMEOUT

private int mCached

private int mCount

private android.net.http.IdleCache$Entry[] mEntries

private int mReused

private android.net.http.IdleCache$IdleReaper mThread
----------------METHODS----------------

 void <init>()

static int access$100(
android.net.http.IdleCache)

static void access$200(
android.net.http.IdleCache)

static android.net.http.IdleCache$IdleReaper access$302(
android.net.http.IdleCache
android.net.http.IdleCache$IdleReaper)

private void clearIdle()

 boolean cacheConnection(
org.apache.http.HttpHost
android.net.http.Connection)

 void clear()

 android.net.http.Connection getConnection(
org.apache.http.HttpHost)

________________CLASS________________


public class android.net.http.LoggingEventHandler extends java.lang.Object implements android.net.http.EventHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void certificate(
android.net.http.SslCertificate)

public void data(
byte[]
int)

public void endData()

public void error(
int
java.lang.String)

public void handleSslErrorRequest(
android.net.http.SslError)

public void headers(
android.net.http.Headers)

public void locationChanged(
java.lang.String
boolean)

public void requestSent()

public void status(
int
int
int
java.lang.String)

________________CLASS________________


 class android.net.http.Request extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String ACCEPT_ENCODING_HEADER

private static final java.lang.String CONTENT_LENGTH_HEADER

private static final java.lang.String HOST_HEADER

private static org.apache.http.protocol.RequestContent requestContentProcessor

private int mBodyLength

private java.io.InputStream mBodyProvider

volatile boolean mCancelled

private final java.lang.Object mClientResource

private android.net.http.Connection mConnection

 android.net.http.EventHandler mEventHandler

 int mFailCount

 boolean mHighPriority

 org.apache.http.HttpHost mHost

 org.apache.http.message.BasicHttpRequest mHttpRequest

 java.lang.String mPath

 org.apache.http.HttpHost mProxyHost
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(Ljava/lang/String;Lorg/apache/http/HttpHost;Lorg/apache/http/HttpHost;Ljava/lang/String;Ljava/io/InputStream;ILandroid/net/http/EventHandler;Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;Z)V )
 void <init>(
java.lang.String
org.apache.http.HttpHost
org.apache.http.HttpHost
java.lang.String
java.io.InputStream
int
android.net.http.EventHandler
java.util.Map
boolean)

private static boolean canResponseHaveBody(
org.apache.http.HttpRequest
int)

private void setBodyProvider(
java.io.InputStream
int)

 void addHeader(
java.lang.String
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;)V )
 void addHeaders(
java.util.Map)

 void cancel()

 void complete()

 void error(
int
int)

 android.net.http.EventHandler getEventHandler()

 java.lang.String getHostPort()

 java.lang.String getUri()

public void handleSslErrorResponse(
boolean)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/ParseException; )
 void readResponse(
android.net.http.AndroidHttpClientConnection)

 void reset()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
 void sendRequest(
android.net.http.AndroidHttpClientConnection)

 void setConnection(
android.net.http.Connection)

public java.lang.String toString()

 void waitUntilComplete()

________________CLASS________________


abstract interface class android.net.http.RequestFeeder extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.net.http.Request getRequest()

public abstract android.net.http.Request getRequest(
org.apache.http.HttpHost)

public abstract boolean haveRequest(
org.apache.http.HttpHost)

public abstract void requeueRequest(
android.net.http.Request)

________________CLASS________________


public class android.net.http.RequestHandle extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String AUTHORIZATION_HEADER

private static final int MAX_REDIRECT_COUNT

private static final java.lang.String PROXY_AUTHORIZATION_HEADER

private int mBodyLength

private java.io.InputStream mBodyProvider
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>; )
private java.util.Map mHeaders

private java.lang.String mMethod

private int mRedirectCount

private android.net.http.Request mRequest

private android.net.http.RequestQueue mRequestQueue

private android.net.WebAddress mUri

private java.lang.String mUrl
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Landroid/net/http/RequestQueue;Ljava/lang/String;Landroid/net/WebAddress;Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;Ljava/io/InputStream;ILandroid/net/http/Request;)V )
public void <init>(
android.net.http.RequestQueue
java.lang.String
android.net.WebAddress
java.lang.String
java.util.Map
java.io.InputStream
int
android.net.http.Request)

private java.lang.String H(
java.lang.String)

private java.lang.String KD(
java.lang.String
java.lang.String)

public static java.lang.String authorizationHeader(
boolean)

private java.lang.String bufferToHex(
byte[])

public static java.lang.String computeBasicAuthResponse(
java.lang.String
java.lang.String)

private java.lang.String computeCnonce()

private java.lang.String computeDigest(
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

private java.lang.String computeDigestAuthResponse(
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

private void createAndQueueNewRequest()

private java.lang.String doubleQuote(
java.lang.String)

private void setupAuthResponse()

public void cancel()

public java.lang.String getMethod()

public void handleSslErrorResponse(
boolean)

public boolean isRedirectMax()

public void setupBasicAuthResponse(
boolean
java.lang.String
java.lang.String)

public void setupDigestAuthResponse(
boolean
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/String;ILjava/util/Map<Ljava/lang/String;Ljava/lang/String;>;)Z )
public boolean setupRedirect(
java.lang.String
int
java.util.Map)

public void waitUntilComplete()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.net.http.RequestQueue$1 extends android.content.BroadcastReceiver

----------------FIELDS----------------

final android.net.http.RequestQueue this$0
----------------METHODS----------------

 void <init>(
android.net.http.RequestQueue)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1544 name =ConnectionManager )
@dalvik.annotation.EnclosingClass (value =Landroid/net/http/RequestQueue; )
abstract interface class android.net.http.RequestQueue$ConnectionManager extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.net.http.Connection getConnection(
android.content.Context
org.apache.http.HttpHost)

public abstract org.apache.http.HttpHost getProxyHost()

public abstract boolean isNetworkConnected()

public abstract boolean recycleConnection(
org.apache.http.HttpHost
android.net.http.Connection)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/http/RequestQueue; )
@dalvik.annotation.InnerClass (accessFlags =0 name =ActivePool )
 class android.net.http.RequestQueue$ActivePool extends java.lang.Object implements android.net.http.RequestQueue$ConnectionManager

----------------FIELDS----------------

private int mConnectionCount

 android.net.http.IdleCache mIdleCache

 android.net.http.ConnectionThread[] mThreads

private int mTotalConnection

private int mTotalRequest

final android.net.http.RequestQueue this$0
----------------METHODS----------------

 void <init>(
android.net.http.RequestQueue
int)

static int access$308(
android.net.http.RequestQueue$ActivePool)

 void disablePersistence()

public android.net.http.Connection getConnection(
android.content.Context
org.apache.http.HttpHost)

public org.apache.http.HttpHost getProxyHost()

 android.net.http.ConnectionThread getThread(
org.apache.http.HttpHost)

public boolean isNetworkConnected()

 void logState()

public boolean recycleConnection(
org.apache.http.HttpHost
android.net.http.Connection)

 void shutdown()

 void startConnectionThread()

public void startTiming()

 void startup()

public void stopTiming()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/net/http/RequestQueue$NetworkStateTracker; )
 class android.net.http.RequestQueue$NetworkStateTracker$1 extends android.os.Handler

----------------FIELDS----------------

final android.net.http.RequestQueue$NetworkStateTracker this$1
----------------METHODS----------------

 void <init>(
android.net.http.RequestQueue$NetworkStateTracker)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =NetworkStateTracker )
@dalvik.annotation.EnclosingClass (value =Landroid/net/http/RequestQueue; )
 class android.net.http.RequestQueue$NetworkStateTracker extends java.lang.Object

----------------FIELDS----------------

static final int EVENT_DATA_STATE_CHANGED

 android.net.NetworkConnectivityListener mConnectivityListener

 android.content.Context mContext

 int mCurrentNetworkType

private android.os.Handler mHandler

 android.net.NetworkInfo$State mLastNetworkState

final android.net.http.RequestQueue this$0
----------------METHODS----------------

 void <init>(
android.net.http.RequestQueue
android.content.Context)

 void broadcastState(
boolean)

protected void disable()

protected void enable()

 int getCurrentNetworkType()

 void networkStateChanged()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/http/RequestQueue$ConnectionManager;Landroid/net/http/RequestQueue$ActivePool;Landroid/net/http/RequestQueue$NetworkStateTracker; )
public class android.net.http.RequestQueue extends java.lang.Object implements android.net.http.RequestFeeder

----------------FIELDS----------------

private static final int CONNECTION_COUNT

public static final java.lang.String HTTP_NETWORK_STATE_CHANGED_INTENT

public static final java.lang.String HTTP_NETWORK_STATE_UP

private android.net.http.RequestQueue$ActivePool mActivePool

private boolean mClientWaiting

private android.content.Context mContext

 boolean mNetworkConnected

private android.net.http.RequestQueue$NetworkStateTracker mNetworkStateTracker
@dalvik.annotation.Signature (value =Ljava/util/LinkedHashMap<Lorg/apache/http/HttpHost;Ljava/util/LinkedList<Landroid/net/http/Request;>;>; )
private java.util.LinkedHashMap mPending

private android.content.BroadcastReceiver mProxyChangeReceiver

private org.apache.http.HttpHost mProxyHost
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
int)

static void access$000(
android.net.http.RequestQueue)

static android.content.Context access$100(
android.net.http.RequestQueue)

static org.apache.http.HttpHost access$200(
android.net.http.RequestQueue)
@dalvik.annotation.Signature (value =(Ljava/util/LinkedHashMap<Lorg/apache/http/HttpHost;Ljava/util/LinkedList<Landroid/net/http/Request;>;>;)Landroid/net/http/Request; )
private android.net.http.Request removeFirst(
java.util.LinkedHashMap)

private void setProxyConfig()

public void disablePlatformNotifications()

 void dump()

public void enablePlatformNotifications()

public org.apache.http.HttpHost getProxyHost()

public android.net.http.Request getRequest()

public android.net.http.Request getRequest(
org.apache.http.HttpHost)

public boolean haveRequest(
org.apache.http.HttpHost)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Landroid/net/WebAddress;Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;Landroid/net/http/EventHandler;Ljava/io/InputStream;IZ)Landroid/net/http/RequestHandle; )
public android.net.http.RequestHandle queueRequest(
java.lang.String
android.net.WebAddress
java.lang.String
java.util.Map
android.net.http.EventHandler
java.io.InputStream
int
boolean)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;Landroid/net/http/EventHandler;Ljava/io/InputStream;IZ)Landroid/net/http/RequestHandle; )
public android.net.http.RequestHandle queueRequest(
java.lang.String
java.lang.String
java.util.Map
android.net.http.EventHandler
java.io.InputStream
int
boolean)

protected void queueRequest(
android.net.http.Request
boolean)

 boolean requestsPending()

public void requeueRequest(
android.net.http.Request)

public void setNetworkState(
boolean)

public void shutdown()

public void startTiming()

public void stopTiming()

________________CLASS________________


 class android.net.http.SSLConnectionClosedByUserException extends javax.net.ssl.SSLException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/http/SslCertificate; )
@dalvik.annotation.InnerClass (accessFlags =1 name =DName )
public class android.net.http.SslCertificate$DName extends java.lang.Object

----------------FIELDS----------------

private java.lang.String mCName

private java.lang.String mDName

private java.lang.String mOName

private java.lang.String mUName

final android.net.http.SslCertificate this$0
----------------METHODS----------------

public void <init>(
android.net.http.SslCertificate
java.lang.String)

public java.lang.String getCName()

public java.lang.String getDName()

public java.lang.String getOName()

public java.lang.String getUName()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/http/SslCertificate$DName; )
public class android.net.http.SslCertificate extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String ISSUED_BY

private static final java.lang.String ISSUED_TO

private static final java.lang.String VALID_NOT_AFTER

private static final java.lang.String VALID_NOT_BEFORE

private android.net.http.SslCertificate$DName mIssuedBy

private android.net.http.SslCertificate$DName mIssuedTo

private java.lang.String mValidNotAfter

private java.lang.String mValidNotBefore
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

public void <init>(
java.security.cert.X509Certificate)

public static android.net.http.SslCertificate restoreState(
android.os.Bundle)

public static android.os.Bundle saveState(
android.net.http.SslCertificate)

public android.net.http.SslCertificate$DName getIssuedBy()

public android.net.http.SslCertificate$DName getIssuedTo()

public java.lang.String getValidNotAfter()

public java.lang.String getValidNotBefore()

public java.lang.String toString()

________________CLASS________________


public class android.net.http.SslError extends java.lang.Object

----------------FIELDS----------------

public static final int SSL_EXPIRED

public static final int SSL_IDMISMATCH

public static final int SSL_MAX_ERROR

public static final int SSL_NOTYETVALID

public static final int SSL_UNTRUSTED

 android.net.http.SslCertificate mCertificate

 int mErrors
----------------METHODS----------------

public void <init>(
int
android.net.http.SslCertificate)

public void <init>(
int
java.security.cert.X509Certificate)

public boolean addError(
int)

public android.net.http.SslCertificate getCertificate()

public int getPrimaryError()

public boolean hasError(
int)

public java.lang.String toString()

________________CLASS________________


 class android.net.http.Timer extends java.lang.Object

----------------FIELDS----------------

private long mLast

private long mStart
----------------METHODS----------------

public void <init>()

public void mark(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/wifi/IWifiManager$Stub; )
public abstract interface class android.net.wifi.IWifiManager extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean acquireWifiLock(
android.os.IBinder
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int addOrUpdateNetwork(
android.net.wifi.WifiConfiguration)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean disableNetwork(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean disconnect()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean enableNetwork(
int
boolean)
@dalvik.annotation.Signature (value =()Ljava/util/List<Landroid/net/wifi/WifiConfiguration;>; )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.util.List getConfiguredNetworks()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.net.wifi.WifiInfo getConnectionInfo()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.net.DhcpInfo getDhcpInfo()
@dalvik.annotation.Signature (value =()Ljava/util/List<Landroid/net/wifi/ScanResult;>; )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.util.List getScanResults()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getWifiState()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean pingSupplicant()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean reassociate()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean reconnect()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean releaseWifiLock(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean removeNetwork(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean saveConfiguration()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean setWifiEnabled(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean startScan()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/IWifiManager$Stub; )
 class android.net.wifi.IWifiManager$Stub$Proxy extends java.lang.Object implements android.net.wifi.IWifiManager

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean acquireWifiLock(
android.os.IBinder
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int addOrUpdateNetwork(
android.net.wifi.WifiConfiguration)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean disableNetwork(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean disconnect()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean enableNetwork(
int
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =()Ljava/util/List<Landroid/net/wifi/WifiConfiguration;>; )
public java.util.List getConfiguredNetworks()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.net.wifi.WifiInfo getConnectionInfo()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.net.DhcpInfo getDhcpInfo()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Signature (value =()Ljava/util/List<Landroid/net/wifi/ScanResult;>; )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.util.List getScanResults()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getWifiState()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean pingSupplicant()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean reassociate()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean reconnect()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean releaseWifiLock(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean removeNetwork(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean saveConfiguration()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean setWifiEnabled(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean startScan()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/net/wifi/IWifiManager$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/IWifiManager; )
public abstract class android.net.wifi.IWifiManager$Stub extends android.os.Binder implements android.net.wifi.IWifiManager

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_acquireWifiLock

static final int TRANSACTION_addOrUpdateNetwork

static final int TRANSACTION_disableNetwork

static final int TRANSACTION_disconnect

static final int TRANSACTION_enableNetwork

static final int TRANSACTION_getConfiguredNetworks

static final int TRANSACTION_getConnectionInfo

static final int TRANSACTION_getDhcpInfo

static final int TRANSACTION_getScanResults

static final int TRANSACTION_getWifiState

static final int TRANSACTION_pingSupplicant

static final int TRANSACTION_reassociate

static final int TRANSACTION_reconnect

static final int TRANSACTION_releaseWifiLock

static final int TRANSACTION_removeNetwork

static final int TRANSACTION_saveConfiguration

static final int TRANSACTION_setWifiEnabled

static final int TRANSACTION_startScan
----------------METHODS----------------

public void <init>()

public static android.net.wifi.IWifiManager asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/ScanResult; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/net/wifi/ScanResult;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.net.wifi.ScanResult$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.net.wifi.ScanResult createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.net.wifi.ScanResult[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.net.wifi.ScanResult extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/net/wifi/ScanResult;>; )
public static final android.os.Parcelable$Creator CREATOR

public java.lang.String BSSID

public java.lang.String SSID

public java.lang.String capabilities

public int frequency

public int level
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String
java.lang.String
java.lang.String
int
int)

public int describeContents()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/net/wifi/SupplicantState;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/SupplicantState; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.net.wifi.SupplicantState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.net.wifi.SupplicantState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.net.wifi.SupplicantState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/net/wifi/SupplicantState;>;Landroid/os/Parcelable; )
public final class android.net.wifi.SupplicantState extends java.lang.Enum implements android.os.Parcelable

----------------FIELDS----------------

private static final android.net.wifi.SupplicantState[] $VALUES

public static final android.net.wifi.SupplicantState ASSOCIATED

public static final android.net.wifi.SupplicantState ASSOCIATING

public static final android.net.wifi.SupplicantState COMPLETED
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/net/wifi/SupplicantState;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final android.net.wifi.SupplicantState DISCONNECTED

public static final android.net.wifi.SupplicantState DORMANT

public static final android.net.wifi.SupplicantState FOUR_WAY_HANDSHAKE

public static final android.net.wifi.SupplicantState GROUP_HANDSHAKE

public static final android.net.wifi.SupplicantState INACTIVE

public static final android.net.wifi.SupplicantState INVALID

public static final android.net.wifi.SupplicantState SCANNING

public static final android.net.wifi.SupplicantState UNINITIALIZED
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static boolean isValidState(
android.net.wifi.SupplicantState)

public static android.net.wifi.SupplicantState valueOf(
java.lang.String)

public static android.net.wifi.SupplicantState[] values()

public int describeContents()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/WifiConfiguration; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/net/wifi/WifiConfiguration;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.net.wifi.WifiConfiguration$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.net.wifi.WifiConfiguration createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.net.wifi.WifiConfiguration[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/WifiConfiguration; )
@dalvik.annotation.InnerClass (accessFlags =9 name =AuthAlgorithm )
public class android.net.wifi.WifiConfiguration$AuthAlgorithm extends java.lang.Object

----------------FIELDS----------------

public static final int LEAP

public static final int OPEN

public static final int SHARED

public static final java.lang.String[] strings

public static final java.lang.String varName
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/WifiConfiguration; )
@dalvik.annotation.InnerClass (accessFlags =9 name =GroupCipher )
public class android.net.wifi.WifiConfiguration$GroupCipher extends java.lang.Object

----------------FIELDS----------------

public static final int CCMP

public static final int TKIP

public static final int WEP104

public static final int WEP40

public static final java.lang.String[] strings

public static final java.lang.String varName
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =KeyMgmt )
@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/WifiConfiguration; )
public class android.net.wifi.WifiConfiguration$KeyMgmt extends java.lang.Object

----------------FIELDS----------------

public static final int IEEE8021X

public static final int NONE

public static final int WPA_EAP

public static final int WPA_PSK

public static final java.lang.String[] strings

public static final java.lang.String varName
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =PairwiseCipher )
@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/WifiConfiguration; )
public class android.net.wifi.WifiConfiguration$PairwiseCipher extends java.lang.Object

----------------FIELDS----------------

public static final int CCMP

public static final int NONE

public static final int TKIP

public static final java.lang.String[] strings

public static final java.lang.String varName
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Protocol )
@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/WifiConfiguration; )
public class android.net.wifi.WifiConfiguration$Protocol extends java.lang.Object

----------------FIELDS----------------

public static final int RSN

public static final int WPA

public static final java.lang.String[] strings

public static final java.lang.String varName
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/WifiConfiguration; )
@dalvik.annotation.InnerClass (accessFlags =9 name =Status )
public class android.net.wifi.WifiConfiguration$Status extends java.lang.Object

----------------FIELDS----------------

public static final int CURRENT

public static final int DISABLED

public static final int ENABLED

public static final java.lang.String[] strings
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/wifi/WifiConfiguration$Status;Landroid/net/wifi/WifiConfiguration$GroupCipher;Landroid/net/wifi/WifiConfiguration$PairwiseCipher;Landroid/net/wifi/WifiConfiguration$AuthAlgorithm;Landroid/net/wifi/WifiConfiguration$Protocol;Landroid/net/wifi/WifiConfiguration$KeyMgmt; )
public class android.net.wifi.WifiConfiguration extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/net/wifi/WifiConfiguration;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final java.lang.String bssidVarName

public static final java.lang.String hiddenSSIDVarName

public static final java.lang.String priorityVarName

public static final java.lang.String pskVarName

public static final java.lang.String ssidVarName

public static final java.lang.String[] wepKeyVarNames

public static final java.lang.String wepTxKeyIdxVarName

public java.lang.String BSSID

public java.lang.String SSID

public java.util.BitSet allowedAuthAlgorithms

public java.util.BitSet allowedGroupCiphers

public java.util.BitSet allowedKeyManagement

public java.util.BitSet allowedPairwiseCiphers

public java.util.BitSet allowedProtocols

public boolean hiddenSSID

public int networkId

public java.lang.String preSharedKey

public int priority

public int status

public java.lang.String[] wepKeys

public int wepTxKeyIndex
----------------METHODS----------------

static void <clinit>()

public void <init>()

static java.util.BitSet access$000(
android.os.Parcel)

private static java.util.BitSet readBitSet(
android.os.Parcel)

private static void writeBitSet(
android.os.Parcel
java.util.BitSet)

public int describeContents()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/WifiInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/net/wifi/WifiInfo;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.net.wifi.WifiInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.net.wifi.WifiInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.net.wifi.WifiInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.net.wifi.WifiInfo extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/net/wifi/WifiInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final java.lang.String LINK_SPEED_UNITS
@dalvik.annotation.Signature (value =Ljava/util/EnumMap<Landroid/net/wifi/SupplicantState;Landroid/net/NetworkInfo$DetailedState;>; )
private static final java.util.EnumMap stateMap

private java.lang.String mBSSID

private boolean mHiddenSSID

private int mIpAddress

private int mLinkSpeed

private java.lang.String mMacAddress

private int mNetworkId

private int mRssi

private java.lang.String mSSID

private android.net.wifi.SupplicantState mSupplicantState
----------------METHODS----------------

static void <clinit>()

 void <init>()

static java.lang.String access$002(
android.net.wifi.WifiInfo
java.lang.String)

static java.lang.String access$102(
android.net.wifi.WifiInfo
java.lang.String)

static android.net.wifi.SupplicantState access$202(
android.net.wifi.WifiInfo
android.net.wifi.SupplicantState)

public static android.net.NetworkInfo$DetailedState getDetailedStateOf(
android.net.wifi.SupplicantState)

static android.net.wifi.SupplicantState valueOf(
java.lang.String)

public int describeContents()

public java.lang.String getBSSID()

public boolean getHiddenSSID()

public int getIpAddress()

public int getLinkSpeed()

public java.lang.String getMacAddress()

public int getNetworkId()

public int getRssi()

public java.lang.String getSSID()

public android.net.wifi.SupplicantState getSupplicantState()

 void setBSSID(
java.lang.String)

public void setHiddenSSID(
boolean)

 void setIpAddress(
int)

 void setLinkSpeed(
int)

 void setMacAddress(
java.lang.String)

 void setNetworkId(
int)

 void setRssi(
int)

 void setSSID(
java.lang.String)

 void setSupplicantState(
android.net.wifi.SupplicantState)

 void setSupplicantState(
java.lang.String)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/WifiManager; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.net.wifi.WifiManager$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/WifiManager; )
@dalvik.annotation.InnerClass (accessFlags =1 name =WifiLock )
public class android.net.wifi.WifiManager$WifiLock extends java.lang.Object

----------------FIELDS----------------

private android.os.IBinder mBinder

private boolean mHeld

private int mRefCount

private boolean mRefCounted

private java.lang.String mTag

final android.net.wifi.WifiManager this$0
----------------METHODS----------------

private void <init>(
android.net.wifi.WifiManager
java.lang.String)

 void <init>(
android.net.wifi.WifiManager
java.lang.String
android.net.wifi.WifiManager$1)

public void acquire()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public boolean isHeld()

public void release()

public void setReferenceCounted(
boolean)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/wifi/WifiManager$1;Landroid/net/wifi/WifiManager$WifiLock; )
public class android.net.wifi.WifiManager extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACTION_PICK_WIFI_NETWORK

public static final int ERROR_AUTHENTICATING

public static final java.lang.String EXTRA_BSSID

public static final java.lang.String EXTRA_NETWORK_INFO

public static final java.lang.String EXTRA_NEW_RSSI

public static final java.lang.String EXTRA_NEW_STATE

public static final java.lang.String EXTRA_PREVIOUS_WIFI_STATE

public static final java.lang.String EXTRA_SUPPLICANT_CONNECTED

public static final java.lang.String EXTRA_SUPPLICANT_ERROR

public static final java.lang.String EXTRA_WIFI_STATE

private static final int MAX_RSSI

private static final int MIN_RSSI

public static final java.lang.String NETWORK_IDS_CHANGED_ACTION

public static final java.lang.String NETWORK_STATE_CHANGED_ACTION

public static final java.lang.String RSSI_CHANGED_ACTION

public static final java.lang.String SCAN_RESULTS_AVAILABLE_ACTION

public static final java.lang.String SUPPLICANT_CONNECTION_CHANGE_ACTION

public static final java.lang.String SUPPLICANT_STATE_CHANGED_ACTION

public static final java.lang.String WIFI_STATE_CHANGED_ACTION

public static final int WIFI_STATE_DISABLED

public static final int WIFI_STATE_DISABLING

public static final int WIFI_STATE_ENABLED

public static final int WIFI_STATE_ENABLING

public static final int WIFI_STATE_UNKNOWN

 android.os.Handler mHandler

 android.net.wifi.IWifiManager mService
----------------METHODS----------------

private void <init>()

public void <init>(
android.net.wifi.IWifiManager
android.os.Handler)

private int addOrUpdateNetwork(
android.net.wifi.WifiConfiguration)

public static int calculateSignalLevel(
int
int)

public static int compareSignalLevel(
int
int)

public int addNetwork(
android.net.wifi.WifiConfiguration)

public android.net.wifi.WifiManager$WifiLock createWifiLock(
java.lang.String)

public boolean disableNetwork(
int)

public boolean disconnect()

public boolean enableNetwork(
int
boolean)
@dalvik.annotation.Signature (value =()Ljava/util/List<Landroid/net/wifi/WifiConfiguration;>; )
public java.util.List getConfiguredNetworks()

public android.net.wifi.WifiInfo getConnectionInfo()

public android.net.DhcpInfo getDhcpInfo()
@dalvik.annotation.Signature (value =()Ljava/util/List<Landroid/net/wifi/ScanResult;>; )
public java.util.List getScanResults()

public int getWifiState()

public boolean isWifiEnabled()

public boolean pingSupplicant()

public boolean reassociate()

public boolean reconnect()

public boolean removeNetwork(
int)

public boolean saveConfiguration()

public boolean setWifiEnabled(
boolean)

public boolean startScan()

public int updateNetwork(
android.net.wifi.WifiConfiguration)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/WifiMonitor; )
@dalvik.annotation.InnerClass (accessFlags =0 name =MonitorThread )
 class android.net.wifi.WifiMonitor$MonitorThread extends java.lang.Thread

----------------FIELDS----------------

final android.net.wifi.WifiMonitor this$0
----------------METHODS----------------

public void <init>(
android.net.wifi.WifiMonitor)

private void ensureSupplicantConnection()

private void handleDriverEvent(
java.lang.String)

private void handlePasswordKeyMayBeIncorrect()

private void handleSupplicantStateChange(
java.lang.String)

 void handleEvent(
int
java.lang.String)

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/wifi/WifiMonitor$MonitorThread; )
public class android.net.wifi.WifiMonitor extends java.lang.Object

----------------FIELDS----------------

private static final int CONNECTED

private static final int DISCONNECTED

private static final int DRIVER_STATE

private static final int LINK_SPEED

private static final int SCAN_RESULTS

private static final int STATE_CHANGE

private static final java.lang.String TAG

private static final int TERMINATING

private static final int UNKNOWN

private static final java.lang.String connectedEvent

private static final java.lang.String disconnectedEvent

private static final java.lang.String driverStateEvent

private static final java.lang.String eventPrefix

private static final int eventPrefixLen

private static final java.lang.String linkSpeedEvent

private static java.util.regex.Pattern mConnectedEventPattern

private static final java.lang.String passwordKeyMayBeIncorrectEvent

private static final java.lang.String scanResultsEvent

private static final java.lang.String stateChangeEvent

private static final java.lang.String terminatingEvent

private static final java.lang.String wpaEventPrefix

private final android.net.wifi.WifiStateTracker mWifiStateTracker

private boolean oneShot

private boolean supplicantConnected
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.net.wifi.WifiStateTracker)

static int access$000()

static boolean access$100(
android.net.wifi.WifiMonitor)

static boolean access$102(
android.net.wifi.WifiMonitor
boolean)

static android.net.wifi.WifiStateTracker access$200(
android.net.wifi.WifiMonitor)

static boolean access$300(
android.net.wifi.WifiMonitor)

static boolean access$302(
android.net.wifi.WifiMonitor
boolean)

static void access$400(
int)

static void access$500(
android.net.wifi.WifiMonitor
android.net.NetworkInfo$DetailedState
java.lang.String)

private void handleNetworkStateChange(
android.net.NetworkInfo$DetailedState
java.lang.String)

private static void nap(
int)

public android.net.NetworkStateTracker getNetworkStateTracker()

public void startMonitoring()

________________CLASS________________


public class android.net.wifi.WifiNative extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static native int addNetworkCommand()

public static native boolean addToBlacklistCommand(
java.lang.String)

public static native boolean clearBlacklistCommand()

public static native void closeSupplicantConnection()

public static native boolean connectToSupplicant()

public static native boolean disableNetworkCommand(
int)

public static native boolean disconnectCommand()

public static native boolean doDhcpRequest(
android.net.DhcpInfo)

public static native boolean enableNetworkCommand(
int
boolean)

public static native java.lang.String getDhcpError()

public static native java.lang.String getErrorString(
int)

public static native int getLinkSpeedCommand()

public static native java.lang.String getMacAddressCommand()

public static native java.lang.String getNetworkVariableCommand(
int
java.lang.String)

public static native int getRssiCommand()

public static native java.lang.String listNetworksCommand()

public static native boolean loadDriver()

public static native boolean pingCommand()

public static native boolean reassociateCommand()

public static native boolean reconnectCommand()

public static native boolean reloadConfigCommand()

public static native boolean removeNetworkCommand(
int)

public static native boolean saveConfigCommand()

public static native boolean scanCommand()

public static native java.lang.String scanResultsCommand()

public static native boolean setNetworkVariableCommand(
int
java.lang.String
java.lang.String)

public static native boolean setPowerModeCommand(
int)

public static native boolean setScanModeCommand(
boolean)

public static native boolean setScanResultHandlingCommand(
int)

public static native boolean startDriverCommand()

public static native boolean startSupplicant()

public static native java.lang.String statusCommand()

public static native boolean stopDriverCommand()

public static native boolean stopSupplicant()

public static native boolean unloadDriver()

public static native java.lang.String waitForEvent()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/WifiStateTracker; )
@dalvik.annotation.InnerClass (accessFlags =2 name =DhcpHandler )
 class android.net.wifi.WifiStateTracker$DhcpHandler extends android.os.Handler

----------------FIELDS----------------

private boolean mCancelCallback

private android.os.Handler mTarget

final android.net.wifi.WifiStateTracker this$0
----------------METHODS----------------

public void <init>(
android.net.wifi.WifiStateTracker
android.os.Looper
android.os.Handler)

public void handleMessage(
android.os.Message)

public void setCancelCallback(
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/WifiStateTracker; )
@dalvik.annotation.InnerClass (accessFlags =10 name =NetworkStateChangeResult )
 class android.net.wifi.WifiStateTracker$NetworkStateChangeResult extends java.lang.Object

----------------FIELDS----------------

 java.lang.String BSSID

 int networkId

 android.net.NetworkInfo$DetailedState state
----------------METHODS----------------

 void <init>(
android.net.NetworkInfo$DetailedState
java.lang.String
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =NotificationEnabledSettingObserver )
@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/WifiStateTracker; )
 class android.net.wifi.WifiStateTracker$NotificationEnabledSettingObserver extends android.database.ContentObserver

----------------FIELDS----------------

final android.net.wifi.WifiStateTracker this$0
----------------METHODS----------------

public void <init>(
android.net.wifi.WifiStateTracker
android.os.Handler)

private boolean getValue()

public void onChange(
boolean)

public void register()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =StaticIpSettingObserver )
@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/WifiStateTracker; )
 class android.net.wifi.WifiStateTracker$StaticIpSettingObserver extends android.database.ContentObserver

----------------FIELDS----------------

final android.net.wifi.WifiStateTracker this$0
----------------METHODS----------------

public void <init>(
android.net.wifi.WifiStateTracker
android.os.Handler)

public void onChange(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =SupplicantStateChangeResult )
@dalvik.annotation.EnclosingClass (value =Landroid/net/wifi/WifiStateTracker; )
 class android.net.wifi.WifiStateTracker$SupplicantStateChangeResult extends java.lang.Object

----------------FIELDS----------------

 int networkId

 android.net.wifi.SupplicantState state
----------------METHODS----------------

 void <init>(
int
android.net.wifi.SupplicantState)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/net/wifi/WifiStateTracker$NotificationEnabledSettingObserver;Landroid/net/wifi/WifiStateTracker$StaticIpSettingObserver;Landroid/net/wifi/WifiStateTracker$DhcpHandler;Landroid/net/wifi/WifiStateTracker$NetworkStateChangeResult;Landroid/net/wifi/WifiStateTracker$SupplicantStateChangeResult; )
public class android.net.wifi.WifiStateTracker extends android.net.NetworkStateTracker

----------------FIELDS----------------

private static final int DISCONNECT_DELAY_MSECS

private static final int DRIVER_POWER_MODE_ACTIVE

private static final int DRIVER_POWER_MODE_AUTO

private static final int EVENTLOG_DRIVER_STATE_CHANGED

private static final int EVENTLOG_INTERFACE_CONFIGURATION_STATE_CHANGED

private static final int EVENTLOG_NETWORK_STATE_CHANGED

private static final int EVENTLOG_SUPPLICANT_CONNECTION_STATE_CHANGED

private static final int EVENTLOG_SUPPLICANT_STATE_CHANGED

private static final int EVENT_DEFERRED_DISCONNECT

private static final int EVENT_DEFERRED_RECONNECT

private static final int EVENT_DHCP_START

private static final int EVENT_DRIVER_STATE_CHANGED

private static final int EVENT_INTERFACE_CONFIGURATION_FAILED

private static final int EVENT_INTERFACE_CONFIGURATION_SUCCEEDED

private static final int EVENT_NETWORK_STATE_CHANGED

private static final int EVENT_PASSWORD_KEY_MAY_BE_INCORRECT

private static final int EVENT_POLL_INTERVAL

private static final int EVENT_SCAN_RESULTS_AVAILABLE

private static final int EVENT_SUPPLICANT_CONNECTION

private static final int EVENT_SUPPLICANT_DISCONNECT

private static final int EVENT_SUPPLICANT_STATE_CHANGED

private static final int ICON_NETWORKS_AVAILABLE

private static final boolean LOCAL_LOGD

private static java.lang.String LS

private static final int MAX_RECONNECT_ATTEMPTS

private static final int MAX_SUPPLICANT_LOOP_ITERATIONS

private static final int NUM_SCANS_BEFORE_ACTUALLY_SCANNING

private static final int POLL_STATUS_INTERVAL_MSECS

private static final int RECONNECT_DELAY_MSECS

public static final int SUPPL_SCAN_HANDLING_LIST_ONLY

public static final int SUPPL_SCAN_HANDLING_NORMAL

private static final java.lang.String TAG

private static java.lang.String[] sDnsPropNames

private final long NOTIFICATION_REPEAT_DELAY_MS

private android.net.DhcpInfo mDhcpInfo

private android.net.wifi.WifiStateTracker$DhcpHandler mDhcpTarget

private boolean mDisconnectPending

private boolean mDriverIsStopped

private boolean mExplicitlyDisabled

private boolean mHaveIPAddress

private java.lang.String mInterfaceName

private boolean mIsScanModeActive

private boolean mIsScanModeSetDueToAHiddenNetwork

private java.lang.String mLastBssid

private int mLastNetworkId

private int mLastSignalLevel

private java.lang.String mLastSsid

private android.app.Notification mNotification

private boolean mNotificationEnabled

private android.net.wifi.WifiStateTracker$NotificationEnabledSettingObserver mNotificationEnabledSettingObserver

private long mNotificationRepeatTime

private boolean mNotificationShown

private int mNumScansSinceNetworkStateChange

private int mNumSupplicantLoopIterations

private boolean mObtainingIPAddress

private boolean mPasswordKeyMayBeIncorrect

private int mReconnectCount

private int[] mSavedConfiguration
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/net/wifi/ScanResult;>; )
private java.util.List mScanResults

private android.net.wifi.WifiStateTracker$StaticIpSettingObserver mStaticIpSettingObserver

private android.net.wifi.SupplicantState mSupplicantLoopState

private boolean mUseStaticIp

private android.net.wifi.WifiManager mWM

private android.net.wifi.WifiInfo mWifiInfo

private android.net.wifi.WifiMonitor mWifiMonitor
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context
android.os.Handler)

static java.lang.String access$000(
android.net.wifi.WifiStateTracker)

static android.net.DhcpInfo access$100(
android.net.wifi.WifiStateTracker)

static void access$1000(
android.net.wifi.WifiStateTracker)

static android.content.Context access$1100(
android.net.wifi.WifiStateTracker)

static android.content.Context access$200(
android.net.wifi.WifiStateTracker)

static android.net.wifi.WifiInfo access$300(
android.net.wifi.WifiStateTracker)

static boolean access$400(
android.net.wifi.WifiStateTracker)

static void access$500(
android.net.wifi.WifiStateTracker)

static void access$600(
android.net.wifi.WifiStateTracker)

static android.os.Handler access$700(
android.net.wifi.WifiStateTracker)

static android.content.Context access$800(
android.net.wifi.WifiStateTracker)

static boolean access$900(
android.net.wifi.WifiStateTracker)

static boolean access$902(
android.net.wifi.WifiStateTracker
boolean)

private void cancelDisconnect()

private void checkUseStaticIp()

private void configureInterface()

private void handleDisconnectedState(
android.net.NetworkInfo$DetailedState)

private boolean isSupplicantLooping(
android.net.wifi.SupplicantState)

private void requestConnectionStatus(
android.net.wifi.WifiInfo)

private void requestPolledInfo(
android.net.wifi.WifiInfo)

private void resetNotificationTimer()

private void resetSupplicantLoopState()

private void scheduleDisconnect()

private void sendNetworkStateChangeBroadcast()

private void sendRssiChangeBroadcast(
int)

private void setExplicitlyDisabled(
boolean)

private void setPollTimer()

private void setSupplicantState(
android.net.wifi.SupplicantState)

private void setSupplicantState(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/net/UnknownHostException; )
private static int stringToIpAddr(
java.lang.String)

private void updateNetworkInfo()

private boolean wifiManagerDisableNetwork(
int)

public boolean addToBlacklist(
java.lang.String)

public boolean clearBlacklist()

public android.net.DhcpInfo getDhcpInfo()

public java.lang.String[] getNameServers()
@dalvik.annotation.Signature (value =()Ljava/util/List<Landroid/net/wifi/ScanResult;>; )
public java.util.List getScanResultsList()

public android.net.wifi.SupplicantState getSupplicantState()

public java.lang.String getTcpBufferSizesPropName()

public void handleMessage(
android.os.Message)

public void interpretScanResultsAvailable()

public boolean isAvailable()

public boolean isConnectionCompleted()

 void notifyDriverStarted()

 void notifyDriverStopped()

 void notifyPasswordKeyMayBeIncorrect()

 void notifyScanResultsAvailable()

 void notifyStateChange(
int
android.net.wifi.SupplicantState)

 void notifyStateChange(
android.net.NetworkInfo$DetailedState
java.lang.String
int)

 void notifySupplicantConnection()

 void notifySupplicantLost()

public boolean reconnect()

public android.net.wifi.WifiInfo requestConnectionInfo()

public void resetInterface()

public void setNotificationVisible(
boolean
int
boolean
int)

public boolean setRadio(
boolean)

public void setScanMode(
boolean
boolean)
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/net/wifi/ScanResult;>;)V )
public void setScanResultsList(
java.util.List)

public void startEventLoop()

public void startMonitoring()

public int startUsingNetworkFeature(
java.lang.String
int
int)

public int stopUsingNetworkFeature(
java.lang.String
int
int)

public boolean teardown()

public java.lang.String toString()

________________CLASS________________


public abstract interface class javax.microedition.khronos.egl.EGL extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________


public abstract interface class javax.microedition.khronos.egl.EGL10 extends java.lang.Object implements javax.microedition.khronos.egl.EGL

----------------FIELDS----------------

public static final int EGL_ALPHA_FORMAT

public static final int EGL_ALPHA_MASK_SIZE

public static final int EGL_ALPHA_SIZE

public static final int EGL_BAD_ACCESS

public static final int EGL_BAD_ALLOC

public static final int EGL_BAD_ATTRIBUTE

public static final int EGL_BAD_CONFIG

public static final int EGL_BAD_CONTEXT

public static final int EGL_BAD_CURRENT_SURFACE

public static final int EGL_BAD_DISPLAY

public static final int EGL_BAD_MATCH

public static final int EGL_BAD_NATIVE_PIXMAP

public static final int EGL_BAD_NATIVE_WINDOW

public static final int EGL_BAD_PARAMETER

public static final int EGL_BAD_SURFACE

public static final int EGL_BLUE_SIZE

public static final int EGL_BUFFER_SIZE

public static final int EGL_COLORSPACE

public static final int EGL_COLOR_BUFFER_TYPE

public static final int EGL_CONFIG_CAVEAT

public static final int EGL_CONFIG_ID

public static final int EGL_CORE_NATIVE_ENGINE

public static final java.lang.Object EGL_DEFAULT_DISPLAY

public static final int EGL_DEPTH_SIZE

public static final int EGL_DONT_CARE

public static final int EGL_DRAW

public static final int EGL_EXTENSIONS

public static final int EGL_GREEN_SIZE

public static final int EGL_HEIGHT

public static final int EGL_HORIZONTAL_RESOLUTION

public static final int EGL_LARGEST_PBUFFER

public static final int EGL_LEVEL

public static final int EGL_LUMINANCE_BUFFER

public static final int EGL_LUMINANCE_SIZE

public static final int EGL_MAX_PBUFFER_HEIGHT

public static final int EGL_MAX_PBUFFER_PIXELS

public static final int EGL_MAX_PBUFFER_WIDTH

public static final int EGL_NATIVE_RENDERABLE

public static final int EGL_NATIVE_VISUAL_ID

public static final int EGL_NATIVE_VISUAL_TYPE

public static final int EGL_NONE

public static final int EGL_NON_CONFORMANT_CONFIG

public static final int EGL_NOT_INITIALIZED

public static final javax.microedition.khronos.egl.EGLContext EGL_NO_CONTEXT

public static final javax.microedition.khronos.egl.EGLDisplay EGL_NO_DISPLAY

public static final javax.microedition.khronos.egl.EGLSurface EGL_NO_SURFACE

public static final int EGL_PBUFFER_BIT

public static final int EGL_PIXEL_ASPECT_RATIO

public static final int EGL_PIXMAP_BIT

public static final int EGL_READ

public static final int EGL_RED_SIZE

public static final int EGL_RENDERABLE_TYPE

public static final int EGL_RENDER_BUFFER

public static final int EGL_RGB_BUFFER

public static final int EGL_SAMPLES

public static final int EGL_SAMPLE_BUFFERS

public static final int EGL_SINGLE_BUFFER

public static final int EGL_SLOW_CONFIG

public static final int EGL_STENCIL_SIZE

public static final int EGL_SUCCESS

public static final int EGL_SURFACE_TYPE

public static final int EGL_TRANSPARENT_BLUE_VALUE

public static final int EGL_TRANSPARENT_GREEN_VALUE

public static final int EGL_TRANSPARENT_RED_VALUE

public static final int EGL_TRANSPARENT_RGB

public static final int EGL_TRANSPARENT_TYPE

public static final int EGL_VENDOR

public static final int EGL_VERSION

public static final int EGL_VERTICAL_RESOLUTION

public static final int EGL_WIDTH

public static final int EGL_WINDOW_BIT
----------------METHODS----------------

static void <clinit>()

public abstract boolean eglChooseConfig(
javax.microedition.khronos.egl.EGLDisplay
int[]
javax.microedition.khronos.egl.EGLConfig[]
int
int[])

public abstract boolean eglCopyBuffers(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLSurface
java.lang.Object)

public abstract javax.microedition.khronos.egl.EGLContext eglCreateContext(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
javax.microedition.khronos.egl.EGLContext
int[])

public abstract javax.microedition.khronos.egl.EGLSurface eglCreatePbufferSurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
int[])

public abstract javax.microedition.khronos.egl.EGLSurface eglCreatePixmapSurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
java.lang.Object
int[])

public abstract javax.microedition.khronos.egl.EGLSurface eglCreateWindowSurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
java.lang.Object
int[])

public abstract boolean eglDestroyContext(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLContext)

public abstract boolean eglDestroySurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLSurface)

public abstract boolean eglGetConfigAttrib(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
int
int[])

public abstract boolean eglGetConfigs(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig[]
int
int[])

public abstract javax.microedition.khronos.egl.EGLContext eglGetCurrentContext()

public abstract javax.microedition.khronos.egl.EGLDisplay eglGetCurrentDisplay()

public abstract javax.microedition.khronos.egl.EGLSurface eglGetCurrentSurface(
int)

public abstract javax.microedition.khronos.egl.EGLDisplay eglGetDisplay(
java.lang.Object)

public abstract int eglGetError()

public abstract boolean eglInitialize(
javax.microedition.khronos.egl.EGLDisplay
int[])

public abstract boolean eglMakeCurrent(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLSurface
javax.microedition.khronos.egl.EGLSurface
javax.microedition.khronos.egl.EGLContext)

public abstract boolean eglQueryContext(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLContext
int
int[])

public abstract java.lang.String eglQueryString(
javax.microedition.khronos.egl.EGLDisplay
int)

public abstract boolean eglQuerySurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLSurface
int
int[])

public abstract boolean eglSwapBuffers(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLSurface)

public abstract boolean eglTerminate(
javax.microedition.khronos.egl.EGLDisplay)

public abstract boolean eglWaitGL()

public abstract boolean eglWaitNative(
int
java.lang.Object)

________________CLASS________________


public abstract interface class javax.microedition.khronos.egl.EGL11 extends java.lang.Object implements javax.microedition.khronos.egl.EGL10

----------------FIELDS----------------

public static final int EGL_CONTEXT_LOST
----------------METHODS----------------

________________CLASS________________


 class android.opengl.EGLLogWrapper extends java.lang.Object implements javax.microedition.khronos.egl.EGL11

----------------FIELDS----------------

private int mArgCount

 boolean mCheckError

private javax.microedition.khronos.egl.EGL10 mEgl10

 java.io.Writer mLog

 boolean mLogArgumentNames
----------------METHODS----------------

public void <init>(
javax.microedition.khronos.egl.EGL
int
java.io.Writer)

private void arg(
java.lang.String
int)

private void arg(
java.lang.String
java.lang.Object)

private void arg(
java.lang.String
java.lang.String)

private void arg(
java.lang.String
javax.microedition.khronos.egl.EGLContext)

private void arg(
java.lang.String
javax.microedition.khronos.egl.EGLDisplay)

private void arg(
java.lang.String
javax.microedition.khronos.egl.EGLSurface)

private void arg(
java.lang.String
int[])

private void arg(
java.lang.String
java.lang.Object[])

private void begin(
java.lang.String)

private void checkError()

private void end()

private void flush()

public static java.lang.String getErrorString(
int)

private static java.lang.String getHex(
int)

private void log(
java.lang.String)

private void logLine(
java.lang.String)

private void returns(
int)

private void returns(
java.lang.Object)

private void returns(
java.lang.String)

private void returns(
boolean)

private java.lang.String toString(
int
int[]
int)

private java.lang.String toString(
int
java.lang.Object[]
int)

private java.lang.String toString(
java.lang.Object)

public boolean eglChooseConfig(
javax.microedition.khronos.egl.EGLDisplay
int[]
javax.microedition.khronos.egl.EGLConfig[]
int
int[])

public boolean eglCopyBuffers(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLSurface
java.lang.Object)

public javax.microedition.khronos.egl.EGLContext eglCreateContext(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
javax.microedition.khronos.egl.EGLContext
int[])

public javax.microedition.khronos.egl.EGLSurface eglCreatePbufferSurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
int[])

public javax.microedition.khronos.egl.EGLSurface eglCreatePixmapSurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
java.lang.Object
int[])

public javax.microedition.khronos.egl.EGLSurface eglCreateWindowSurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
java.lang.Object
int[])

public boolean eglDestroyContext(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLContext)

public boolean eglDestroySurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLSurface)

public boolean eglGetConfigAttrib(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
int
int[])

public boolean eglGetConfigs(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig[]
int
int[])

public javax.microedition.khronos.egl.EGLContext eglGetCurrentContext()

public javax.microedition.khronos.egl.EGLDisplay eglGetCurrentDisplay()

public javax.microedition.khronos.egl.EGLSurface eglGetCurrentSurface(
int)

public javax.microedition.khronos.egl.EGLDisplay eglGetDisplay(
java.lang.Object)

public int eglGetError()

public boolean eglInitialize(
javax.microedition.khronos.egl.EGLDisplay
int[])

public boolean eglMakeCurrent(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLSurface
javax.microedition.khronos.egl.EGLSurface
javax.microedition.khronos.egl.EGLContext)

public boolean eglQueryContext(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLContext
int
int[])

public java.lang.String eglQueryString(
javax.microedition.khronos.egl.EGLDisplay
int)

public boolean eglQuerySurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLSurface
int
int[])

public boolean eglSwapBuffers(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLSurface)

public boolean eglTerminate(
javax.microedition.khronos.egl.EGLDisplay)

public boolean eglWaitGL()

public boolean eglWaitNative(
int
java.lang.Object)

________________CLASS________________


public class android.opengl.GLDebugHelper extends java.lang.Object

----------------FIELDS----------------

public static final int CONFIG_CHECK_GL_ERROR

public static final int CONFIG_CHECK_THREAD

public static final int CONFIG_LOG_ARGUMENT_NAMES

public static final int ERROR_WRONG_THREAD
----------------METHODS----------------

public void <init>()

public static javax.microedition.khronos.egl.EGL wrap(
javax.microedition.khronos.egl.EGL
int
java.io.Writer)

public static javax.microedition.khronos.opengles.GL wrap(
javax.microedition.khronos.opengles.GL
int
java.io.Writer)

________________CLASS________________


public abstract interface class javax.microedition.khronos.opengles.GL extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________


public abstract interface class javax.microedition.khronos.opengles.GL10 extends java.lang.Object implements javax.microedition.khronos.opengles.GL

----------------FIELDS----------------

public static final int GL_ADD

public static final int GL_ALIASED_LINE_WIDTH_RANGE

public static final int GL_ALIASED_POINT_SIZE_RANGE

public static final int GL_ALPHA

public static final int GL_ALPHA_BITS

public static final int GL_ALPHA_TEST

public static final int GL_ALWAYS

public static final int GL_AMBIENT

public static final int GL_AMBIENT_AND_DIFFUSE

public static final int GL_AND

public static final int GL_AND_INVERTED

public static final int GL_AND_REVERSE

public static final int GL_BACK

public static final int GL_BLEND

public static final int GL_BLUE_BITS

public static final int GL_BYTE

public static final int GL_CCW

public static final int GL_CLAMP_TO_EDGE

public static final int GL_CLEAR

public static final int GL_COLOR_ARRAY

public static final int GL_COLOR_BUFFER_BIT

public static final int GL_COLOR_LOGIC_OP

public static final int GL_COLOR_MATERIAL

public static final int GL_COMPRESSED_TEXTURE_FORMATS

public static final int GL_CONSTANT_ATTENUATION

public static final int GL_COPY

public static final int GL_COPY_INVERTED

public static final int GL_CULL_FACE

public static final int GL_CW

public static final int GL_DECAL

public static final int GL_DECR

public static final int GL_DEPTH_BITS

public static final int GL_DEPTH_BUFFER_BIT

public static final int GL_DEPTH_TEST

public static final int GL_DIFFUSE

public static final int GL_DITHER

public static final int GL_DONT_CARE

public static final int GL_DST_ALPHA

public static final int GL_DST_COLOR

public static final int GL_EMISSION

public static final int GL_EQUAL

public static final int GL_EQUIV

public static final int GL_EXP

public static final int GL_EXP2

public static final int GL_EXTENSIONS

public static final int GL_FALSE

public static final int GL_FASTEST

public static final int GL_FIXED

public static final int GL_FLAT

public static final int GL_FLOAT

public static final int GL_FOG

public static final int GL_FOG_COLOR

public static final int GL_FOG_DENSITY

public static final int GL_FOG_END

public static final int GL_FOG_HINT

public static final int GL_FOG_MODE

public static final int GL_FOG_START

public static final int GL_FRONT

public static final int GL_FRONT_AND_BACK

public static final int GL_GEQUAL

public static final int GL_GREATER

public static final int GL_GREEN_BITS

public static final int GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES

public static final int GL_IMPLEMENTATION_COLOR_READ_TYPE_OES

public static final int GL_INCR

public static final int GL_INVALID_ENUM

public static final int GL_INVALID_OPERATION

public static final int GL_INVALID_VALUE

public static final int GL_INVERT

public static final int GL_KEEP

public static final int GL_LEQUAL

public static final int GL_LESS

public static final int GL_LIGHT0

public static final int GL_LIGHT1

public static final int GL_LIGHT2

public static final int GL_LIGHT3

public static final int GL_LIGHT4

public static final int GL_LIGHT5

public static final int GL_LIGHT6

public static final int GL_LIGHT7

public static final int GL_LIGHTING

public static final int GL_LIGHT_MODEL_AMBIENT

public static final int GL_LIGHT_MODEL_TWO_SIDE

public static final int GL_LINEAR

public static final int GL_LINEAR_ATTENUATION

public static final int GL_LINEAR_MIPMAP_LINEAR

public static final int GL_LINEAR_MIPMAP_NEAREST

public static final int GL_LINES

public static final int GL_LINE_LOOP

public static final int GL_LINE_SMOOTH

public static final int GL_LINE_SMOOTH_HINT

public static final int GL_LINE_STRIP

public static final int GL_LUMINANCE

public static final int GL_LUMINANCE_ALPHA

public static final int GL_MAX_ELEMENTS_INDICES

public static final int GL_MAX_ELEMENTS_VERTICES

public static final int GL_MAX_LIGHTS

public static final int GL_MAX_MODELVIEW_STACK_DEPTH

public static final int GL_MAX_PROJECTION_STACK_DEPTH

public static final int GL_MAX_TEXTURE_SIZE

public static final int GL_MAX_TEXTURE_STACK_DEPTH

public static final int GL_MAX_TEXTURE_UNITS

public static final int GL_MAX_VIEWPORT_DIMS

public static final int GL_MODELVIEW

public static final int GL_MODULATE

public static final int GL_MULTISAMPLE

public static final int GL_NAND

public static final int GL_NEAREST

public static final int GL_NEAREST_MIPMAP_LINEAR

public static final int GL_NEAREST_MIPMAP_NEAREST

public static final int GL_NEVER

public static final int GL_NICEST

public static final int GL_NOOP

public static final int GL_NOR

public static final int GL_NORMALIZE

public static final int GL_NORMAL_ARRAY

public static final int GL_NOTEQUAL

public static final int GL_NO_ERROR

public static final int GL_NUM_COMPRESSED_TEXTURE_FORMATS

public static final int GL_ONE

public static final int GL_ONE_MINUS_DST_ALPHA

public static final int GL_ONE_MINUS_DST_COLOR

public static final int GL_ONE_MINUS_SRC_ALPHA

public static final int GL_ONE_MINUS_SRC_COLOR

public static final int GL_OR

public static final int GL_OR_INVERTED

public static final int GL_OR_REVERSE

public static final int GL_OUT_OF_MEMORY

public static final int GL_PACK_ALIGNMENT

public static final int GL_PALETTE4_R5_G6_B5_OES

public static final int GL_PALETTE4_RGB5_A1_OES

public static final int GL_PALETTE4_RGB8_OES

public static final int GL_PALETTE4_RGBA4_OES

public static final int GL_PALETTE4_RGBA8_OES

public static final int GL_PALETTE8_R5_G6_B5_OES

public static final int GL_PALETTE8_RGB5_A1_OES

public static final int GL_PALETTE8_RGB8_OES

public static final int GL_PALETTE8_RGBA4_OES

public static final int GL_PALETTE8_RGBA8_OES

public static final int GL_PERSPECTIVE_CORRECTION_HINT

public static final int GL_POINTS

public static final int GL_POINT_FADE_THRESHOLD_SIZE

public static final int GL_POINT_SIZE

public static final int GL_POINT_SMOOTH

public static final int GL_POINT_SMOOTH_HINT

public static final int GL_POLYGON_OFFSET_FILL

public static final int GL_POLYGON_SMOOTH_HINT

public static final int GL_POSITION

public static final int GL_PROJECTION

public static final int GL_QUADRATIC_ATTENUATION

public static final int GL_RED_BITS

public static final int GL_RENDERER

public static final int GL_REPEAT

public static final int GL_REPLACE

public static final int GL_RESCALE_NORMAL

public static final int GL_RGB

public static final int GL_RGBA

public static final int GL_SAMPLE_ALPHA_TO_COVERAGE

public static final int GL_SAMPLE_ALPHA_TO_ONE

public static final int GL_SAMPLE_COVERAGE

public static final int GL_SCISSOR_TEST

public static final int GL_SET

public static final int GL_SHININESS

public static final int GL_SHORT

public static final int GL_SMOOTH

public static final int GL_SMOOTH_LINE_WIDTH_RANGE

public static final int GL_SMOOTH_POINT_SIZE_RANGE

public static final int GL_SPECULAR

public static final int GL_SPOT_CUTOFF

public static final int GL_SPOT_DIRECTION

public static final int GL_SPOT_EXPONENT

public static final int GL_SRC_ALPHA

public static final int GL_SRC_ALPHA_SATURATE

public static final int GL_SRC_COLOR

public static final int GL_STACK_OVERFLOW

public static final int GL_STACK_UNDERFLOW

public static final int GL_STENCIL_BITS

public static final int GL_STENCIL_BUFFER_BIT

public static final int GL_STENCIL_TEST

public static final int GL_SUBPIXEL_BITS

public static final int GL_TEXTURE

public static final int GL_TEXTURE0

public static final int GL_TEXTURE1

public static final int GL_TEXTURE10

public static final int GL_TEXTURE11

public static final int GL_TEXTURE12

public static final int GL_TEXTURE13

public static final int GL_TEXTURE14

public static final int GL_TEXTURE15

public static final int GL_TEXTURE16

public static final int GL_TEXTURE17

public static final int GL_TEXTURE18

public static final int GL_TEXTURE19

public static final int GL_TEXTURE2

public static final int GL_TEXTURE20

public static final int GL_TEXTURE21

public static final int GL_TEXTURE22

public static final int GL_TEXTURE23

public static final int GL_TEXTURE24

public static final int GL_TEXTURE25

public static final int GL_TEXTURE26

public static final int GL_TEXTURE27

public static final int GL_TEXTURE28

public static final int GL_TEXTURE29

public static final int GL_TEXTURE3

public static final int GL_TEXTURE30

public static final int GL_TEXTURE31

public static final int GL_TEXTURE4

public static final int GL_TEXTURE5

public static final int GL_TEXTURE6

public static final int GL_TEXTURE7

public static final int GL_TEXTURE8

public static final int GL_TEXTURE9

public static final int GL_TEXTURE_2D

public static final int GL_TEXTURE_COORD_ARRAY

public static final int GL_TEXTURE_ENV

public static final int GL_TEXTURE_ENV_COLOR

public static final int GL_TEXTURE_ENV_MODE

public static final int GL_TEXTURE_MAG_FILTER

public static final int GL_TEXTURE_MIN_FILTER

public static final int GL_TEXTURE_WRAP_S

public static final int GL_TEXTURE_WRAP_T

public static final int GL_TRIANGLES

public static final int GL_TRIANGLE_FAN

public static final int GL_TRIANGLE_STRIP

public static final int GL_TRUE

public static final int GL_UNPACK_ALIGNMENT

public static final int GL_UNSIGNED_BYTE

public static final int GL_UNSIGNED_SHORT

public static final int GL_UNSIGNED_SHORT_4_4_4_4

public static final int GL_UNSIGNED_SHORT_5_5_5_1

public static final int GL_UNSIGNED_SHORT_5_6_5

public static final int GL_VENDOR

public static final int GL_VERSION

public static final int GL_VERTEX_ARRAY

public static final int GL_XOR

public static final int GL_ZERO
----------------METHODS----------------

public abstract void glActiveTexture(
int)

public abstract void glAlphaFunc(
int
float)

public abstract void glAlphaFuncx(
int
int)

public abstract void glBindTexture(
int
int)

public abstract void glBlendFunc(
int
int)

public abstract void glClear(
int)

public abstract void glClearColor(
float
float
float
float)

public abstract void glClearColorx(
int
int
int
int)

public abstract void glClearDepthf(
float)

public abstract void glClearDepthx(
int)

public abstract void glClearStencil(
int)

public abstract void glClientActiveTexture(
int)

public abstract void glColor4f(
float
float
float
float)

public abstract void glColor4x(
int
int
int
int)

public abstract void glColorMask(
boolean
boolean
boolean
boolean)

public abstract void glColorPointer(
int
int
int
java.nio.Buffer)

public abstract void glCompressedTexImage2D(
int
int
int
int
int
int
int
java.nio.Buffer)

public abstract void glCompressedTexSubImage2D(
int
int
int
int
int
int
int
int
java.nio.Buffer)

public abstract void glCopyTexImage2D(
int
int
int
int
int
int
int
int)

public abstract void glCopyTexSubImage2D(
int
int
int
int
int
int
int
int)

public abstract void glCullFace(
int)

public abstract void glDeleteTextures(
int
java.nio.IntBuffer)

public abstract void glDeleteTextures(
int
int[]
int)

public abstract void glDepthFunc(
int)

public abstract void glDepthMask(
boolean)

public abstract void glDepthRangef(
float
float)

public abstract void glDepthRangex(
int
int)

public abstract void glDisable(
int)

public abstract void glDisableClientState(
int)

public abstract void glDrawArrays(
int
int
int)

public abstract void glDrawElements(
int
int
int
java.nio.Buffer)

public abstract void glEnable(
int)

public abstract void glEnableClientState(
int)

public abstract void glFinish()

public abstract void glFlush()

public abstract void glFogf(
int
float)

public abstract void glFogfv(
int
java.nio.FloatBuffer)

public abstract void glFogfv(
int
float[]
int)

public abstract void glFogx(
int
int)

public abstract void glFogxv(
int
java.nio.IntBuffer)

public abstract void glFogxv(
int
int[]
int)

public abstract void glFrontFace(
int)

public abstract void glFrustumf(
float
float
float
float
float
float)

public abstract void glFrustumx(
int
int
int
int
int
int)

public abstract void glGenTextures(
int
java.nio.IntBuffer)

public abstract void glGenTextures(
int
int[]
int)

public abstract int glGetError()

public abstract void glGetIntegerv(
int
java.nio.IntBuffer)

public abstract void glGetIntegerv(
int
int[]
int)

public abstract java.lang.String glGetString(
int)

public abstract void glHint(
int
int)

public abstract void glLightModelf(
int
float)

public abstract void glLightModelfv(
int
java.nio.FloatBuffer)

public abstract void glLightModelfv(
int
float[]
int)

public abstract void glLightModelx(
int
int)

public abstract void glLightModelxv(
int
java.nio.IntBuffer)

public abstract void glLightModelxv(
int
int[]
int)

public abstract void glLightf(
int
int
float)

public abstract void glLightfv(
int
int
java.nio.FloatBuffer)

public abstract void glLightfv(
int
int
float[]
int)

public abstract void glLightx(
int
int
int)

public abstract void glLightxv(
int
int
java.nio.IntBuffer)

public abstract void glLightxv(
int
int
int[]
int)

public abstract void glLineWidth(
float)

public abstract void glLineWidthx(
int)

public abstract void glLoadIdentity()

public abstract void glLoadMatrixf(
java.nio.FloatBuffer)

public abstract void glLoadMatrixf(
float[]
int)

public abstract void glLoadMatrixx(
java.nio.IntBuffer)

public abstract void glLoadMatrixx(
int[]
int)

public abstract void glLogicOp(
int)

public abstract void glMaterialf(
int
int
float)

public abstract void glMaterialfv(
int
int
java.nio.FloatBuffer)

public abstract void glMaterialfv(
int
int
float[]
int)

public abstract void glMaterialx(
int
int
int)

public abstract void glMaterialxv(
int
int
java.nio.IntBuffer)

public abstract void glMaterialxv(
int
int
int[]
int)

public abstract void glMatrixMode(
int)

public abstract void glMultMatrixf(
java.nio.FloatBuffer)

public abstract void glMultMatrixf(
float[]
int)

public abstract void glMultMatrixx(
java.nio.IntBuffer)

public abstract void glMultMatrixx(
int[]
int)

public abstract void glMultiTexCoord4f(
int
float
float
float
float)

public abstract void glMultiTexCoord4x(
int
int
int
int
int)

public abstract void glNormal3f(
float
float
float)

public abstract void glNormal3x(
int
int
int)

public abstract void glNormalPointer(
int
int
java.nio.Buffer)

public abstract void glOrthof(
float
float
float
float
float
float)

public abstract void glOrthox(
int
int
int
int
int
int)

public abstract void glPixelStorei(
int
int)

public abstract void glPointSize(
float)

public abstract void glPointSizex(
int)

public abstract void glPolygonOffset(
float
float)

public abstract void glPolygonOffsetx(
int
int)

public abstract void glPopMatrix()

public abstract void glPushMatrix()

public abstract void glReadPixels(
int
int
int
int
int
int
java.nio.Buffer)

public abstract void glRotatef(
float
float
float
float)

public abstract void glRotatex(
int
int
int
int)

public abstract void glSampleCoverage(
float
boolean)

public abstract void glSampleCoveragex(
int
boolean)

public abstract void glScalef(
float
float
float)

public abstract void glScalex(
int
int
int)

public abstract void glScissor(
int
int
int
int)

public abstract void glShadeModel(
int)

public abstract void glStencilFunc(
int
int
int)

public abstract void glStencilMask(
int)

public abstract void glStencilOp(
int
int
int)

public abstract void glTexCoordPointer(
int
int
int
java.nio.Buffer)

public abstract void glTexEnvf(
int
int
float)

public abstract void glTexEnvfv(
int
int
java.nio.FloatBuffer)

public abstract void glTexEnvfv(
int
int
float[]
int)

public abstract void glTexEnvx(
int
int
int)

public abstract void glTexEnvxv(
int
int
java.nio.IntBuffer)

public abstract void glTexEnvxv(
int
int
int[]
int)

public abstract void glTexImage2D(
int
int
int
int
int
int
int
int
java.nio.Buffer)

public abstract void glTexParameterf(
int
int
float)

public abstract void glTexParameterx(
int
int
int)

public abstract void glTexSubImage2D(
int
int
int
int
int
int
int
int
java.nio.Buffer)

public abstract void glTranslatef(
float
float
float)

public abstract void glTranslatex(
int
int
int)

public abstract void glVertexPointer(
int
int
int
java.nio.Buffer)

public abstract void glViewport(
int
int
int
int)

________________CLASS________________


public abstract interface class javax.microedition.khronos.opengles.GL10Ext extends java.lang.Object implements javax.microedition.khronos.opengles.GL

----------------FIELDS----------------
----------------METHODS----------------

public abstract int glQueryMatrixxOES(
java.nio.IntBuffer
java.nio.IntBuffer)

public abstract int glQueryMatrixxOES(
int[]
int
int[]
int)

________________CLASS________________


public abstract interface class javax.microedition.khronos.opengles.GL11 extends java.lang.Object implements javax.microedition.khronos.opengles.GL10

----------------FIELDS----------------

public static final int GL_ACTIVE_TEXTURE

public static final int GL_ADD_SIGNED

public static final int GL_ALPHA_SCALE

public static final int GL_ALPHA_TEST_FUNC

public static final int GL_ALPHA_TEST_REF

public static final int GL_ARRAY_BUFFER

public static final int GL_ARRAY_BUFFER_BINDING

public static final int GL_BLEND_DST

public static final int GL_BLEND_SRC

public static final int GL_BUFFER_ACCESS

public static final int GL_BUFFER_SIZE

public static final int GL_BUFFER_USAGE

public static final int GL_CLIENT_ACTIVE_TEXTURE

public static final int GL_CLIP_PLANE0

public static final int GL_CLIP_PLANE1

public static final int GL_CLIP_PLANE2

public static final int GL_CLIP_PLANE3

public static final int GL_CLIP_PLANE4

public static final int GL_CLIP_PLANE5

public static final int GL_COLOR_ARRAY_BUFFER_BINDING

public static final int GL_COLOR_ARRAY_POINTER

public static final int GL_COLOR_ARRAY_SIZE

public static final int GL_COLOR_ARRAY_STRIDE

public static final int GL_COLOR_ARRAY_TYPE

public static final int GL_COLOR_CLEAR_VALUE

public static final int GL_COLOR_WRITEMASK

public static final int GL_COMBINE

public static final int GL_COMBINE_ALPHA

public static final int GL_COMBINE_RGB

public static final int GL_CONSTANT

public static final int GL_COORD_REPLACE_OES

public static final int GL_CULL_FACE_MODE

public static final int GL_CURRENT_COLOR

public static final int GL_CURRENT_NORMAL

public static final int GL_CURRENT_TEXTURE_COORDS

public static final int GL_DEPTH_CLEAR_VALUE

public static final int GL_DEPTH_FUNC

public static final int GL_DEPTH_RANGE

public static final int GL_DEPTH_WRITEMASK

public static final int GL_DOT3_RGB

public static final int GL_DOT3_RGBA

public static final int GL_DYNAMIC_DRAW

public static final int GL_ELEMENT_ARRAY_BUFFER

public static final int GL_ELEMENT_ARRAY_BUFFER_BINDING

public static final int GL_FRONT_FACE

public static final int GL_GENERATE_MIPMAP

public static final int GL_GENERATE_MIPMAP_HINT

public static final int GL_INTERPOLATE

public static final int GL_LINE_WIDTH

public static final int GL_LOGIC_OP_MODE

public static final int GL_MATRIX_MODE

public static final int GL_MAX_CLIP_PLANES

public static final int GL_MODELVIEW_MATRIX

public static final int GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES

public static final int GL_MODELVIEW_STACK_DEPTH

public static final int GL_NORMAL_ARRAY_BUFFER_BINDING

public static final int GL_NORMAL_ARRAY_POINTER

public static final int GL_NORMAL_ARRAY_STRIDE

public static final int GL_NORMAL_ARRAY_TYPE

public static final int GL_OPERAND0_ALPHA

public static final int GL_OPERAND0_RGB

public static final int GL_OPERAND1_ALPHA

public static final int GL_OPERAND1_RGB

public static final int GL_OPERAND2_ALPHA

public static final int GL_OPERAND2_RGB

public static final int GL_POINT_DISTANCE_ATTENUATION

public static final int GL_POINT_FADE_THRESHOLD_SIZE

public static final int GL_POINT_SIZE

public static final int GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES

public static final int GL_POINT_SIZE_ARRAY_OES

public static final int GL_POINT_SIZE_ARRAY_POINTER_OES

public static final int GL_POINT_SIZE_ARRAY_STRIDE_OES

public static final int GL_POINT_SIZE_ARRAY_TYPE_OES

public static final int GL_POINT_SIZE_MAX

public static final int GL_POINT_SIZE_MIN

public static final int GL_POINT_SPRITE_OES

public static final int GL_POLYGON_OFFSET_FACTOR

public static final int GL_POLYGON_OFFSET_UNITS

public static final int GL_PREVIOUS

public static final int GL_PRIMARY_COLOR

public static final int GL_PROJECTION_MATRIX

public static final int GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES

public static final int GL_PROJECTION_STACK_DEPTH

public static final int GL_RGB_SCALE

public static final int GL_SAMPLES

public static final int GL_SAMPLE_BUFFERS

public static final int GL_SAMPLE_COVERAGE_INVERT

public static final int GL_SAMPLE_COVERAGE_VALUE

public static final int GL_SCISSOR_BOX

public static final int GL_SHADE_MODEL

public static final int GL_SRC0_ALPHA

public static final int GL_SRC0_RGB

public static final int GL_SRC1_ALPHA

public static final int GL_SRC1_RGB

public static final int GL_SRC2_ALPHA

public static final int GL_SRC2_RGB

public static final int GL_STATIC_DRAW

public static final int GL_STENCIL_CLEAR_VALUE

public static final int GL_STENCIL_FAIL

public static final int GL_STENCIL_FUNC

public static final int GL_STENCIL_PASS_DEPTH_FAIL

public static final int GL_STENCIL_PASS_DEPTH_PASS

public static final int GL_STENCIL_REF

public static final int GL_STENCIL_VALUE_MASK

public static final int GL_STENCIL_WRITEMASK

public static final int GL_SUBTRACT

public static final int GL_TEXTURE_BINDING_2D

public static final int GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING

public static final int GL_TEXTURE_COORD_ARRAY_POINTER

public static final int GL_TEXTURE_COORD_ARRAY_SIZE

public static final int GL_TEXTURE_COORD_ARRAY_STRIDE

public static final int GL_TEXTURE_COORD_ARRAY_TYPE

public static final int GL_TEXTURE_MATRIX

public static final int GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES

public static final int GL_TEXTURE_STACK_DEPTH

public static final int GL_VERTEX_ARRAY_BUFFER_BINDING

public static final int GL_VERTEX_ARRAY_POINTER

public static final int GL_VERTEX_ARRAY_SIZE

public static final int GL_VERTEX_ARRAY_STRIDE

public static final int GL_VERTEX_ARRAY_TYPE

public static final int GL_VIEWPORT

public static final int GL_WRITE_ONLY
----------------METHODS----------------

public abstract void glBindBuffer(
int
int)

public abstract void glBufferData(
int
int
java.nio.Buffer
int)

public abstract void glBufferSubData(
int
int
int
java.nio.Buffer)

public abstract void glClipPlanef(
int
java.nio.FloatBuffer)

public abstract void glClipPlanef(
int
float[]
int)

public abstract void glClipPlanex(
int
java.nio.IntBuffer)

public abstract void glClipPlanex(
int
int[]
int)

public abstract void glColor4ub(
byte
byte
byte
byte)

public abstract void glColorPointer(
int
int
int
int)

public abstract void glDeleteBuffers(
int
java.nio.IntBuffer)

public abstract void glDeleteBuffers(
int
int[]
int)

public abstract void glDrawElements(
int
int
int
int)

public abstract void glGenBuffers(
int
java.nio.IntBuffer)

public abstract void glGenBuffers(
int
int[]
int)

public abstract void glGetBooleanv(
int
java.nio.IntBuffer)

public abstract void glGetBooleanv(
int
boolean[]
int)

public abstract void glGetBufferParameteriv(
int
int
java.nio.IntBuffer)

public abstract void glGetBufferParameteriv(
int
int
int[]
int)

public abstract void glGetClipPlanef(
int
java.nio.FloatBuffer)

public abstract void glGetClipPlanef(
int
float[]
int)

public abstract void glGetClipPlanex(
int
java.nio.IntBuffer)

public abstract void glGetClipPlanex(
int
int[]
int)

public abstract void glGetFixedv(
int
java.nio.IntBuffer)

public abstract void glGetFixedv(
int
int[]
int)

public abstract void glGetFloatv(
int
java.nio.FloatBuffer)

public abstract void glGetFloatv(
int
float[]
int)

public abstract void glGetLightfv(
int
int
java.nio.FloatBuffer)

public abstract void glGetLightfv(
int
int
float[]
int)

public abstract void glGetLightxv(
int
int
java.nio.IntBuffer)

public abstract void glGetLightxv(
int
int
int[]
int)

public abstract void glGetMaterialfv(
int
int
java.nio.FloatBuffer)

public abstract void glGetMaterialfv(
int
int
float[]
int)

public abstract void glGetMaterialxv(
int
int
java.nio.IntBuffer)

public abstract void glGetMaterialxv(
int
int
int[]
int)

public abstract void glGetPointerv(
int
java.nio.Buffer[])

public abstract void glGetTexEnviv(
int
int
java.nio.IntBuffer)

public abstract void glGetTexEnviv(
int
int
int[]
int)

public abstract void glGetTexEnvxv(
int
int
java.nio.IntBuffer)

public abstract void glGetTexEnvxv(
int
int
int[]
int)

public abstract void glGetTexParameterfv(
int
int
java.nio.FloatBuffer)

public abstract void glGetTexParameterfv(
int
int
float[]
int)

public abstract void glGetTexParameteriv(
int
int
java.nio.IntBuffer)

public abstract void glGetTexParameteriv(
int
int
int[]
int)

public abstract void glGetTexParameterxv(
int
int
java.nio.IntBuffer)

public abstract void glGetTexParameterxv(
int
int
int[]
int)

public abstract boolean glIsBuffer(
int)

public abstract boolean glIsEnabled(
int)

public abstract boolean glIsTexture(
int)

public abstract void glNormalPointer(
int
int
int)

public abstract void glPointParameterf(
int
float)

public abstract void glPointParameterfv(
int
java.nio.FloatBuffer)

public abstract void glPointParameterfv(
int
float[]
int)

public abstract void glPointParameterx(
int
int)

public abstract void glPointParameterxv(
int
java.nio.IntBuffer)

public abstract void glPointParameterxv(
int
int[]
int)

public abstract void glPointSizePointerOES(
int
int
java.nio.Buffer)

public abstract void glTexCoordPointer(
int
int
int
int)

public abstract void glTexEnvi(
int
int
int)

public abstract void glTexEnviv(
int
int
java.nio.IntBuffer)

public abstract void glTexEnviv(
int
int
int[]
int)

public abstract void glTexParameterfv(
int
int
java.nio.FloatBuffer)

public abstract void glTexParameterfv(
int
int
float[]
int)

public abstract void glTexParameteri(
int
int
int)

public abstract void glTexParameteriv(
int
int
java.nio.IntBuffer)

public abstract void glTexParameteriv(
int
int
int[]
int)

public abstract void glTexParameterxv(
int
int
java.nio.IntBuffer)

public abstract void glTexParameterxv(
int
int
int[]
int)

public abstract void glVertexPointer(
int
int
int
int)

________________CLASS________________


public abstract interface class javax.microedition.khronos.opengles.GL11Ext extends java.lang.Object implements javax.microedition.khronos.opengles.GL

----------------FIELDS----------------

public static final int GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES

public static final int GL_MATRIX_INDEX_ARRAY_OES

public static final int GL_MATRIX_INDEX_ARRAY_POINTER_OES

public static final int GL_MATRIX_INDEX_ARRAY_SIZE_OES

public static final int GL_MATRIX_INDEX_ARRAY_STRIDE_OES

public static final int GL_MATRIX_INDEX_ARRAY_TYPE_OES

public static final int GL_MATRIX_PALETTE_OES

public static final int GL_MAX_PALETTE_MATRICES_OES

public static final int GL_MAX_VERTEX_UNITS_OES

public static final int GL_TEXTURE_CROP_RECT_OES

public static final int GL_WEIGHT_ARRAY_BUFFER_BINDING_OES

public static final int GL_WEIGHT_ARRAY_OES

public static final int GL_WEIGHT_ARRAY_POINTER_OES

public static final int GL_WEIGHT_ARRAY_SIZE_OES

public static final int GL_WEIGHT_ARRAY_STRIDE_OES

public static final int GL_WEIGHT_ARRAY_TYPE_OES
----------------METHODS----------------

public abstract void glCurrentPaletteMatrixOES(
int)

public abstract void glDrawTexfOES(
float
float
float
float
float)

public abstract void glDrawTexfvOES(
java.nio.FloatBuffer)

public abstract void glDrawTexfvOES(
float[]
int)

public abstract void glDrawTexiOES(
int
int
int
int
int)

public abstract void glDrawTexivOES(
java.nio.IntBuffer)

public abstract void glDrawTexivOES(
int[]
int)

public abstract void glDrawTexsOES(
short
short
short
short
short)

public abstract void glDrawTexsvOES(
java.nio.ShortBuffer)

public abstract void glDrawTexsvOES(
short[]
int)

public abstract void glDrawTexxOES(
int
int
int
int
int)

public abstract void glDrawTexxvOES(
java.nio.IntBuffer)

public abstract void glDrawTexxvOES(
int[]
int)

public abstract void glEnable(
int)

public abstract void glEnableClientState(
int)

public abstract void glLoadPaletteFromModelViewMatrixOES()

public abstract void glMatrixIndexPointerOES(
int
int
int
int)

public abstract void glMatrixIndexPointerOES(
int
int
int
java.nio.Buffer)

public abstract void glTexParameterfv(
int
int
float[]
int)

public abstract void glWeightPointerOES(
int
int
int
int)

public abstract void glWeightPointerOES(
int
int
int
java.nio.Buffer)

________________CLASS________________


abstract class android.opengl.GLWrapperBase extends java.lang.Object implements javax.microedition.khronos.opengles.GL, javax.microedition.khronos.opengles.GL10, javax.microedition.khronos.opengles.GL10Ext, javax.microedition.khronos.opengles.GL11, javax.microedition.khronos.opengles.GL11Ext

----------------FIELDS----------------

protected javax.microedition.khronos.opengles.GL10 mgl

protected javax.microedition.khronos.opengles.GL10Ext mgl10Ext

protected javax.microedition.khronos.opengles.GL11 mgl11

protected javax.microedition.khronos.opengles.GL11Ext mgl11Ext

protected javax.microedition.khronos.opengles.GL11ExtensionPack mgl11ExtensionPack
----------------METHODS----------------

public void <init>(
javax.microedition.khronos.opengles.GL)

public void glBindBuffer(
int
int)

public void glBindFramebufferOES(
int
int)

public void glBindRenderbufferOES(
int
int)

public void glBlendEquation(
int)

public void glBlendEquationSeparate(
int
int)

public void glBlendFuncSeparate(
int
int
int
int)

public void glBufferData(
int
int
java.nio.Buffer
int)

public void glBufferSubData(
int
int
int
java.nio.Buffer)

 int glCheckFramebufferStatusOES(
int)

public void glColor4ub(
byte
byte
byte
byte)

public void glColorPointer(
int
int
int
int)

public void glCompressedTexImage2D(
int
int
int
int
int
int
int)

public void glCurrentPaletteMatrixOES(
int)

public void glDeleteBuffers(
int
java.nio.IntBuffer)

public void glDeleteBuffers(
int
int[]
int)

public void glDeleteFramebuffersOES(
int
java.nio.IntBuffer)

public void glDeleteFramebuffersOES(
int
int[]
int)

public void glDeleteRenderbuffersOES(
int
java.nio.IntBuffer)

public void glDeleteRenderbuffersOES(
int
int[]
int)

public void glDrawElements(
int
int
int
int)

public void glFramebufferRenderbufferOES(
int
int
int
int)

public void glFramebufferTexture2DOES(
int
int
int
int
int)

public void glGenBuffers(
int
java.nio.IntBuffer)

public void glGenBuffers(
int
int[]
int)

public void glGenFramebuffersOES(
int
java.nio.IntBuffer)

public void glGenFramebuffersOES(
int
int[]
int)

public void glGenRenderbuffersOES(
int
java.nio.IntBuffer)

public void glGenRenderbuffersOES(
int
int[]
int)

public void glGenerateMipmapOES(
int)

public void glGetBooleanv(
int
java.nio.IntBuffer)

public void glGetBooleanv(
int
boolean[]
int)

public void glGetBufferParameteriv(
int
int
java.nio.IntBuffer)

public void glGetBufferParameteriv(
int
int
int[]
int)

public void glGetClipPlanef(
int
java.nio.FloatBuffer)

public void glGetClipPlanef(
int
float[]
int)

public void glGetClipPlanex(
int
java.nio.IntBuffer)

public void glGetClipPlanex(
int
int[]
int)

public void glGetFixedv(
int
java.nio.IntBuffer)

public void glGetFixedv(
int
int[]
int)

public void glGetFloatv(
int
java.nio.FloatBuffer)

public void glGetFloatv(
int
float[]
int)

public void glGetFramebufferAttachmentParameterivOES(
int
int
int
java.nio.IntBuffer)

public void glGetFramebufferAttachmentParameterivOES(
int
int
int
int[]
int)

public void glGetLightfv(
int
int
java.nio.FloatBuffer)

public void glGetLightfv(
int
int
float[]
int)

public void glGetLightxv(
int
int
java.nio.IntBuffer)

public void glGetLightxv(
int
int
int[]
int)

public void glGetMaterialfv(
int
int
java.nio.FloatBuffer)

public void glGetMaterialfv(
int
int
float[]
int)

public void glGetMaterialxv(
int
int
java.nio.IntBuffer)

public void glGetMaterialxv(
int
int
int[]
int)

public void glGetPointerv(
int
java.nio.Buffer[])

public void glGetRenderbufferParameterivOES(
int
int
java.nio.IntBuffer)

public void glGetRenderbufferParameterivOES(
int
int
int[]
int)

public void glGetTexEnviv(
int
int
java.nio.IntBuffer)

public void glGetTexEnviv(
int
int
int[]
int)

public void glGetTexEnvxv(
int
int
java.nio.IntBuffer)

public void glGetTexEnvxv(
int
int
int[]
int)

public void glGetTexGenfv(
int
int
java.nio.FloatBuffer)

public void glGetTexGenfv(
int
int
float[]
int)

public void glGetTexGeniv(
int
int
java.nio.IntBuffer)

public void glGetTexGeniv(
int
int
int[]
int)

public void glGetTexGenxv(
int
int
java.nio.IntBuffer)

public void glGetTexGenxv(
int
int
int[]
int)

public void glGetTexParameterfv(
int
int
java.nio.FloatBuffer)

public void glGetTexParameterfv(
int
int
float[]
int)

public void glGetTexParameteriv(
int
int
java.nio.IntBuffer)

public void glGetTexParameteriv(
int
int
int[]
int)

public void glGetTexParameterxv(
int
int
java.nio.IntBuffer)

public void glGetTexParameterxv(
int
int
int[]
int)

public boolean glIsBuffer(
int)

public boolean glIsEnabled(
int)

public boolean glIsFramebufferOES(
int)

public boolean glIsRenderbufferOES(
int)

public boolean glIsTexture(
int)

public void glLoadPaletteFromModelViewMatrixOES()

public void glMatrixIndexPointerOES(
int
int
int
int)

public void glMatrixIndexPointerOES(
int
int
int
java.nio.Buffer)

public void glNormalPointer(
int
int
int)

public void glPointParameterf(
int
float)

public void glPointParameterfv(
int
java.nio.FloatBuffer)

public void glPointParameterfv(
int
float[]
int)

public void glPointParameterx(
int
int)

public void glPointParameterxv(
int
java.nio.IntBuffer)

public void glPointParameterxv(
int
int[]
int)

public void glPointSizePointerOES(
int
int
java.nio.Buffer)

public void glRenderbufferStorageOES(
int
int
int
int)

public void glTexCoordPointer(
int
int
int
int)

public void glTexEnvi(
int
int
int)

public void glTexEnviv(
int
int
java.nio.IntBuffer)

public void glTexEnviv(
int
int
int[]
int)

public void glTexGenf(
int
int
float)

public void glTexGenfv(
int
int
java.nio.FloatBuffer)

public void glTexGenfv(
int
int
float[]
int)

public void glTexGeni(
int
int
int)

public void glTexGeniv(
int
int
java.nio.IntBuffer)

public void glTexGeniv(
int
int
int[]
int)

public void glTexGenx(
int
int
int)

public void glTexGenxv(
int
int
java.nio.IntBuffer)

public void glTexGenxv(
int
int
int[]
int)

public void glTexParameterfv(
int
int
java.nio.FloatBuffer)

public void glTexParameterfv(
int
int
float[]
int)

public void glTexParameteri(
int
int
int)

public void glTexParameterxv(
int
int
java.nio.IntBuffer)

public void glTexParameterxv(
int
int
int[]
int)

public void glVertexPointer(
int
int
int
int)

public void glWeightPointerOES(
int
int
int
int)

public void glWeightPointerOES(
int
int
int
java.nio.Buffer)

________________CLASS________________


 class android.opengl.GLErrorWrapper extends android.opengl.GLWrapperBase

----------------FIELDS----------------

 boolean mCheckError

 boolean mCheckThread

 java.lang.Thread mOurThread
----------------METHODS----------------

public void <init>(
javax.microedition.khronos.opengles.GL
int)

private void checkError()

private void checkThread()

public void glActiveTexture(
int)

public void glAlphaFunc(
int
float)

public void glAlphaFuncx(
int
int)

public void glBindTexture(
int
int)

public void glBlendFunc(
int
int)

public void glClear(
int)

public void glClearColor(
float
float
float
float)

public void glClearColorx(
int
int
int
int)

public void glClearDepthf(
float)

public void glClearDepthx(
int)

public void glClearStencil(
int)

public void glClientActiveTexture(
int)

public void glClipPlanef(
int
java.nio.FloatBuffer)

public void glClipPlanef(
int
float[]
int)

public void glClipPlanex(
int
java.nio.IntBuffer)

public void glClipPlanex(
int
int[]
int)

public void glColor4f(
float
float
float
float)

public void glColor4x(
int
int
int
int)

public void glColorMask(
boolean
boolean
boolean
boolean)

public void glColorPointer(
int
int
int
java.nio.Buffer)

public void glCompressedTexImage2D(
int
int
int
int
int
int
int
java.nio.Buffer)

public void glCompressedTexSubImage2D(
int
int
int
int
int
int
int
int
java.nio.Buffer)

public void glCopyTexImage2D(
int
int
int
int
int
int
int
int)

public void glCopyTexSubImage2D(
int
int
int
int
int
int
int
int)

public void glCullFace(
int)

public void glDeleteTextures(
int
java.nio.IntBuffer)

public void glDeleteTextures(
int
int[]
int)

public void glDepthFunc(
int)

public void glDepthMask(
boolean)

public void glDepthRangef(
float
float)

public void glDepthRangex(
int
int)

public void glDisable(
int)

public void glDisableClientState(
int)

public void glDrawArrays(
int
int
int)

public void glDrawElements(
int
int
int
java.nio.Buffer)

public void glDrawTexfOES(
float
float
float
float
float)

public void glDrawTexfvOES(
java.nio.FloatBuffer)

public void glDrawTexfvOES(
float[]
int)

public void glDrawTexiOES(
int
int
int
int
int)

public void glDrawTexivOES(
java.nio.IntBuffer)

public void glDrawTexivOES(
int[]
int)

public void glDrawTexsOES(
short
short
short
short
short)

public void glDrawTexsvOES(
java.nio.ShortBuffer)

public void glDrawTexsvOES(
short[]
int)

public void glDrawTexxOES(
int
int
int
int
int)

public void glDrawTexxvOES(
java.nio.IntBuffer)

public void glDrawTexxvOES(
int[]
int)

public void glEnable(
int)

public void glEnableClientState(
int)

public void glFinish()

public void glFlush()

public void glFogf(
int
float)

public void glFogfv(
int
java.nio.FloatBuffer)

public void glFogfv(
int
float[]
int)

public void glFogx(
int
int)

public void glFogxv(
int
java.nio.IntBuffer)

public void glFogxv(
int
int[]
int)

public void glFrontFace(
int)

public void glFrustumf(
float
float
float
float
float
float)

public void glFrustumx(
int
int
int
int
int
int)

public void glGenTextures(
int
java.nio.IntBuffer)

public void glGenTextures(
int
int[]
int)

public int glGetError()

public void glGetIntegerv(
int
java.nio.IntBuffer)

public void glGetIntegerv(
int
int[]
int)

public java.lang.String glGetString(
int)

public void glHint(
int
int)

public void glLightModelf(
int
float)

public void glLightModelfv(
int
java.nio.FloatBuffer)

public void glLightModelfv(
int
float[]
int)

public void glLightModelx(
int
int)

public void glLightModelxv(
int
java.nio.IntBuffer)

public void glLightModelxv(
int
int[]
int)

public void glLightf(
int
int
float)

public void glLightfv(
int
int
java.nio.FloatBuffer)

public void glLightfv(
int
int
float[]
int)

public void glLightx(
int
int
int)

public void glLightxv(
int
int
java.nio.IntBuffer)

public void glLightxv(
int
int
int[]
int)

public void glLineWidth(
float)

public void glLineWidthx(
int)

public void glLoadIdentity()

public void glLoadMatrixf(
java.nio.FloatBuffer)

public void glLoadMatrixf(
float[]
int)

public void glLoadMatrixx(
java.nio.IntBuffer)

public void glLoadMatrixx(
int[]
int)

public void glLogicOp(
int)

public void glMaterialf(
int
int
float)

public void glMaterialfv(
int
int
java.nio.FloatBuffer)

public void glMaterialfv(
int
int
float[]
int)

public void glMaterialx(
int
int
int)

public void glMaterialxv(
int
int
java.nio.IntBuffer)

public void glMaterialxv(
int
int
int[]
int)

public void glMatrixMode(
int)

public void glMultMatrixf(
java.nio.FloatBuffer)

public void glMultMatrixf(
float[]
int)

public void glMultMatrixx(
java.nio.IntBuffer)

public void glMultMatrixx(
int[]
int)

public void glMultiTexCoord4f(
int
float
float
float
float)

public void glMultiTexCoord4x(
int
int
int
int
int)

public void glNormal3f(
float
float
float)

public void glNormal3x(
int
int
int)

public void glNormalPointer(
int
int
java.nio.Buffer)

public void glOrthof(
float
float
float
float
float
float)

public void glOrthox(
int
int
int
int
int
int)

public void glPixelStorei(
int
int)

public void glPointSize(
float)

public void glPointSizex(
int)

public void glPolygonOffset(
float
float)

public void glPolygonOffsetx(
int
int)

public void glPopMatrix()

public void glPushMatrix()

public int glQueryMatrixxOES(
java.nio.IntBuffer
java.nio.IntBuffer)

public int glQueryMatrixxOES(
int[]
int
int[]
int)

public void glReadPixels(
int
int
int
int
int
int
java.nio.Buffer)

public void glRotatef(
float
float
float
float)

public void glRotatex(
int
int
int
int)

public void glSampleCoverage(
float
boolean)

public void glSampleCoveragex(
int
boolean)

public void glScalef(
float
float
float)

public void glScalex(
int
int
int)

public void glScissor(
int
int
int
int)

public void glShadeModel(
int)

public void glStencilFunc(
int
int
int)

public void glStencilMask(
int)

public void glStencilOp(
int
int
int)

public void glTexCoordPointer(
int
int
int
java.nio.Buffer)

public void glTexEnvf(
int
int
float)

public void glTexEnvfv(
int
int
java.nio.FloatBuffer)

public void glTexEnvfv(
int
int
float[]
int)

public void glTexEnvx(
int
int
int)

public void glTexEnvxv(
int
int
java.nio.IntBuffer)

public void glTexEnvxv(
int
int
int[]
int)

public void glTexImage2D(
int
int
int
int
int
int
int
int
java.nio.Buffer)

public void glTexParameterf(
int
int
float)

public void glTexParameteriv(
int
int
java.nio.IntBuffer)

public void glTexParameteriv(
int
int
int[]
int)

public void glTexParameterx(
int
int
int)

public void glTexSubImage2D(
int
int
int
int
int
int
int
int
java.nio.Buffer)

public void glTranslatef(
float
float
float)

public void glTranslatex(
int
int
int)

public void glVertexPointer(
int
int
int
java.nio.Buffer)

public void glViewport(
int
int
int
int)

________________CLASS________________


public class android.opengl.GLException extends java.lang.RuntimeException

----------------FIELDS----------------

private final int mError
----------------METHODS----------------

public void <init>(
int)

public void <init>(
int
java.lang.String)

private static java.lang.String getErrorString(
int)

 int getError()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =PointerInfo )
@dalvik.annotation.EnclosingClass (value =Landroid/opengl/GLLogWrapper; )
 class android.opengl.GLLogWrapper$PointerInfo extends java.lang.Object

----------------FIELDS----------------

public java.nio.Buffer mPointer

public int mSize

public int mStride

public java.nio.ByteBuffer mTempByteBuffer

public int mType

final android.opengl.GLLogWrapper this$0
----------------METHODS----------------

public void <init>(
android.opengl.GLLogWrapper
int
int
int
java.nio.Buffer)

public void bindByteBuffer()

public int getStride()

public int sizeof(
int)

public void unbindByteBuffer()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/opengl/GLLogWrapper$PointerInfo; )
 class android.opengl.GLLogWrapper extends android.opengl.GLWrapperBase

----------------FIELDS----------------

private static final int FORMAT_FIXED

private static final int FORMAT_FLOAT

private static final int FORMAT_INT

private int mArgCount

 boolean mColorArrayEnabled

private android.opengl.GLLogWrapper$PointerInfo mColorPointer

private java.io.Writer mLog

private boolean mLogArgumentNames

 boolean mNormalArrayEnabled

private android.opengl.GLLogWrapper$PointerInfo mNormalPointer

 java.lang.StringBuilder mStringBuilder

private android.opengl.GLLogWrapper$PointerInfo mTexCoordPointer

 boolean mTextureCoordArrayEnabled

 boolean mVertexArrayEnabled

private android.opengl.GLLogWrapper$PointerInfo mVertexPointer
----------------METHODS----------------

public void <init>(
javax.microedition.khronos.opengles.GL
java.io.Writer
boolean)

static java.nio.ByteBuffer access$000(
android.opengl.GLLogWrapper
int
java.nio.Buffer)

private void arg(
java.lang.String
float)

private void arg(
java.lang.String
int)

private void arg(
java.lang.String
int
java.nio.FloatBuffer)

private void arg(
java.lang.String
int
java.nio.IntBuffer)

private void arg(
java.lang.String
int
java.nio.ShortBuffer)

private void arg(
java.lang.String
int
float[]
int)

private void arg(
java.lang.String
int
int[]
int)

private void arg(
java.lang.String
int
short[]
int)

private void arg(
java.lang.String
java.lang.String)

private void arg(
java.lang.String
boolean)

private void argPointer(
int
int
int
java.nio.Buffer)

private void begin(
java.lang.String)

private void bindArrays()

private void checkError()

private void doArrayElement(
java.lang.StringBuilder
boolean
java.lang.String
android.opengl.GLLogWrapper$PointerInfo
int)

private void doElement(
java.lang.StringBuilder
int
int)

private void end()

private void endLogIndices()

private void flush()

private void formattedAppend(
java.lang.StringBuilder
int
int)

private java.lang.String getBeginMode(
int)

private java.lang.String getCap(
int)

private java.lang.String getClearBufferMask(
int)

private java.lang.String getClientState(
int)

public static java.lang.String getErrorString(
int)

private java.lang.String getFaceName(
int)

private java.lang.String getFactor(
int)

private java.lang.String getFogPName(
int)

private int getFogParamCount(
int)

private static java.lang.String getHex(
int)

private java.lang.String getHintMode(
int)

private java.lang.String getHintTarget(
int)

private java.lang.String getIndexType(
int)

private int getIntegerStateFormat(
int)

private java.lang.String getIntegerStateName(
int)

private int getIntegerStateSize(
int)

private java.lang.String getLightModelPName(
int)

private int getLightModelParamCount(
int)

private java.lang.String getLightName(
int)

private java.lang.String getLightPName(
int)

private int getLightParamCount(
int)

private java.lang.String getMaterialPName(
int)

private int getMaterialParamCount(
int)

private java.lang.String getMatrixMode(
int)

private java.lang.String getPointerTypeName(
int)

private java.lang.String getShadeModel(
int)

private java.lang.String getTextureEnvPName(
int)

private int getTextureEnvParamCount(
int)

private java.lang.String getTextureEnvParamName(
float)

private java.lang.String getTextureEnvTarget(
int)

private java.lang.String getTexturePName(
int)

private java.lang.String getTextureParamName(
float)

private java.lang.String getTextureTarget(
int)

private void log(
java.lang.String)

private void logLine(
java.lang.String)

private void returns(
int)

private void returns(
java.lang.String)

private void startLogIndices()

private java.nio.ByteBuffer toByteBuffer(
int
java.nio.Buffer)

private char[] toCharIndices(
int
int
java.nio.Buffer)

private java.lang.String toString(
int
int
java.nio.IntBuffer)

private java.lang.String toString(
int
int
int[]
int)

private java.lang.String toString(
int
java.nio.FloatBuffer)

private java.lang.String toString(
int
java.nio.ShortBuffer)

private java.lang.String toString(
int
float[]
int)

private java.lang.String toString(
int
short[]
int)

private void unbindArrays()

public void glActiveTexture(
int)

public void glAlphaFunc(
int
float)

public void glAlphaFuncx(
int
int)

public void glBindBuffer(
int
int)

public void glBindTexture(
int
int)

public void glBlendFunc(
int
int)

public void glBufferData(
int
int
java.nio.Buffer
int)

public void glBufferSubData(
int
int
int
java.nio.Buffer)

public void glClear(
int)

public void glClearColor(
float
float
float
float)

public void glClearColorx(
int
int
int
int)

public void glClearDepthf(
float)

public void glClearDepthx(
int)

public void glClearStencil(
int)

public void glClientActiveTexture(
int)

public void glClipPlanef(
int
java.nio.FloatBuffer)

public void glClipPlanef(
int
float[]
int)

public void glClipPlanex(
int
java.nio.IntBuffer)

public void glClipPlanex(
int
int[]
int)

public void glColor4f(
float
float
float
float)

public void glColor4ub(
byte
byte
byte
byte)

public void glColor4x(
int
int
int
int)

public void glColorMask(
boolean
boolean
boolean
boolean)

public void glColorPointer(
int
int
int
java.nio.Buffer)

public void glCompressedTexImage2D(
int
int
int
int
int
int
int
java.nio.Buffer)

public void glCompressedTexSubImage2D(
int
int
int
int
int
int
int
int
java.nio.Buffer)

public void glCopyTexImage2D(
int
int
int
int
int
int
int
int)

public void glCopyTexSubImage2D(
int
int
int
int
int
int
int
int)

public void glCullFace(
int)

public void glDeleteBuffers(
int
java.nio.IntBuffer)

public void glDeleteBuffers(
int
int[]
int)

public void glDeleteTextures(
int
java.nio.IntBuffer)

public void glDeleteTextures(
int
int[]
int)

public void glDepthFunc(
int)

public void glDepthMask(
boolean)

public void glDepthRangef(
float
float)

public void glDepthRangex(
int
int)

public void glDisable(
int)

public void glDisableClientState(
int)

public void glDrawArrays(
int
int
int)

public void glDrawElements(
int
int
int
java.nio.Buffer)

public void glDrawTexfOES(
float
float
float
float
float)

public void glDrawTexfvOES(
java.nio.FloatBuffer)

public void glDrawTexfvOES(
float[]
int)

public void glDrawTexiOES(
int
int
int
int
int)

public void glDrawTexivOES(
java.nio.IntBuffer)

public void glDrawTexivOES(
int[]
int)

public void glDrawTexsOES(
short
short
short
short
short)

public void glDrawTexsvOES(
java.nio.ShortBuffer)

public void glDrawTexsvOES(
short[]
int)

public void glDrawTexxOES(
int
int
int
int
int)

public void glDrawTexxvOES(
java.nio.IntBuffer)

public void glDrawTexxvOES(
int[]
int)

public void glEnable(
int)

public void glEnableClientState(
int)

public void glFinish()

public void glFlush()

public void glFogf(
int
float)

public void glFogfv(
int
java.nio.FloatBuffer)

public void glFogfv(
int
float[]
int)

public void glFogx(
int
int)

public void glFogxv(
int
java.nio.IntBuffer)

public void glFogxv(
int
int[]
int)

public void glFrontFace(
int)

public void glFrustumf(
float
float
float
float
float
float)

public void glFrustumx(
int
int
int
int
int
int)

public void glGenBuffers(
int
java.nio.IntBuffer)

public void glGenBuffers(
int
int[]
int)

public void glGenTextures(
int
java.nio.IntBuffer)

public void glGenTextures(
int
int[]
int)

public void glGetBooleanv(
int
java.nio.IntBuffer)

public void glGetBooleanv(
int
boolean[]
int)

public void glGetBufferParameteriv(
int
int
java.nio.IntBuffer)

public void glGetBufferParameteriv(
int
int
int[]
int)

public void glGetClipPlanef(
int
java.nio.FloatBuffer)

public void glGetClipPlanef(
int
float[]
int)

public void glGetClipPlanex(
int
java.nio.IntBuffer)

public void glGetClipPlanex(
int
int[]
int)

public int glGetError()

public void glGetFixedv(
int
java.nio.IntBuffer)

public void glGetFixedv(
int
int[]
int)

public void glGetFloatv(
int
java.nio.FloatBuffer)

public void glGetFloatv(
int
float[]
int)

public void glGetIntegerv(
int
java.nio.IntBuffer)

public void glGetIntegerv(
int
int[]
int)

public void glGetLightfv(
int
int
java.nio.FloatBuffer)

public void glGetLightfv(
int
int
float[]
int)

public void glGetLightxv(
int
int
java.nio.IntBuffer)

public void glGetLightxv(
int
int
int[]
int)

public void glGetMaterialfv(
int
int
java.nio.FloatBuffer)

public void glGetMaterialfv(
int
int
float[]
int)

public void glGetMaterialxv(
int
int
java.nio.IntBuffer)

public void glGetMaterialxv(
int
int
int[]
int)

public java.lang.String glGetString(
int)

public void glGetTexEnviv(
int
int
java.nio.IntBuffer)

public void glGetTexEnviv(
int
int
int[]
int)

public void glGetTexEnvxv(
int
int
java.nio.IntBuffer)

public void glGetTexEnvxv(
int
int
int[]
int)

public void glGetTexParameterfv(
int
int
java.nio.FloatBuffer)

public void glGetTexParameterfv(
int
int
float[]
int)

public void glGetTexParameteriv(
int
int
java.nio.IntBuffer)

public void glGetTexParameteriv(
int
int
int[]
int)

public void glGetTexParameterxv(
int
int
java.nio.IntBuffer)

public void glGetTexParameterxv(
int
int
int[]
int)

public void glHint(
int
int)

public boolean glIsBuffer(
int)

public boolean glIsEnabled(
int)

public boolean glIsTexture(
int)

public void glLightModelf(
int
float)

public void glLightModelfv(
int
java.nio.FloatBuffer)

public void glLightModelfv(
int
float[]
int)

public void glLightModelx(
int
int)

public void glLightModelxv(
int
java.nio.IntBuffer)

public void glLightModelxv(
int
int[]
int)

public void glLightf(
int
int
float)

public void glLightfv(
int
int
java.nio.FloatBuffer)

public void glLightfv(
int
int
float[]
int)

public void glLightx(
int
int
int)

public void glLightxv(
int
int
java.nio.IntBuffer)

public void glLightxv(
int
int
int[]
int)

public void glLineWidth(
float)

public void glLineWidthx(
int)

public void glLoadIdentity()

public void glLoadMatrixf(
java.nio.FloatBuffer)

public void glLoadMatrixf(
float[]
int)

public void glLoadMatrixx(
java.nio.IntBuffer)

public void glLoadMatrixx(
int[]
int)

public void glLogicOp(
int)

public void glMaterialf(
int
int
float)

public void glMaterialfv(
int
int
java.nio.FloatBuffer)

public void glMaterialfv(
int
int
float[]
int)

public void glMaterialx(
int
int
int)

public void glMaterialxv(
int
int
java.nio.IntBuffer)

public void glMaterialxv(
int
int
int[]
int)

public void glMatrixMode(
int)

public void glMultMatrixf(
java.nio.FloatBuffer)

public void glMultMatrixf(
float[]
int)

public void glMultMatrixx(
java.nio.IntBuffer)

public void glMultMatrixx(
int[]
int)

public void glMultiTexCoord4f(
int
float
float
float
float)

public void glMultiTexCoord4x(
int
int
int
int
int)

public void glNormal3f(
float
float
float)

public void glNormal3x(
int
int
int)

public void glNormalPointer(
int
int
java.nio.Buffer)

public void glOrthof(
float
float
float
float
float
float)

public void glOrthox(
int
int
int
int
int
int)

public void glPixelStorei(
int
int)

public void glPointParameterf(
int
float)

public void glPointParameterfv(
int
java.nio.FloatBuffer)

public void glPointParameterfv(
int
float[]
int)

public void glPointParameterx(
int
int)

public void glPointParameterxv(
int
java.nio.IntBuffer)

public void glPointParameterxv(
int
int[]
int)

public void glPointSize(
float)

public void glPointSizePointerOES(
int
int
java.nio.Buffer)

public void glPointSizex(
int)

public void glPolygonOffset(
float
float)

public void glPolygonOffsetx(
int
int)

public void glPopMatrix()

public void glPushMatrix()

public int glQueryMatrixxOES(
java.nio.IntBuffer
java.nio.IntBuffer)

public int glQueryMatrixxOES(
int[]
int
int[]
int)

public void glReadPixels(
int
int
int
int
int
int
java.nio.Buffer)

public void glRotatef(
float
float
float
float)

public void glRotatex(
int
int
int
int)

public void glSampleCoverage(
float
boolean)

public void glSampleCoveragex(
int
boolean)

public void glScalef(
float
float
float)

public void glScalex(
int
int
int)

public void glScissor(
int
int
int
int)

public void glShadeModel(
int)

public void glStencilFunc(
int
int
int)

public void glStencilMask(
int)

public void glStencilOp(
int
int
int)

public void glTexCoordPointer(
int
int
int
java.nio.Buffer)

public void glTexEnvf(
int
int
float)

public void glTexEnvfv(
int
int
java.nio.FloatBuffer)

public void glTexEnvfv(
int
int
float[]
int)

public void glTexEnvi(
int
int
int)

public void glTexEnviv(
int
int
java.nio.IntBuffer)

public void glTexEnviv(
int
int
int[]
int)

public void glTexEnvx(
int
int
int)

public void glTexEnvxv(
int
int
java.nio.IntBuffer)

public void glTexEnvxv(
int
int
int[]
int)

public void glTexImage2D(
int
int
int
int
int
int
int
int
java.nio.Buffer)

public void glTexParameterf(
int
int
float)

public void glTexParameterfv(
int
int
java.nio.FloatBuffer)

public void glTexParameterfv(
int
int
float[]
int)

public void glTexParameteri(
int
int
int)

public void glTexParameteriv(
int
int
java.nio.IntBuffer)

public void glTexParameteriv(
int
int
int[]
int)

public void glTexParameterx(
int
int
int)

public void glTexParameterxv(
int
int
java.nio.IntBuffer)

public void glTexParameterxv(
int
int
int[]
int)

public void glTexSubImage2D(
int
int
int
int
int
int
int
int
java.nio.Buffer)

public void glTranslatef(
float
float
float)

public void glTranslatex(
int
int
int)

public void glVertexPointer(
int
int
int
java.nio.Buffer)

public void glViewport(
int
int
int
int)

________________CLASS________________


public class android.opengl.GLU extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static java.lang.String gluErrorString(
int)

public static void gluLookAt(
javax.microedition.khronos.opengles.GL10
float
float
float
float
float
float
float
float
float)

public static void gluOrtho2D(
javax.microedition.khronos.opengles.GL10
float
float
float
float)

public static void gluPerspective(
javax.microedition.khronos.opengles.GL10
float
float
float
float)

public static int gluProject(
float
float
float
float[]
int
float[]
int
int[]
int
float[]
int)

public static int gluUnProject(
float
float
float
float[]
int
float[]
int
int[]
int
float[]
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/opengl/GLUtils; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.opengl.GLUtils$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$android$graphics$Bitmap$Config
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/opengl/GLUtils$1; )
public final class android.opengl.GLUtils extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static int getInternalFormat(
android.graphics.Bitmap)

public static int getType(
android.graphics.Bitmap)

private static native void nativeClassInit()

private static native int native_texImage2D(
int
int
int
android.graphics.Bitmap
int
int)

private static native int native_texSubImage2D(
int
int
int
int
android.graphics.Bitmap
int
int)

public static void texImage2D(
int
int
int
android.graphics.Bitmap
int)

public static void texImage2D(
int
int
int
android.graphics.Bitmap
int
int)

public static void texImage2D(
int
int
android.graphics.Bitmap
int)

public static void texSubImage2D(
int
int
int
int
android.graphics.Bitmap)

public static void texSubImage2D(
int
int
int
int
android.graphics.Bitmap
int
int)

________________CLASS________________


public class android.opengl.Group extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/opengl/MaterialIndices;>; )
private java.util.List materialIndices

private java.lang.String name

private android.opengl.Object3D parent
----------------METHODS----------------

public void <init>(
android.opengl.Object3D)

public void draw(
javax.microedition.khronos.opengles.GL10)

public java.lang.String getName()

public int getNumTriangles()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void load(
java.io.DataInputStream)

public java.lang.String toString()

________________CLASS________________


public class android.opengl.Material extends java.lang.Object

----------------FIELDS----------------

private static float[] black

private float d

private int illum

private float[] ka

private float[] kd

private float[] ks

private java.lang.String map_kd

private java.lang.String name

private float ns

private android.opengl.Object3D parent
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.opengl.Object3D)

public java.lang.String getMap_Kd()

public java.lang.String getName()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void load(
java.io.DataInputStream)

public void setMaterialParameters(
javax.microedition.khronos.opengles.GL10)

public java.lang.String toString()

________________CLASS________________


 class android.opengl.MaterialIndices extends java.lang.Object

----------------FIELDS----------------

private java.nio.ShortBuffer indexBuffer

private android.opengl.Material material
----------------METHODS----------------

public void <init>(
android.opengl.Material
java.nio.ShortBuffer)

public java.nio.ShortBuffer getIndexBuffer()

public android.opengl.Material getMaterial()

________________CLASS________________


public class android.opengl.Matrix extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static void frustumM(
float[]
int
float
float
float
float
float
float)

public static boolean invertM(
float[]
int
float[]
int)

public static float length(
float
float
float)

public static native void multiplyMM(
float[]
int
float[]
int
float[]
int)

public static native void multiplyMV(
float[]
int
float[]
int
float[]
int)

public static void orthoM(
float[]
int
float
float
float
float
float
float)

public static void rotateM(
float[]
int
float
float
float
float)

public static void rotateM(
float[]
int
float[]
int
float
float
float
float)

public static void scaleM(
float[]
int
float
float
float)

public static void scaleM(
float[]
int
float[]
int
float
float
float)

public static void setIdentityM(
float[]
int)

public static void setRotateEulerM(
float[]
int
float
float
float)

public static void setRotateM(
float[]
int
float
float
float
float)

public static void translateM(
float[]
int
float
float
float)

public static void translateM(
float[]
int
float[]
int
float
float
float)

public static void transposeM(
float[]
int
float[]
int)

________________CLASS________________


public abstract class android.opengl.Object3D extends java.lang.Object

----------------FIELDS----------------

private float mBoundsMaxX

private float mBoundsMaxY

private float mBoundsMaxZ

private float mBoundsMinX

private float mBoundsMinY

private float mBoundsMinZ
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Landroid/opengl/Group;>; )
private java.util.Map mGroups

private boolean mHasTexcoords
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Landroid/opengl/Material;>; )
private java.util.Map mMaterials

private java.nio.IntBuffer mNormalBuffer

private java.nio.IntBuffer mTexcoordBuffer
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Landroid/opengl/Texture;>; )
private java.util.Map mTextures

private java.nio.IntBuffer mVertexBuffer
----------------METHODS----------------

public void <init>()

private void reset()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private static void verifyByte(
java.io.DataInputStream
int)

public void draw(
javax.microedition.khronos.opengles.GL10)

public float getBoundsMaxX()

public float getBoundsMaxY()

public float getBoundsMaxZ()

public float getBoundsMinX()

public float getBoundsMinY()

public float getBoundsMinZ()

public android.opengl.Material getMaterial(
java.lang.String)

public java.nio.IntBuffer getNormalBuffer()

public int getNumTriangles()

public java.nio.IntBuffer getTexcoordBuffer()

public android.opengl.Texture getTexture(
java.lang.String)

public java.nio.IntBuffer getVertexBuffer()

public boolean hasTexcoords()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void load(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void loadTexture(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract java.io.InputStream readFile(
java.lang.String)

________________CLASS________________


public class android.opengl.Texture extends java.lang.Object

----------------FIELDS----------------

private int bpp

private java.nio.ByteBuffer data

private int height

private int name

private int width
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void <init>(
java.io.InputStream)

private int loadTexture(
javax.microedition.khronos.opengles.GL10
int
int
int
int
int
int
int
int
int
java.nio.Buffer)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private int readInt16(
java.io.InputStream)

public void setTextureParameters(
javax.microedition.khronos.opengles.GL10)

________________CLASS________________


public class android.opengl.Visibility extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static native void computeBoundingSphere(
float[]
int
int
float[]
int)

public static native int frustumCullSpheres(
float[]
int
float[]
int
int
int[]
int
int)

public static native int visibilityTest(
float[]
int
float[]
int
char[]
int
int)

________________CLASS________________


public class android.os.AsyncResult extends java.lang.Object

----------------FIELDS----------------

public java.lang.Throwable exception

public java.lang.Object result

public java.lang.Object userObj
----------------METHODS----------------

public void <init>(
java.lang.Object
java.lang.Object
java.lang.Throwable)

public static android.os.AsyncResult forMessage(
android.os.Message)

public static android.os.AsyncResult forMessage(
android.os.Message
java.lang.Object
java.lang.Throwable)

________________CLASS________________


public class android.os.BadParcelableException extends android.util.AndroidRuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.Exception)

public void <init>(
java.lang.String)

________________CLASS________________


public class android.os.Base64Utils extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static byte[] decodeBase64(
java.lang.String)

private static native byte[] decodeBase64Native(
java.lang.String)

________________CLASS________________


public class android.os.BatteryManager extends java.lang.Object

----------------FIELDS----------------

public static final int BATTERY_HEALTH_DEAD

public static final int BATTERY_HEALTH_GOOD

public static final int BATTERY_HEALTH_OVERHEAT

public static final int BATTERY_HEALTH_OVER_VOLTAGE

public static final int BATTERY_HEALTH_UNKNOWN

public static final int BATTERY_HEALTH_UNSPECIFIED_FAILURE

public static final int BATTERY_PLUGGED_AC

public static final int BATTERY_PLUGGED_USB

public static final int BATTERY_STATUS_CHARGING

public static final int BATTERY_STATUS_DISCHARGING

public static final int BATTERY_STATUS_FULL

public static final int BATTERY_STATUS_NOT_CHARGING

public static final int BATTERY_STATUS_UNKNOWN
----------------METHODS----------------

public void <init>()

________________CLASS________________


final class android.os.BinderProxy extends java.lang.Object implements android.os.IBinder

----------------FIELDS----------------

private int mObject

private final java.lang.ref.WeakReference mSelf
----------------METHODS----------------

 void <init>()

private final native void destroy()

private static final void sendDeathNotice(
android.os.IBinder$DeathRecipient)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public native java.lang.String getInterfaceDescriptor()

public native boolean isBinderAlive()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public native void linkToDeath(
android.os.IBinder$DeathRecipient
int)

public native boolean pingBinder()

public android.os.IInterface queryLocalInterface(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public native boolean transact(
int
android.os.Parcel
android.os.Parcel
int)

public native boolean unlinkToDeath(
android.os.IBinder$DeathRecipient
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/os/Broadcaster; )
 class android.os.Broadcaster$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =Registration )
@dalvik.annotation.EnclosingClass (value =Landroid/os/Broadcaster; )
 class android.os.Broadcaster$Registration extends java.lang.Object

----------------FIELDS----------------

 android.os.Broadcaster$Registration next

 android.os.Broadcaster$Registration prev

 int senderWhat

 int[] targetWhats

 android.os.Handler[] targets

final android.os.Broadcaster this$0
----------------METHODS----------------

private void <init>(
android.os.Broadcaster)

 void <init>(
android.os.Broadcaster
android.os.Broadcaster$1)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/Broadcaster$1;Landroid/os/Broadcaster$Registration; )
public class android.os.Broadcaster extends java.lang.Object

----------------FIELDS----------------

private android.os.Broadcaster$Registration mReg
----------------METHODS----------------

public void <init>()

public void broadcast(
android.os.Message)

public void cancelRequest(
int
android.os.Handler
int)

public void dumpRegistrations()

public void request(
int
android.os.Handler
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =VERSION )
@dalvik.annotation.EnclosingClass (value =Landroid/os/Build; )
public class android.os.Build$VERSION extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String INCREMENTAL

public static final java.lang.String RELEASE

public static final java.lang.String SDK
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/Build$VERSION; )
public class android.os.Build extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String BOARD

public static final java.lang.String BRAND

public static final java.lang.String DEVICE

public static final java.lang.String FINGERPRINT

public static final java.lang.String HOST

public static final java.lang.String ID

public static final java.lang.String MODEL

public static final java.lang.String PRODUCT

public static final java.lang.String TAGS

public static final long TIME

public static final java.lang.String TYPE

private static final java.lang.String UNKNOWN

public static final java.lang.String USER
----------------METHODS----------------

static void <clinit>()

public void <init>()

static java.lang.String access$000(
java.lang.String)

private static long getLong(
java.lang.String)

private static java.lang.String getString(
java.lang.String)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/os/Bundle;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/os/Bundle; )
final class android.os.Bundle$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.os.Bundle createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.os.Bundle[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public final class android.os.Bundle extends java.lang.Object implements android.os.Parcelable, java.lang.Cloneable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/os/Bundle;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final android.os.Bundle EMPTY

private static final java.lang.String LOG_TAG

private java.lang.ClassLoader mClassLoader

private boolean mFdsKnown

private boolean mHasFds
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>; )
 java.util.Map mMap

 android.os.Parcel mParcelledData
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
int)

public void <init>(
android.os.Bundle)

 void <init>(
android.os.Parcel)

public void <init>(
java.lang.ClassLoader)

private void typeWarning(
java.lang.String
java.lang.Object
java.lang.String
java.lang.ClassCastException)

private void typeWarning(
java.lang.String
java.lang.Object
java.lang.String
java.lang.Object
java.lang.ClassCastException)

public void clear()

public java.lang.Object clone()

public boolean containsKey(
java.lang.String)

public int describeContents()

public java.lang.Object get(
java.lang.String)

public boolean getBoolean(
java.lang.String)

public boolean getBoolean(
java.lang.String
boolean)

public boolean[] getBooleanArray(
java.lang.String)

public android.os.Bundle getBundle(
java.lang.String)

public byte getByte(
java.lang.String)

public java.lang.Byte getByte(
java.lang.String
byte)

public byte[] getByteArray(
java.lang.String)

public char getChar(
java.lang.String)

public char getChar(
java.lang.String
char)

public char[] getCharArray(
java.lang.String)

public java.lang.CharSequence getCharSequence(
java.lang.String)

public double getDouble(
java.lang.String)

public double getDouble(
java.lang.String
double)

public double[] getDoubleArray(
java.lang.String)

public float getFloat(
java.lang.String)

public float getFloat(
java.lang.String
float)

public float[] getFloatArray(
java.lang.String)
@java.lang.Deprecated
public android.os.IBinder getIBinder(
java.lang.String)

public int getInt(
java.lang.String)

public int getInt(
java.lang.String
int)

public int[] getIntArray(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/String;)Ljava/util/ArrayList<Ljava/lang/Integer;>; )
public java.util.ArrayList getIntegerArrayList(
java.lang.String)

public long getLong(
java.lang.String)

public long getLong(
java.lang.String
long)

public long[] getLongArray(
java.lang.String)
@dalvik.annotation.Signature (value =<T::Landroid/os/Parcelable;>(Ljava/lang/String;)TT; )
public android.os.Parcelable getParcelable(
java.lang.String)

public android.os.Parcelable[] getParcelableArray(
java.lang.String)
@dalvik.annotation.Signature (value =<T::Landroid/os/Parcelable;>(Ljava/lang/String;)Ljava/util/ArrayList<TT;>; )
public java.util.ArrayList getParcelableArrayList(
java.lang.String)

public java.io.Serializable getSerializable(
java.lang.String)

public short getShort(
java.lang.String)

public short getShort(
java.lang.String
short)

public short[] getShortArray(
java.lang.String)
@dalvik.annotation.Signature (value =<T::Landroid/os/Parcelable;>(Ljava/lang/String;)Landroid/util/SparseArray<TT;>; )
public android.util.SparseArray getSparseParcelableArray(
java.lang.String)

public java.lang.String getString(
java.lang.String)

public java.lang.String[] getStringArray(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/String;)Ljava/util/ArrayList<Ljava/lang/String;>; )
public java.util.ArrayList getStringArrayList(
java.lang.String)

public boolean hasFileDescriptors()

public boolean isEmpty()
@dalvik.annotation.Signature (value =()Ljava/util/Set<Ljava/lang/String;>; )
public java.util.Set keySet()

public void putAll(
android.os.Bundle)

public void putBoolean(
java.lang.String
boolean)

public void putBooleanArray(
java.lang.String
boolean[])

public void putBundle(
java.lang.String
android.os.Bundle)

public void putByte(
java.lang.String
byte)

public void putByteArray(
java.lang.String
byte[])

public void putChar(
java.lang.String
char)

public void putCharArray(
java.lang.String
char[])

public void putCharSequence(
java.lang.String
java.lang.CharSequence)

public void putDouble(
java.lang.String
double)

public void putDoubleArray(
java.lang.String
double[])

public void putFloat(
java.lang.String
float)

public void putFloatArray(
java.lang.String
float[])
@java.lang.Deprecated
public void putIBinder(
java.lang.String
android.os.IBinder)

public void putInt(
java.lang.String
int)

public void putIntArray(
java.lang.String
int[])
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/Integer;>;)V )
public void putIntegerArrayList(
java.lang.String
java.util.ArrayList)

public void putLong(
java.lang.String
long)

public void putLongArray(
java.lang.String
long[])

public void putParcelable(
java.lang.String
android.os.Parcelable)

public void putParcelableArray(
java.lang.String
android.os.Parcelable[])
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/ArrayList<+Landroid/os/Parcelable;>;)V )
public void putParcelableArrayList(
java.lang.String
java.util.ArrayList)

public void putSerializable(
java.lang.String
java.io.Serializable)

public void putShort(
java.lang.String
short)

public void putShortArray(
java.lang.String
short[])
@dalvik.annotation.Signature (value =(Ljava/lang/String;Landroid/util/SparseArray<+Landroid/os/Parcelable;>;)V )
public void putSparseParcelableArray(
java.lang.String
android.util.SparseArray)

public void putString(
java.lang.String
java.lang.String)

public void putStringArray(
java.lang.String
java.lang.String[])
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;)V )
public void putStringArrayList(
java.lang.String
java.util.ArrayList)

public void readFromParcel(
android.os.Parcel)

public void remove(
java.lang.String)

public void setClassLoader(
java.lang.ClassLoader)

public int size()

public java.lang.String toString()

 void unparcel()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public class android.os.ConditionVariable extends java.lang.Object

----------------FIELDS----------------

private volatile boolean mCondition
----------------METHODS----------------

public void <init>()

public void <init>(
boolean)

public void block()

public boolean block(
long)

public void close()

public void open()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/os/CountDownTimer; )
 class android.os.CountDownTimer$1 extends android.os.Handler

----------------FIELDS----------------

final android.os.CountDownTimer this$0
----------------METHODS----------------

 void <init>(
android.os.CountDownTimer)

public void handleMessage(
android.os.Message)

________________CLASS________________


public abstract class android.os.CountDownTimer extends java.lang.Object

----------------FIELDS----------------

private static final int MSG

private final long mCountdownInterval

private android.os.Handler mHandler

private final long mMillisInFuture

private long mStopTimeInFuture
----------------METHODS----------------

public void <init>(
long
long)

static long access$000(
android.os.CountDownTimer)

static long access$100(
android.os.CountDownTimer)

public final void cancel()

public abstract void onFinish()

public abstract void onTick(
long)

public final android.os.CountDownTimer start()

________________CLASS________________


public class android.os.RemoteException extends android.util.AndroidException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________


public class android.os.DeadObjectException extends android.os.RemoteException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =InstructionCount )
@dalvik.annotation.EnclosingClass (value =Landroid/os/Debug; )
public class android.os.Debug$InstructionCount extends java.lang.Object

----------------FIELDS----------------

private static final int NUM_INSTR

private int[] mCounts
----------------METHODS----------------

public void <init>()

public boolean collect()

public int globalMethodInvocations()

public int globalTotal()

public boolean resetAndStart()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =MemoryInfo )
@dalvik.annotation.EnclosingClass (value =Landroid/os/Debug; )
public class android.os.Debug$MemoryInfo extends java.lang.Object

----------------FIELDS----------------

public int dalvikPrivateDirty

public int dalvikPss

public int dalvikSharedDirty

public int nativePrivateDirty

public int nativePss

public int nativeSharedDirty

public int otherPrivateDirty

public int otherPss

public int otherSharedDirty
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/Debug$InstructionCount;Landroid/os/Debug$MemoryInfo; )
public final class android.os.Debug extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String DEFAULT_TRACE_BODY

private static final java.lang.String DEFAULT_TRACE_EXTENSION

private static final java.lang.String DEFAULT_TRACE_FILE_PATH

private static final java.lang.String DEFAULT_TRACE_PATH_PREFIX

private static final int MIN_DEBUGGER_IDLE

public static final int SHOW_CLASSLOADER

public static final int SHOW_FULL_DETAIL

public static final int SHOW_INITIALIZED

private static final int SPIN_DELAY

private static final java.lang.String SYSFS_QEMU_TRACE_STATE

public static final int TRACE_COUNT_ALLOCS

private static volatile boolean mWaiting
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static void changeDebugPort(
int)

public static void enableEmulatorTraceOutput()

public static final native int getBinderDeathObjectCount()

public static final native int getBinderLocalObjectCount()

public static final native int getBinderProxyObjectCount()

public static native int getBinderReceivedTransactions()

public static native int getBinderSentTransactions()

public static int getGlobalAllocCount()

public static int getGlobalAllocSize()

public static int getGlobalExternalAllocCount()

public static int getGlobalExternalAllocSize()

public static int getGlobalExternalFreedCount()

public static int getGlobalExternalFreedSize()

public static int getGlobalFreedCount()

public static int getGlobalFreedSize()

public static int getGlobalGcInvocationCount()

public static int getLoadedClassCount()

public static native void getMemoryInfo(
android.os.Debug$MemoryInfo)

public static native long getNativeHeapAllocatedSize()

public static native long getNativeHeapFreeSize()

public static native long getNativeHeapSize()

public static int getThreadAllocCount()

public static int getThreadAllocSize()

public static int getThreadExternalAllocCount()

public static int getThreadExternalAllocSize()

public static int getThreadGcInvocationCount()

public static boolean isDebuggerConnected()

public static void printLoadedClasses(
int)

public static void resetAllCounts()

public static void resetGlobalAllocCount()

public static void resetGlobalAllocSize()

public static void resetGlobalExternalAllocCount()

public static void resetGlobalExternalAllocSize()

public static void resetGlobalExternalFreedCount()

public static void resetGlobalExternalFreedSize()

public static void resetGlobalFreedCount()

public static void resetGlobalFreedSize()

public static void resetGlobalGcInvocationCount()

public static void resetThreadAllocCount()

public static void resetThreadAllocSize()

public static void resetThreadExternalAllocCount()

public static void resetThreadExternalAllocSize()

public static void resetThreadGcInvocationCount()

public static int setAllocationLimit(
int)

public static int setGlobalAllocationLimit(
int)

public static void startAllocCounting()

public static void startMethodTracing()

public static void startMethodTracing(
java.lang.String)

public static void startMethodTracing(
java.lang.String
int)

public static void startMethodTracing(
java.lang.String
int
int)

public static void startNativeTracing()

public static void stopAllocCounting()

public static void stopMethodTracing()

public static void stopNativeTracing()

public static long threadCpuTimeNanos()

public static void waitForDebugger()

public static boolean waitingForDebugger()

________________CLASS________________


public class android.os.Environment extends java.lang.Object

----------------FIELDS----------------

private static final java.io.File DATA_DIRECTORY

private static final java.io.File DOWNLOAD_CACHE_DIRECTORY

private static final java.io.File EXTERNAL_STORAGE_DIRECTORY

public static final java.lang.String MEDIA_BAD_REMOVAL

public static final java.lang.String MEDIA_MOUNTED

public static final java.lang.String MEDIA_MOUNTED_READ_ONLY

public static final java.lang.String MEDIA_REMOVED

public static final java.lang.String MEDIA_SHARED

public static final java.lang.String MEDIA_UNMOUNTABLE

public static final java.lang.String MEDIA_UNMOUNTED

private static final java.io.File ROOT_DIRECTORY
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static java.io.File getDataDirectory()

static java.io.File getDirectory(
java.lang.String
java.lang.String)

public static java.io.File getDownloadCacheDirectory()

public static java.io.File getExternalStorageDirectory()

public static java.lang.String getExternalStorageState()

public static java.io.File getRootDirectory()

________________CLASS________________


public class android.os.Exec extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static java.io.FileDescriptor createSubprocess(
java.lang.String
java.lang.String
java.lang.String)

public static native java.io.FileDescriptor createSubprocess(
java.lang.String
java.lang.String
java.lang.String
int[])

public static native void setPtyWindowSize(
java.io.FileDescriptor
int
int
int
int)

public static native int waitFor(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =ObserverThread )
@dalvik.annotation.EnclosingClass (value =Landroid/os/FileObserver; )
 class android.os.FileObserver$ObserverThread extends java.lang.Thread

----------------FIELDS----------------

private int m_fd
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/ref/WeakReference;>; )
private java.util.HashMap m_observers
----------------METHODS----------------

public void <init>()

private native int init()

private native void observe(
int)

private native int startWatching(
int
java.lang.String
int)

private native void stopWatching(
int
int)

public void onEvent(
int
int
java.lang.String)

public void run()

public int startWatching(
java.lang.String
int
android.os.FileObserver)

public void stopWatching(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/FileObserver$ObserverThread; )
public abstract class android.os.FileObserver extends java.lang.Object

----------------FIELDS----------------

public static final int ACCESS

public static final int ALL_EVENTS

public static final int ATTRIB

public static final int CLOSE_NOWRITE

public static final int CLOSE_WRITE

public static final int CREATE

public static final int DELETE

public static final int DELETE_SELF

private static final java.lang.String LOG_TAG

public static final int MODIFY

public static final int MOVED_FROM

public static final int MOVED_TO

public static final int MOVE_SELF

public static final int OPEN

private static android.os.FileObserver$ObserverThread s_observerThread

private java.lang.Integer m_descriptor

private int m_mask

private java.lang.String m_path
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
int)

protected void finalize()

public abstract void onEvent(
int
java.lang.String)

public void startWatching()

public void stopWatching()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =FileStatus )
@dalvik.annotation.EnclosingClass (value =Landroid/os/FileUtils; )
public final class android.os.FileUtils$FileStatus extends java.lang.Object

----------------FIELDS----------------

public long atime

public int blksize

public long blocks

public long ctime

public int dev

public int gid

public int ino

public int mode

public long mtime

public int nlink

public int rdev

public long size

public int uid
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/FileUtils$FileStatus; )
public class android.os.FileUtils extends java.lang.Object

----------------FIELDS----------------

private static final java.util.regex.Pattern SAFE_FILENAME_PATTERN

public static final int S_IRGRP

public static final int S_IROTH

public static final int S_IRUSR

public static final int S_IRWXG

public static final int S_IRWXO

public static final int S_IRWXU

public static final int S_IWGRP

public static final int S_IWOTH

public static final int S_IWUSR

public static final int S_IXGRP

public static final int S_IXOTH

public static final int S_IXUSR
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static boolean copyFile(
java.io.File
java.io.File)

public static boolean copyToFile(
java.io.InputStream
java.io.File)

public static native int getFatVolumeId(
java.lang.String)

public static native boolean getFileStatus(
java.lang.String
android.os.FileUtils$FileStatus)

public static native int getPermissions(
java.lang.String
int[])

public static boolean isFilenameSafe(
java.io.File)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public static java.lang.String readTextFile(
java.io.File
int
java.lang.String)

public static native int setPermissions(
java.lang.String
int
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/os/Handler; )
 class android.os.Handler$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/IMessenger$Stub; )
public abstract interface class android.os.IMessenger extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void send(
android.os.Message)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/os/IMessenger; )
@dalvik.annotation.MemberClasses (value =Landroid/os/IMessenger$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.os.IMessenger$Stub extends android.os.Binder implements android.os.IMessenger

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_send
----------------METHODS----------------

public void <init>()

public static android.os.IMessenger asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/os/Handler; )
@dalvik.annotation.InnerClass (accessFlags =18 name =MessengerImpl )
final class android.os.Handler$MessengerImpl extends android.os.IMessenger$Stub

----------------FIELDS----------------

final android.os.Handler this$0
----------------METHODS----------------

private void <init>(
android.os.Handler)

 void <init>(
android.os.Handler
android.os.Handler$1)

public void send(
android.os.Message)

________________CLASS________________


public abstract interface class android.os.HandlerInterface extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void handleMessage(
android.os.Message)

________________CLASS________________


public class android.os.HandlerThread extends java.lang.Thread

----------------FIELDS----------------

private android.os.Looper mLooper

private int mPriority

private int mTid
----------------METHODS----------------

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
int)

public android.os.Looper getLooper()

public int getThreadId()

protected void onLooperPrepared()

public void run()

________________CLASS________________


public class android.os.Hardware extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static native void enableCameraFlash(
int)

public static native boolean getFlashlightEnabled()

public static native void setButtonBacklight(
boolean)

public static native void setFlashlightEnabled(
boolean)

public static native void setKeyboardBacklight(
boolean)

public static native int setLedState(
int
int
int)

public static native void setScreenBacklight(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/ICheckinService$Stub; )
public abstract interface class android.os.ICheckinService extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void getParentalControlState(
android.os.IParentalControlCallback)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void masterClear()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void reportCrashAsync(
byte[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void reportCrashSync(
byte[])

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/os/ICheckinService$Stub; )
 class android.os.ICheckinService$Stub$Proxy extends java.lang.Object implements android.os.ICheckinService

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void getParentalControlState(
android.os.IParentalControlCallback)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void masterClear()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void reportCrashAsync(
byte[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void reportCrashSync(
byte[])

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/ICheckinService$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/os/ICheckinService; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.os.ICheckinService$Stub extends android.os.Binder implements android.os.ICheckinService

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_getParentalControlState

static final int TRANSACTION_masterClear

static final int TRANSACTION_reportCrashAsync

static final int TRANSACTION_reportCrashSync
----------------METHODS----------------

public void <init>()

public static android.os.ICheckinService asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/IHardwareService$Stub; )
public abstract interface class android.os.IHardwareService extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void cancelVibrate()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void enableCameraFlash(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean getFlashlightEnabled()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setButtonBacklight(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setFlashlightEnabled(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setKeyboardBacklight(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setLedState(
int
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setScreenBacklight(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void vibrate(
long)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void vibratePattern(
long[]
int
android.os.IBinder)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/os/IHardwareService$Stub; )
 class android.os.IHardwareService$Stub$Proxy extends java.lang.Object implements android.os.IHardwareService

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void cancelVibrate()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void enableCameraFlash(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean getFlashlightEnabled()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setButtonBacklight(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setFlashlightEnabled(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setKeyboardBacklight(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setLedState(
int
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setScreenBacklight(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void vibrate(
long)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void vibratePattern(
long[]
int
android.os.IBinder)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/IHardwareService$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/os/IHardwareService; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.os.IHardwareService$Stub extends android.os.Binder implements android.os.IHardwareService

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_cancelVibrate

static final int TRANSACTION_enableCameraFlash

static final int TRANSACTION_getFlashlightEnabled

static final int TRANSACTION_setButtonBacklight

static final int TRANSACTION_setFlashlightEnabled

static final int TRANSACTION_setKeyboardBacklight

static final int TRANSACTION_setLedState

static final int TRANSACTION_setScreenBacklight

static final int TRANSACTION_vibrate

static final int TRANSACTION_vibratePattern
----------------METHODS----------------

public void <init>()

public static android.os.IHardwareService asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/os/IMessenger$Stub; )
 class android.os.IMessenger$Stub$Proxy extends java.lang.Object implements android.os.IMessenger

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void send(
android.os.Message)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/IMountService$Stub; )
public abstract interface class android.os.IMountService extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean getMassStorageConnected()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean getMassStorageEnabled()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void mountMedia(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setMassStorageEnabled(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void unmountMedia(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/os/IMountService$Stub; )
 class android.os.IMountService$Stub$Proxy extends java.lang.Object implements android.os.IMountService

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean getMassStorageConnected()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean getMassStorageEnabled()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void mountMedia(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setMassStorageEnabled(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void unmountMedia(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/IMountService$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/os/IMountService; )
public abstract class android.os.IMountService$Stub extends android.os.Binder implements android.os.IMountService

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_getMassStorageConnected

static final int TRANSACTION_getMassStorageEnabled

static final int TRANSACTION_mountMedia

static final int TRANSACTION_setMassStorageEnabled

static final int TRANSACTION_unmountMedia
----------------METHODS----------------

public void <init>()

public static android.os.IMountService asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/INetStatService$Stub; )
public abstract interface class android.os.INetStatService extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getRxBytes()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getRxPackets()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getTxBytes()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getTxPackets()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/os/INetStatService$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.os.INetStatService$Stub$Proxy extends java.lang.Object implements android.os.INetStatService

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getRxBytes()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getRxPackets()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getTxBytes()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getTxPackets()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/os/INetStatService; )
@dalvik.annotation.MemberClasses (value =Landroid/os/INetStatService$Stub$Proxy; )
public abstract class android.os.INetStatService$Stub extends android.os.Binder implements android.os.INetStatService

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_getRxBytes

static final int TRANSACTION_getRxPackets

static final int TRANSACTION_getTxBytes

static final int TRANSACTION_getTxPackets
----------------METHODS----------------

public void <init>()

public static android.os.INetStatService asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/IParentalControlCallback$Stub; )
public abstract interface class android.os.IParentalControlCallback extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onResult(
com.google.android.net.ParentalControlState)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/os/IParentalControlCallback$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.os.IParentalControlCallback$Stub$Proxy extends java.lang.Object implements android.os.IParentalControlCallback

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onResult(
com.google.android.net.ParentalControlState)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/IParentalControlCallback$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/os/IParentalControlCallback; )
public abstract class android.os.IParentalControlCallback$Stub extends android.os.Binder implements android.os.IParentalControlCallback

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_onResult
----------------METHODS----------------

public void <init>()

public static android.os.IParentalControlCallback asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/IPermissionController$Stub; )
public abstract interface class android.os.IPermissionController extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean checkPermission(
java.lang.String
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/os/IPermissionController$Stub; )
 class android.os.IPermissionController$Stub$Proxy extends java.lang.Object implements android.os.IPermissionController

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean checkPermission(
java.lang.String
int
int)

public java.lang.String getInterfaceDescriptor()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/os/IPermissionController; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/os/IPermissionController$Stub$Proxy; )
public abstract class android.os.IPermissionController$Stub extends android.os.Binder implements android.os.IPermissionController

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_checkPermission
----------------METHODS----------------

public void <init>()

public static android.os.IPermissionController asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/IPowerManager$Stub; )
public abstract interface class android.os.IPowerManager extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void acquireWakeLock(
int
android.os.IBinder
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract long getScreenOnTime()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void goToSleep(
long)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void releaseWakeLock(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setPokeLock(
int
android.os.IBinder
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setStayOnSetting(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void userActivity(
long
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void userActivityWithForce(
long
boolean
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/os/IPowerManager$Stub; )
 class android.os.IPowerManager$Stub$Proxy extends java.lang.Object implements android.os.IPowerManager

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void acquireWakeLock(
int
android.os.IBinder
java.lang.String)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public long getScreenOnTime()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void goToSleep(
long)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void releaseWakeLock(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setPokeLock(
int
android.os.IBinder
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setStayOnSetting(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void userActivity(
long
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void userActivityWithForce(
long
boolean
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/IPowerManager$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/os/IPowerManager; )
public abstract class android.os.IPowerManager$Stub extends android.os.Binder implements android.os.IPowerManager

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_acquireWakeLock

static final int TRANSACTION_getScreenOnTime

static final int TRANSACTION_goToSleep

static final int TRANSACTION_releaseWakeLock

static final int TRANSACTION_setPokeLock

static final int TRANSACTION_setStayOnSetting

static final int TRANSACTION_userActivity

static final int TRANSACTION_userActivityWithForce
----------------METHODS----------------

public void <init>()

public static android.os.IPowerManager asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________


public abstract interface class android.os.IServiceManager extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------

public static final int ADD_SERVICE_TRANSACTION

public static final int CHECK_SERVICES_TRANSACTION

public static final int CHECK_SERVICE_TRANSACTION

public static final int GET_SERVICE_TRANSACTION

public static final int LIST_SERVICES_TRANSACTION

public static final int SET_PERMISSION_CONTROLLER_TRANSACTION

public static final java.lang.String descriptor
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void addService(
java.lang.String
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.os.IBinder checkService(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.os.IBinder getService(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String[] listServices()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setPermissionController(
android.os.IPermissionController)

________________CLASS________________


public abstract interface class android.os.LocalPowerManager extends java.lang.Object

----------------FIELDS----------------

public static final int BUTTON_EVENT

public static final int CHEEK_EVENT

public static final int OTHER_EVENT

public static final int POKE_LOCK_IGNORE_CHEEK_EVENTS

public static final int POKE_LOCK_MEDIUM_TIMEOUT

public static final int POKE_LOCK_SHORT_TIMEOUT

public static final int POKE_LOCK_TIMEOUT_MASK

public static final int TOUCH_EVENT
----------------METHODS----------------

public abstract void enableUserActivity(
boolean)

public abstract void goToSleep(
long)

public abstract void setKeyboardVisibility(
boolean)

public abstract void userActivity(
long
boolean
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =HandlerException )
@dalvik.annotation.EnclosingClass (value =Landroid/os/Looper; )
 class android.os.Looper$HandlerException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

 void <init>(
android.os.Message
java.lang.Throwable)

static java.lang.String createMessage(
java.lang.Throwable)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/Looper$HandlerException; )
public class android.os.Looper extends java.lang.Object

----------------FIELDS----------------

private static final boolean DEBUG

private static final boolean localLOGV

private static android.os.Looper mMainLooper

private static final java.lang.ThreadLocal sThreadLocal

private android.util.Printer mLogging

final android.os.MessageQueue mQueue

volatile boolean mRun

 java.lang.Thread mThread
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static final android.os.Looper getMainLooper()

public static final void loop()

public static final android.os.Looper myLooper()

public static final android.os.MessageQueue myQueue()

public static final void prepare()

public static final void prepareMainLooper()

private static void setMainLooper(
android.os.Looper)

public void dump(
android.util.Printer
java.lang.String)

public void quit()

public void setMessageLogging(
android.util.Printer)

public java.lang.String toString()

________________CLASS________________


public class android.os.MailboxNotAvailableException extends java.lang.Throwable

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/os/MemoryFile; )
 class android.os.MemoryFile$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/os/MemoryFile; )
@dalvik.annotation.InnerClass (accessFlags =2 name =MemoryInputStream )
 class android.os.MemoryFile$MemoryInputStream extends java.io.InputStream

----------------FIELDS----------------

private int mMark

private int mOffset

private byte[] mSingleByte

final android.os.MemoryFile this$0
----------------METHODS----------------

private void <init>(
android.os.MemoryFile)

 void <init>(
android.os.MemoryFile
android.os.MemoryFile$1)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int available()

public void mark(
int)

public boolean markSupported()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read(
byte[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void reset()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public long skip(
long)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =MemoryOutputStream )
@dalvik.annotation.EnclosingClass (value =Landroid/os/MemoryFile; )
 class android.os.MemoryFile$MemoryOutputStream extends java.io.OutputStream

----------------FIELDS----------------

private int mOffset

private byte[] mSingleByte

final android.os.MemoryFile this$0
----------------METHODS----------------

private void <init>(
android.os.MemoryFile)

 void <init>(
android.os.MemoryFile
android.os.MemoryFile$1)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
byte[]
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/MemoryFile$1;Landroid/os/MemoryFile$MemoryOutputStream;Landroid/os/MemoryFile$MemoryInputStream; )
public class android.os.MemoryFile extends java.lang.Object

----------------FIELDS----------------

private static java.lang.String TAG

private int mAddress

private boolean mAllowPurging

private int mFD

private int mLength
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String
int)

static int access$200(
android.os.MemoryFile)

private native void native_close(
int)

private native int native_mmap(
int
int)

private native int native_open(
java.lang.String
int)

private native void native_pin(
int
boolean)

private native int native_read(
int
int
byte[]
int
int
int
boolean)

private native void native_write(
int
int
byte[]
int
int
int
boolean)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean allowPurging(
boolean)

public void close()

protected void finalize()

public java.io.InputStream getInputStream()

public java.io.OutputStream getOutputStream()

public boolean isPurgingAllowed()

public int length()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int readBytes(
byte[]
int
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeBytes(
byte[]
int
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/os/Message; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/os/Message;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.os.Message$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.os.Message createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.os.Message[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public final class android.os.Message extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/os/Message;>; )
public static final android.os.Parcelable$Creator CREATOR

private static final int MAX_POOL_SIZE

private static android.os.Message mPool

private static int mPoolSize

private static java.lang.Object mPoolSync

public int arg1

public int arg2

 java.lang.Runnable callback

 android.os.Bundle data

 android.os.Message next

public java.lang.Object obj

public android.os.Messenger replyTo

 android.os.Handler target

public int what

 long when
----------------METHODS----------------

static void <clinit>()

public void <init>()

static void access$000(
android.os.Message
android.os.Parcel)

public static android.os.Message obtain()

public static android.os.Message obtain(
android.os.Handler)

public static android.os.Message obtain(
android.os.Handler
int)

public static android.os.Message obtain(
android.os.Handler
int
int
int)

public static android.os.Message obtain(
android.os.Handler
int
int
int
java.lang.Object)

public static android.os.Message obtain(
android.os.Handler
int
java.lang.Object)

public static android.os.Message obtain(
android.os.Handler
java.lang.Runnable)

public static android.os.Message obtain(
android.os.Message)

private final void readFromParcel(
android.os.Parcel)

 void clearForRecycle()

public void copyFrom(
android.os.Message)

public int describeContents()

public java.lang.Runnable getCallback()

public android.os.Bundle getData()

public android.os.Handler getTarget()

public long getWhen()

public android.os.Bundle peekData()

public void recycle()

public void sendToTarget()

public void setData(
android.os.Bundle)

public void setTarget(
android.os.Handler)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/MessageQueue$IdleHandler; )
public class android.os.MessageQueue extends java.lang.Object

----------------FIELDS----------------

private final java.util.ArrayList mIdleHandlers

 android.os.Message mMessages

 boolean mQuitAllowed

private boolean mQuiting
----------------METHODS----------------

 void <init>()

public final void addIdleHandler(
android.os.MessageQueue$IdleHandler)

final boolean enqueueMessage(
android.os.Message
long)

final android.os.Message next()

 void poke()

final android.os.Message pullNextLocked(
long)

final void removeCallbacksAndMessages(
android.os.Handler
java.lang.Object)

public final void removeIdleHandler(
android.os.MessageQueue$IdleHandler)

final void removeMessages(
android.os.Handler
java.lang.Runnable
java.lang.Object)

final boolean removeMessages(
android.os.Handler
int
java.lang.Object
boolean)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/os/Messenger;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/os/Messenger; )
final class android.os.Messenger$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.os.Messenger createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.os.Messenger[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public final class android.os.Messenger extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/os/Messenger;>; )
public static final android.os.Parcelable$Creator CREATOR

private final android.os.IMessenger mTarget
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.os.Handler)

public void <init>(
android.os.IBinder)

public static android.os.Messenger readMessengerOrNullFromParcel(
android.os.Parcel)

public static void writeMessengerOrNullToParcel(
android.os.Messenger
android.os.Parcel)

public int describeContents()

public boolean equals(
java.lang.Object)

public android.os.IBinder getBinder()

public int hashCode()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void send(
android.os.Message)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public class android.os.NetStat extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static native int netStatGetRxBytes()

public static native int netStatGetRxPkts()

public static native int netStatGetTxBytes()

public static native int netStatGetTxPkts()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Ljava/lang/String;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/os/Parcel; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.os.Parcel$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public java.lang.String createFromParcel(
android.os.Parcel)

public volatile java.lang.Object[] newArray(
int)

public java.lang.String[] newArray(
int)

________________CLASS________________


public final class android.os.Parcel extends java.lang.Object

----------------FIELDS----------------

private static final boolean DEBUG_RECYCLE

private static final int EX_BAD_PARCELABLE

private static final int EX_ILLEGAL_ARGUMENT

private static final int EX_ILLEGAL_STATE

private static final int EX_NULL_POINTER

private static final int EX_SECURITY

private static final int POOL_SIZE
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Ljava/lang/String;>; )
public static final android.os.Parcelable$Creator STRING_CREATOR

private static final int VAL_BOOLEAN

private static final int VAL_BOOLEANARRAY

private static final int VAL_BUNDLE

private static final int VAL_BYTE

private static final int VAL_BYTEARRAY

private static final int VAL_CHARSEQUENCE

private static final int VAL_DOUBLE

private static final int VAL_FLOAT

private static final int VAL_IBINDER

private static final int VAL_INTARRAY

private static final int VAL_INTEGER

private static final int VAL_LIST

private static final int VAL_LONG

private static final int VAL_LONGARRAY

private static final int VAL_MAP

private static final int VAL_NULL

private static final int VAL_OBJECTARRAY

private static final int VAL_PARCELABLE

private static final int VAL_PARCELABLEARRAY

private static final int VAL_SERIALIZABLE

private static final int VAL_SHORT

private static final int VAL_SPARSEARRAY

private static final int VAL_SPARSEBOOLEANARRAY

private static final int VAL_STRING

private static final int VAL_STRINGARRAY
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/ClassLoader;Ljava/util/HashMap<Ljava/lang/String;Landroid/os/Parcelable$Creator;>;>; )
private static final java.util.HashMap mCreators

private static final android.os.Parcel[] sHolderPool

private static final android.os.Parcel[] sOwnedPool

private int mObject

private int mOwnObject

private java.lang.RuntimeException mStack
----------------METHODS----------------

static void <clinit>()

private void <init>(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static native void closeFileDescriptor(
java.io.FileDescriptor)

private native void destroy()

private native void freeBuffer()

private native void init(
int)

private native java.io.FileDescriptor internalReadFileDescriptor()

public static android.os.Parcel obtain()

protected static final android.os.Parcel obtain(
int)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
static native java.io.FileDescriptor openFileDescriptor(
java.lang.String
int)

private void readArrayInternal(
java.lang.Object[]
int
java.lang.ClassLoader)

private void readListInternal(
java.util.List
int
java.lang.ClassLoader)

private void readMapInternal(
java.util.Map
int
java.lang.ClassLoader)

private void readSparseArrayInternal(
android.util.SparseArray
int
java.lang.ClassLoader)

private void readSparseBooleanArrayInternal(
android.util.SparseBooleanArray
int)
@dalvik.annotation.Signature (value =(Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;)V )
private void writeMapInternal(
java.util.Map)

private native void writeNative(
byte[]
int
int)

public final native void appendFrom(
android.os.Parcel
int
int)

public final android.os.IBinder[] createBinderArray()
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Landroid/os/IBinder;>; )
public final java.util.ArrayList createBinderArrayList()

public final boolean[] createBooleanArray()

public final native byte[] createByteArray()

public final char[] createCharArray()

public final double[] createDoubleArray()

public final float[] createFloatArray()

public final int[] createIntArray()

public final long[] createLongArray()

public final java.lang.String[] createStringArray()
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Ljava/lang/String;>; )
public final java.util.ArrayList createStringArrayList()
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Landroid/os/Parcelable$Creator<TT;>;)[TT; )
public final java.lang.Object[] createTypedArray(
android.os.Parcelable$Creator)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Landroid/os/Parcelable$Creator<TT;>;)Ljava/util/ArrayList<TT;>; )
public final java.util.ArrayList createTypedArrayList(
android.os.Parcelable$Creator)

public final native int dataAvail()

public final native int dataCapacity()

public final native int dataPosition()

public final native int dataSize()

public final native void enforceInterface(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public final native boolean hasFileDescriptors()

public final native byte[] marshall()

public final java.lang.Object[] readArray(
java.lang.ClassLoader)

public final java.util.ArrayList readArrayList(
java.lang.ClassLoader)

public final void readBinderArray(
android.os.IBinder[])
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/os/IBinder;>;)V )
public final void readBinderList(
java.util.List)

public final void readBooleanArray(
boolean[])

public final android.os.Bundle readBundle()

public final android.os.Bundle readBundle(
java.lang.ClassLoader)

 android.os.Bundle readBundleUnpacked(
java.lang.ClassLoader)

public final byte readByte()

public final void readByteArray(
byte[])

public final void readCharArray(
char[])

public final native double readDouble()

public final void readDoubleArray(
double[])

public final void readException()

public final void readException(
int
java.lang.String)

public final android.os.ParcelFileDescriptor readFileDescriptor()

public final native float readFloat()

public final void readFloatArray(
float[])

public final java.util.HashMap readHashMap(
java.lang.ClassLoader)

public final native int readInt()

public final void readIntArray(
int[])

public final void readList(
java.util.List
java.lang.ClassLoader)

public final native long readLong()

public final void readLongArray(
long[])

public final void readMap(
java.util.Map
java.lang.ClassLoader)
@dalvik.annotation.Signature (value =<T::Landroid/os/Parcelable;>(Ljava/lang/ClassLoader;)TT; )
public final android.os.Parcelable readParcelable(
java.lang.ClassLoader)

public final android.os.Parcelable[] readParcelableArray(
java.lang.ClassLoader)

public final java.io.Serializable readSerializable()

public final android.util.SparseArray readSparseArray(
java.lang.ClassLoader)

public final android.util.SparseBooleanArray readSparseBooleanArray()

public final native java.lang.String readString()

public final void readStringArray(
java.lang.String[])

public final java.lang.String[] readStringArray()
@dalvik.annotation.Signature (value =(Ljava/util/List<Ljava/lang/String;>;)V )
public final void readStringList(
java.util.List)

public final native android.os.IBinder readStrongBinder()
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>([TT;Landroid/os/Parcelable$Creator<TT;>;)V )
public final void readTypedArray(
java.lang.Object[]
android.os.Parcelable$Creator)
@java.lang.Deprecated
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Landroid/os/Parcelable$Creator<TT;>;)[TT; )
public final java.lang.Object[] readTypedArray(
android.os.Parcelable$Creator)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Ljava/util/List<TT;>;Landroid/os/Parcelable$Creator<TT;>;)V )
public final void readTypedList(
java.util.List
android.os.Parcelable$Creator)

public final java.lang.Object readValue(
java.lang.ClassLoader)

public final void recycle()

public final native void setDataCapacity(
int)

public final native void setDataPosition(
int)

public final native void setDataSize(
int)

public final native void unmarshall(
byte[]
int
int)

public final void writeArray(
java.lang.Object[])

public final void writeBinderArray(
android.os.IBinder[])
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/os/IBinder;>;)V )
public final void writeBinderList(
java.util.List)

public final void writeBooleanArray(
boolean[])

public final void writeBundle(
android.os.Bundle)

public final void writeByte(
byte)

public final void writeByteArray(
byte[])

public final void writeByteArray(
byte[]
int
int)

public final void writeCharArray(
char[])

public final native void writeDouble(
double)

public final void writeDoubleArray(
double[])

public final void writeException(
java.lang.Exception)

public final native void writeFileDescriptor(
java.io.FileDescriptor)

public final native void writeFloat(
float)

public final void writeFloatArray(
float[])

public final native void writeInt(
int)

public final void writeIntArray(
int[])

public final native void writeInterfaceToken(
java.lang.String)

public final void writeList(
java.util.List)

public final native void writeLong(
long)

public final void writeLongArray(
long[])

public final void writeMap(
java.util.Map)

public final void writeNoException()

public final void writeParcelable(
android.os.Parcelable
int)
@dalvik.annotation.Signature (value =<T::Landroid/os/Parcelable;>([TT;I)V )
public final void writeParcelableArray(
android.os.Parcelable[]
int)

public final void writeSerializable(
java.io.Serializable)
@dalvik.annotation.Signature (value =(Landroid/util/SparseArray<Ljava/lang/Object;>;)V )
public final void writeSparseArray(
android.util.SparseArray)

public final void writeSparseBooleanArray(
android.util.SparseBooleanArray)

public final native void writeString(
java.lang.String)

public final void writeStringArray(
java.lang.String[])
@dalvik.annotation.Signature (value =(Ljava/util/List<Ljava/lang/String;>;)V )
public final void writeStringList(
java.util.List)

public final native void writeStrongBinder(
android.os.IBinder)

public final void writeStrongInterface(
android.os.IInterface)
@dalvik.annotation.Signature (value =<T::Landroid/os/Parcelable;>([TT;I)V )
public final void writeTypedArray(
android.os.Parcelable[]
int)
@dalvik.annotation.Signature (value =<T::Landroid/os/Parcelable;>(Ljava/util/List<TT;>;)V )
public final void writeTypedList(
java.util.List)

public final void writeValue(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/os/ParcelFileDescriptor;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/os/ParcelFileDescriptor; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.os.ParcelFileDescriptor$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.os.ParcelFileDescriptor createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.os.ParcelFileDescriptor[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =AutoCloseInputStream )
@dalvik.annotation.EnclosingClass (value =Landroid/os/ParcelFileDescriptor; )
public class android.os.ParcelFileDescriptor$AutoCloseInputStream extends java.io.FileInputStream

----------------FIELDS----------------

private final android.os.ParcelFileDescriptor mFd
----------------METHODS----------------

public void <init>(
android.os.ParcelFileDescriptor)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =AutoCloseOutputStream )
@dalvik.annotation.EnclosingClass (value =Landroid/os/ParcelFileDescriptor; )
public class android.os.ParcelFileDescriptor$AutoCloseOutputStream extends java.io.FileOutputStream

----------------FIELDS----------------

private final android.os.ParcelFileDescriptor mFd
----------------METHODS----------------

public void <init>(
android.os.ParcelFileDescriptor)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()

________________CLASS________________


public class android.os.ParcelFormatException extends java.lang.RuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/os/PatternMatcher;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/os/PatternMatcher; )
final class android.os.PatternMatcher$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.os.PatternMatcher createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.os.PatternMatcher[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.os.PatternMatcher extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/os/PatternMatcher;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final int PATTERN_LITERAL

public static final int PATTERN_PREFIX

public static final int PATTERN_SIMPLE_GLOB

private final java.lang.String mPattern

private final int mType
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.os.Parcel)

public void <init>(
java.lang.String
int)

static boolean matchPattern(
java.lang.String
java.lang.String
int)

public int describeContents()

public final java.lang.String getPath()

public final int getType()

public boolean match(
java.lang.String)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public class android.os.Power extends java.lang.Object

----------------FIELDS----------------

public static final int ALL_LIGHTS

public static final int BRIGHTNESS_DIM

public static final int BRIGHTNESS_LOW_BATTERY

public static final int BRIGHTNESS_OFF

public static final int BRIGHTNESS_ON

public static final int BUTTON_LIGHT

public static final int FULL_WAKE_LOCK

public static final int KEYBOARD_LIGHT

public static final int LOW_BATTERY_THRESHOLD

public static final int PARTIAL_WAKE_LOCK

public static final int SCREEN_LIGHT
----------------METHODS----------------

private void <init>()

public static native void acquireWakeLock(
int
java.lang.String)

public static native void reboot(
java.lang.String)

public static native void releaseWakeLock(
java.lang.String)

public static native int setLastUserActivityTimeout(
long)

public static native int setLightBrightness(
int
int)

public static native int setScreenState(
boolean)
@java.lang.Deprecated
public static native void shutdown()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/os/PowerManager$WakeLock; )
 class android.os.PowerManager$WakeLock$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.os.PowerManager$WakeLock this$1
----------------METHODS----------------

 void <init>(
android.os.PowerManager$WakeLock)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1 name =WakeLock )
@dalvik.annotation.EnclosingClass (value =Landroid/os/PowerManager; )
public class android.os.PowerManager$WakeLock extends java.lang.Object

----------------FIELDS----------------

static final int RELEASE_WAKE_LOCK

 int mCount

 int mFlags

 boolean mHeld

 boolean mRefCounted

 java.lang.Runnable mReleaser

 java.lang.String mTag

 android.os.IBinder mToken

final android.os.PowerManager this$0
----------------METHODS----------------

 void <init>(
android.os.PowerManager
int
java.lang.String)

public void acquire()

public void acquire(
long)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public boolean isHeld()

public void release()

public void setReferenceCounted(
boolean)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/PowerManager$WakeLock; )
public class android.os.PowerManager extends java.lang.Object

----------------FIELDS----------------

public static final int ACQUIRE_CAUSES_WAKEUP

public static final int FULL_WAKE_LOCK

private static final int LOCK_MASK

public static final int ON_AFTER_RELEASE

public static final int PARTIAL_WAKE_LOCK

public static final int SCREEN_BRIGHT_WAKE_LOCK

public static final int SCREEN_DIM_WAKE_LOCK

private static final java.lang.String TAG

private static final int WAKE_BIT_CPU_STRONG

private static final int WAKE_BIT_CPU_WEAK

private static final int WAKE_BIT_KEYBOARD_BRIGHT

private static final int WAKE_BIT_SCREEN_BRIGHT

private static final int WAKE_BIT_SCREEN_DIM

 android.os.Handler mHandler

 android.os.IPowerManager mService
----------------METHODS----------------

private void <init>()

public void <init>(
android.os.IPowerManager
android.os.Handler)

public void goToSleep(
long)

public android.os.PowerManager$WakeLock newWakeLock(
int
java.lang.String)

public void userActivity(
long
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.os.Process$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final java.lang.String val$processClass
----------------METHODS----------------

 void <init>(
java.lang.String)

public void run()

________________CLASS________________


public class android.os.Process extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ANDROID_SHARED_MEDIA

public static final int BLUETOOTH_GID

public static final int FIRST_APPLICATION_UID

public static final java.lang.String GOOGLE_SHARED_APP_CONTENT

public static final int LAST_APPLICATION_UID

private static final java.lang.String LOG_TAG

public static final int PHONE_UID

public static final int PROC_COMBINE

public static final int PROC_OUT_FLOAT

public static final int PROC_OUT_LONG

public static final int PROC_OUT_STRING

public static final int PROC_PARENS

public static final int PROC_SPACE_TERM

public static final int PROC_TERM_MASK

public static final int PROC_ZERO_TERM

public static final int SIGNAL_KILL

public static final int SIGNAL_QUIT

public static final int SIGNAL_USR1

public static final int SYSTEM_UID

public static final int THREAD_PRIORITY_AUDIO

public static final int THREAD_PRIORITY_BACKGROUND

public static final int THREAD_PRIORITY_DEFAULT

public static final int THREAD_PRIORITY_DISPLAY

public static final int THREAD_PRIORITY_FOREGROUND

public static final int THREAD_PRIORITY_LESS_FAVORABLE

public static final int THREAD_PRIORITY_LOWEST

public static final int THREAD_PRIORITY_MORE_FAVORABLE

public static final int THREAD_PRIORITY_URGENT_AUDIO

public static final int THREAD_PRIORITY_URGENT_DISPLAY

static final int ZYGOTE_RETRY_MILLIS

private static final java.lang.String ZYGOTE_SOCKET

static boolean sPreviousZygoteOpenFailed

static java.io.DataInputStream sZygoteInputStream

static android.net.LocalSocket sZygoteSocket

static java.io.BufferedWriter sZygoteWriter
----------------METHODS----------------

public void <init>()

static void access$000(
java.lang.String)

public static final native long getElapsedCpuTime()

public static final native int getFreeMemory()

public static final native int getGidForName(
java.lang.String)

public static final native int[] getPids(
java.lang.String
int[])

public static final native long getPss(
int)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public static final native int getThreadPriority(
int)

public static final native int getUidForName(
java.lang.String)

private static void invokeStaticMain(
java.lang.String)

public static final void killProcess(
int)

public static final native int myPid()

public static final native int myTid()
@dalvik.annotation.Throws (value =Landroid/os/ZygoteStartFailedEx; )
private static void openZygoteSocketIfNeeded()

public static final native boolean readProcFile(
java.lang.String
int[]
java.lang.String[]
long[]
float[])

public static final native void readProcLines(
java.lang.String
java.lang.String[]
long[])

public static final native void sendSignal(
int
int)

public static final native void setArgV0(
java.lang.String)

public static final native int setGid(
int)

public static final native boolean setOomAdj(
int
int)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException;Ljava/lang/SecurityException; )
public static final native void setThreadPriority(
int)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException;Ljava/lang/SecurityException; )
public static final native void setThreadPriority(
int
int)

public static final native int setUid(
int)

public static final int start(
java.lang.String
int
int
int[]
boolean
java.lang.String[])

public static final int start(
java.lang.String
java.lang.String
int
int
int[]
boolean
java.lang.String[])
@dalvik.annotation.Throws (value =Landroid/os/ZygoteStartFailedEx; )
private static int startViaZygote(
java.lang.String
java.lang.String
int
int
int[]
boolean
java.lang.String[])

public static final native boolean supportsProcesses()
@dalvik.annotation.Throws (value =Landroid/os/ZygoteStartFailedEx; )
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Ljava/lang/String;>;)I )
private static int zygoteSendArgsAndGetPid(
java.util.ArrayList)

________________CLASS________________


public class android.os.Registrant extends java.lang.Object

----------------FIELDS----------------

 java.lang.ref.WeakReference refH

 java.lang.Object userObj

 int what
----------------METHODS----------------

public void <init>(
android.os.Handler
int
java.lang.Object)

public void clear()

public android.os.Handler getHandler()

 void internalNotifyRegistrant(
java.lang.Object
java.lang.Throwable)

public android.os.Message messageForRegistrant()

public void notifyException(
java.lang.Throwable)

public void notifyRegistrant()

public void notifyRegistrant(
android.os.AsyncResult)

public void notifyResult(
java.lang.Object)

________________CLASS________________


public class android.os.RegistrantList extends java.lang.Object

----------------FIELDS----------------

 java.util.ArrayList registrants
----------------METHODS----------------

public void <init>()

private void internalNotifyRegistrants(
java.lang.Object
java.lang.Throwable)

public void add(
android.os.Handler
int
java.lang.Object)

public void add(
android.os.Registrant)

public void addUnique(
android.os.Handler
int
java.lang.Object)

public java.lang.Object get(
int)

public void notifyException(
java.lang.Throwable)

public void notifyRegistrants()

public void notifyRegistrants(
android.os.AsyncResult)

public void notifyResult(
java.lang.Object)

public void remove(
android.os.Handler)

public void removeCleared()

public int size()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =18 name =Callback )
@dalvik.annotation.EnclosingClass (value =Landroid/os/RemoteCallbackList; )
final class android.os.RemoteCallbackList$Callback extends java.lang.Object implements android.os.IBinder$DeathRecipient

----------------FIELDS----------------
@dalvik.annotation.Signature (value =TE; )
final android.os.IInterface mCallback

final android.os.RemoteCallbackList this$0
----------------METHODS----------------
@dalvik.annotation.Signature (value =(TE;)V )
 void <init>(
android.os.RemoteCallbackList
android.os.IInterface)

public void binderDied()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/RemoteCallbackList$Callback; )
@dalvik.annotation.Signature (value =<E::Landroid/os/IInterface;>Ljava/lang/Object; )
public class android.os.RemoteCallbackList extends java.lang.Object

----------------FIELDS----------------

private android.os.IInterface[] mActiveBroadcast
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/os/IBinder;Landroid/os/RemoteCallbackList<TE;>.Callback;>; )
 java.util.HashMap mCallbacks

private boolean mKilled
----------------METHODS----------------

public void <init>()

public int beginBroadcast()

public void finishBroadcast()
@dalvik.annotation.Signature (value =(I)TE; )
public android.os.IInterface getBroadcastItem(
int)

public void kill()
@dalvik.annotation.Signature (value =(TE;)V )
public void onCallbackDied(
android.os.IInterface)
@dalvik.annotation.Signature (value =(TE;)Z )
public boolean register(
android.os.IInterface)
@dalvik.annotation.Signature (value =(TE;)Z )
public boolean unregister(
android.os.IInterface)

________________CLASS________________


public class android.os.RemoteMailException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public final class android.os.ServiceManager extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Landroid/os/IBinder;>; )
private static java.util.HashMap sCache

private static android.os.IServiceManager sServiceManager
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static void addService(
java.lang.String
android.os.IBinder)

public static android.os.IBinder checkService(
java.lang.String)

private static android.os.IServiceManager getIServiceManager()

public static android.os.IBinder getService(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/util/Map<Ljava/lang/String;Landroid/os/IBinder;>;)V )
public static void initServiceCache(
java.util.Map)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public static java.lang.String[] listServices()

________________CLASS________________


public abstract class android.os.ServiceManagerNative extends android.os.Binder implements android.os.IServiceManager

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static android.os.IServiceManager asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()

public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________


 class android.os.ServiceManagerProxy extends java.lang.Object implements android.os.IServiceManager

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

public void <init>(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void addService(
java.lang.String
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.os.IBinder checkService(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.os.IBinder getService(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String[] listServices()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setPermissionController(
android.os.IPermissionController)

________________CLASS________________


public class android.os.StatFs extends java.lang.Object

----------------FIELDS----------------

private int mNativeContext
----------------METHODS----------------

public void <init>(
java.lang.String)

private native void native_finalize()

private native void native_restat(
java.lang.String)

private native void native_setup(
java.lang.String)

protected void finalize()

public native int getAvailableBlocks()

public native int getBlockCount()

public native int getBlockSize()

public native int getFreeBlocks()

public void restat(
java.lang.String)

________________CLASS________________


public final class android.os.SystemClock extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

public static native long currentThreadTimeMillis()

public static native long elapsedRealtime()

public static native boolean setCurrentTimeMillis(
long)

public static void sleep(
long)

public static native long uptimeMillis()

________________CLASS________________


public class android.os.SystemProperties extends java.lang.Object

----------------FIELDS----------------

public static final int PROP_NAME_MAX

public static final int PROP_VALUE_MAX
----------------METHODS----------------

public void <init>()

public static java.lang.String get(
java.lang.String)

public static java.lang.String get(
java.lang.String
java.lang.String)

public static boolean getBoolean(
java.lang.String
boolean)

public static int getInt(
java.lang.String
int)

public static long getLong(
java.lang.String
long)

private static native java.lang.String native_get(
java.lang.String)

private static native java.lang.String native_get(
java.lang.String
java.lang.String)

private static native void native_set(
java.lang.String
java.lang.String)

public static void set(
java.lang.String
java.lang.String)

________________CLASS________________


public class android.os.SystemService extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static void start(
java.lang.String)

public static void stop(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/os/TokenWatcher; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.os.TokenWatcher$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.os.TokenWatcher this$0
----------------METHODS----------------

 void <init>(
android.os.TokenWatcher)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/os/TokenWatcher; )
@dalvik.annotation.InnerClass (accessFlags =2 name =Death )
 class android.os.TokenWatcher$Death extends java.lang.Object implements android.os.IBinder$DeathRecipient

----------------FIELDS----------------

 java.lang.String tag

final android.os.TokenWatcher this$0

 android.os.IBinder token
----------------METHODS----------------

 void <init>(
android.os.TokenWatcher
android.os.IBinder
java.lang.String)

public void binderDied()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/TokenWatcher$Death; )
public abstract class android.os.TokenWatcher extends java.lang.Object

----------------FIELDS----------------

private volatile boolean mAcquired

private android.os.Handler mHandler

private int mNotificationQueue

private java.lang.Runnable mNotificationTask

private java.lang.String mTag
@dalvik.annotation.Signature (value =Ljava/util/WeakHashMap<Landroid/os/IBinder;Landroid/os/TokenWatcher$Death;>; )
private java.util.WeakHashMap mTokens
----------------METHODS----------------

public void <init>(
android.os.Handler
java.lang.String)

static java.util.WeakHashMap access$000(
android.os.TokenWatcher)

static int access$100(
android.os.TokenWatcher)

static int access$102(
android.os.TokenWatcher
int)

static java.lang.String access$200(
android.os.TokenWatcher)

private void sendNotificationLocked(
boolean)

public void acquire(
android.os.IBinder
java.lang.String)

public abstract void acquired()

public void cleanup(
android.os.IBinder
boolean)

public void dump()

public boolean isAcquired()

public void release(
android.os.IBinder)

public abstract void released()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/os/UEventObserver; )
@dalvik.annotation.InnerClass (accessFlags =9 name =UEvent )
public class android.os.UEventObserver$UEvent extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>; )
public java.util.HashMap mMap
----------------METHODS----------------

public void <init>(
java.lang.String)

public java.lang.String get(
java.lang.String)

public java.lang.String get(
java.lang.String
java.lang.String)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =UEventThread )
@dalvik.annotation.EnclosingClass (value =Landroid/os/UEventObserver; )
 class android.os.UEventObserver$UEventThread extends java.lang.Thread

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/lang/Object;>; )
private java.util.ArrayList mObservers
----------------METHODS----------------

 void <init>()

public void addObserver(
java.lang.String
android.os.UEventObserver)

public void removeObserver(
android.os.UEventObserver)

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/os/UEventObserver$UEventThread;Landroid/os/UEventObserver$UEvent; )
public abstract class android.os.UEventObserver extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG

private static android.os.UEventObserver$UEventThread sThread

private static boolean sThreadStarted
----------------METHODS----------------

static void <clinit>()

public void <init>()

static void access$000()

static int access$100(
byte[])

private static final void ensureThreadStarted()

private static native void native_setup()

private static native int next_event(
byte[])
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public abstract void onUEvent(
android.os.UEventObserver$UEvent)

public final void startObserving(
java.lang.String)

public final void stopObserving()

________________CLASS________________


public class android.os.Vibrator extends java.lang.Object

----------------FIELDS----------------

 android.os.IHardwareService mService
----------------METHODS----------------

public void <init>()

public void cancel()

public void vibrate(
long)

public void vibrate(
long[]
int)

________________CLASS________________


 class android.os.ZygoteStartFailedEx extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

 void <init>(
java.lang.String)

 void <init>(
java.lang.Throwable)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/pim/ContactsAsyncHelper; )
 class android.pim.ContactsAsyncHelper$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/pim/ContactsAsyncHelper; )
@dalvik.annotation.InnerClass (accessFlags =9 name =ImageTracker )
public class android.pim.ContactsAsyncHelper$ImageTracker extends java.lang.Object

----------------FIELDS----------------

public static final int DISPLAY_DEFAULT

public static final int DISPLAY_IMAGE

public static final int DISPLAY_UNDEFINED

private int displayMode

private com.android.internal.telephony.CallerInfo mCurrentCallerInfo
----------------METHODS----------------

public void <init>()

public int getPhotoState()

public android.net.Uri getPhotoUri()

public boolean isDifferentImageRequest(
com.android.internal.telephony.CallerInfo)

public boolean isDifferentImageRequest(
com.android.internal.telephony.Connection)

public void setPhotoRequest(
com.android.internal.telephony.CallerInfo)

public void setPhotoState(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnImageLoadCompleteListener )
@dalvik.annotation.EnclosingClass (value =Landroid/pim/ContactsAsyncHelper; )
public abstract interface class android.pim.ContactsAsyncHelper$OnImageLoadCompleteListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onImageLoadComplete(
int
java.lang.Object
android.widget.ImageView
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/pim/ContactsAsyncHelper; )
@dalvik.annotation.InnerClass (accessFlags =26 name =WorkerArgs )
final class android.pim.ContactsAsyncHelper$WorkerArgs extends java.lang.Object

----------------FIELDS----------------

public android.content.Context context

public java.lang.Object cookie

public int defaultResource

public com.android.internal.telephony.CallerInfo info

public android.pim.ContactsAsyncHelper$OnImageLoadCompleteListener listener

public java.lang.Object result

public android.net.Uri uri

public android.widget.ImageView view
----------------METHODS----------------

private void <init>()

 void <init>(
android.pim.ContactsAsyncHelper$1)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/pim/ContactsAsyncHelper; )
@dalvik.annotation.InnerClass (accessFlags =2 name =WorkerHandler )
 class android.pim.ContactsAsyncHelper$WorkerHandler extends android.os.Handler

----------------FIELDS----------------

final android.pim.ContactsAsyncHelper this$0
----------------METHODS----------------

public void <init>(
android.pim.ContactsAsyncHelper
android.os.Looper)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/pim/ContactsAsyncHelper$1;Landroid/pim/ContactsAsyncHelper$WorkerHandler;Landroid/pim/ContactsAsyncHelper$ImageTracker;Landroid/pim/ContactsAsyncHelper$WorkerArgs;Landroid/pim/ContactsAsyncHelper$OnImageLoadCompleteListener; )
public class android.pim.ContactsAsyncHelper extends android.os.Handler

----------------FIELDS----------------

private static final boolean DBG

private static final int DEFAULT_TOKEN

private static final int EVENT_LOAD_IMAGE

private static final java.lang.String LOG_TAG

private static android.pim.ContactsAsyncHelper sInstance

private static android.os.Handler sThreadHandler
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static final void updateImageViewWithContactPhotoAsync(
android.content.Context
android.widget.ImageView
android.net.Uri
int)

public static final void updateImageViewWithContactPhotoAsync(
com.android.internal.telephony.CallerInfo
int
android.pim.ContactsAsyncHelper$OnImageLoadCompleteListener
java.lang.Object
android.content.Context
android.widget.ImageView
android.net.Uri
int)

public static final void updateImageViewWithContactPhotoAsync(
com.android.internal.telephony.CallerInfo
android.content.Context
android.widget.ImageView
android.net.Uri
int)

public void handleMessage(
android.os.Message)

________________CLASS________________


public class android.pim.DateException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________


public class android.pim.DateFormat extends java.lang.Object

----------------FIELDS----------------

public static final char AM_PM

public static final char CAPITAL_AM_PM

public static final char DATE

public static final char DAY

public static final char HOUR

public static final char HOUR_OF_DAY

public static final char MINUTE

public static final char MONTH

public static final char QUOTE

public static final char SECONDS

public static final char TIME_ZONE

public static final char YEAR
----------------METHODS----------------

public void <init>()

private static final int appendQuotedText(
android.text.SpannableStringBuilder
int
int)

public static final java.lang.CharSequence format(
java.lang.CharSequence
long)

public static final java.lang.CharSequence format(
java.lang.CharSequence
java.util.Calendar)

public static final java.lang.CharSequence format(
java.lang.CharSequence
java.util.Date)

private static final java.lang.String formatZoneOffset(
int
int)

public static final java.text.DateFormat getDateFormat(
android.content.Context)

public static final char[] getDateFormatOrder(
android.content.Context)

private static java.lang.String getDateFormatString(
android.content.Context)

public static final java.text.DateFormat getLongDateFormat(
android.content.Context)

private static final java.lang.String getMonthString(
java.util.Calendar
int)

public static final java.text.DateFormat getTimeFormat(
android.content.Context)

private static final java.lang.String getTimeZoneString(
java.util.Calendar
int)

private static final java.lang.String getYearString(
java.util.Calendar
int)

public static boolean is24HourFormat(
android.content.Context)

private static final java.lang.String zeroPad(
int
int)

________________CLASS________________


public class android.pim.DateUtils extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ABBREV_MONTH_FORMAT

public static final java.lang.String ABBREV_WEEKDAY_FORMAT

public static final long DAY_IN_MILLIS

private static final java.lang.String FAST_FORMAT_HMMSS

private static final java.lang.String FAST_FORMAT_MMSS

public static final int FORMAT_24HOUR

public static final int FORMAT_ABBREV_ALL

public static final int FORMAT_ABBREV_MONTH

public static final int FORMAT_ABBREV_TIME

public static final int FORMAT_ABBREV_WEEKDAY

public static final int FORMAT_CAP_AMPM

public static final int FORMAT_CAP_MIDNIGHT

public static final int FORMAT_CAP_NOON

public static final int FORMAT_CAP_NOON_MIDNIGHT

public static final int FORMAT_NO_MIDNIGHT

public static final int FORMAT_NO_MONTH_DAY

public static final int FORMAT_NO_NOON

public static final int FORMAT_NO_NOON_MIDNIGHT

public static final int FORMAT_NO_YEAR

public static final int FORMAT_NUMERIC_DATE

public static final int FORMAT_SHOW_DATE

public static final int FORMAT_SHOW_TIME

public static final int FORMAT_SHOW_WEEKDAY

public static final int FORMAT_SHOW_YEAR

public static final int FORMAT_UTC

public static final java.lang.String HOUR_AMPM

public static final java.lang.String HOUR_CAP_AMPM

public static final long HOUR_IN_MILLIS

public static final java.lang.String HOUR_MINUTE_24

public static final java.lang.String HOUR_MINUTE_AMPM

public static final java.lang.String HOUR_MINUTE_CAP_AMPM

public static final int LENGTH_LONG

public static final int LENGTH_MEDIUM

public static final int LENGTH_SHORT

public static final int LENGTH_SHORTER

public static final int LENGTH_SHORTEST

public static final long MINUTE_IN_MILLIS

public static final java.lang.String MONTH_DAY_FORMAT

public static final java.lang.String MONTH_FORMAT

public static final java.lang.String NUMERIC_MONTH_FORMAT

public static final long SECOND_IN_MILLIS

private static final java.lang.String TAG

private static final char TIME_PADDING

private static final char TIME_SEPARATOR

public static final java.lang.String WEEKDAY_FORMAT

public static final long WEEK_IN_MILLIS

public static final java.lang.String YEAR_FORMAT

public static final java.lang.String YEAR_FORMAT_TWO_DIGITS

public static final long YEAR_IN_MILLIS

private static final int[] sAmPm

private static final int[] sDaysLong

private static final int[] sDaysMedium

private static final int[] sDaysShort

private static final int[] sDaysShorter

private static final int[] sDaysShortest

private static java.lang.String sElapsedFormatHMMSS

private static java.lang.String sElapsedFormatMMSS

private static int sFirstDay

private static android.content.res.Configuration sLastConfig

private static final java.lang.Object sLock

private static java.lang.String sMonthDayFormat

private static final int[] sMonthsLong

private static final int[] sMonthsMedium

private static final int[] sMonthsShortest

private static android.pim.Time sNowTime

private static java.lang.String sStatusDateFormat

private static java.lang.String sStatusTimeFormat

private static android.pim.Time sThenTime

public static final int[] sameMonthTable

public static final int[] sameYearTable
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static void assign(
java.util.Calendar
java.util.Calendar)
@dalvik.annotation.Throws (value =Landroid/pim/DateException; )
private static final int check(
int
int
int)
@dalvik.annotation.Throws (value =Landroid/pim/DateException; )
private static final int ctoi(
java.lang.String
int)

public static final java.lang.CharSequence dateString(
long)

public static java.lang.String formatDateRange(
long
long
int)

public static java.lang.String formatElapsedTime(
long)

private static java.lang.String formatElapsedTime(
java.lang.String
long
long)

private static java.lang.String formatElapsedTime(
java.lang.String
long
long
long)

public static final java.lang.CharSequence formatSameDayTime(
long
long
int
int)

public static java.lang.String getAMPMString(
int)

public static java.lang.String getDayOfWeekString(
int
int)

public static java.lang.String getMonthString(
int
int)

private static java.lang.String getPrepositionDate(
android.content.res.Resources
android.pim.Time
int
java.lang.String
boolean)

private static final java.lang.String getRelativeDayString(
android.content.res.Resources
long
long)

public static java.lang.CharSequence getRelativeTimeSpanString(
long)

public static java.lang.CharSequence getRelativeTimeSpanString(
long
long
long)

public static java.lang.CharSequence getRelativeTimeSpanString(
long
long
long
java.lang.String
java.lang.String)

public static java.lang.CharSequence getRelativeTimeSpanString(
android.content.Context
long)

public static java.lang.CharSequence getRelativeTimeSpanString(
android.content.Context
long
boolean)

private static void initFormatStrings()

public static boolean isToday(
long)

public static boolean isUTC(
java.lang.String)

public static java.util.Calendar newCalendar(
boolean)
@dalvik.annotation.Throws (value =Landroid/pim/DateException; )
public static void parseDateTime(
java.lang.String
java.lang.String
java.util.Calendar)
@dalvik.annotation.Throws (value =Landroid/pim/DateException; )
public static boolean parseDateTime(
java.lang.String
java.util.Calendar)

private static final java.lang.String pluralizedSpan(
long
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

public static final java.lang.CharSequence timeString(
long)

private static char toDigitChar(
long)

public static java.lang.String writeDateTime(
java.util.Calendar)

public static java.lang.String writeDateTime(
java.util.Calendar
java.lang.StringBuilder)

public static java.lang.String writeDateTime(
java.util.Calendar
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =InvalidFormatException )
@dalvik.annotation.EnclosingClass (value =Landroid/pim/EventRecurrence; )
public class android.pim.EventRecurrence$InvalidFormatException extends java.lang.RuntimeException

----------------FIELDS----------------
----------------METHODS----------------

 void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/pim/EventRecurrence$InvalidFormatException; )
public class android.pim.EventRecurrence extends java.lang.Object

----------------FIELDS----------------

public static final int DAILY

public static final int FR

public static final int HOURLY

public static final int MINUTELY

public static final int MO

public static final int MONTHLY

public static final int SA

public static final int SECONDLY

public static final int SU

public static final int TH

public static final int TU

public static final int WE

public static final int WEEKLY

public static final int YEARLY

public int[] byday

public int bydayCount

public int[] bydayNum

public int[] byhour

public int byhourCount

public int[] byminute

public int byminuteCount

public int[] bymonth

public int bymonthCount

public int[] bymonthday

public int bymonthdayCount

public int[] bysecond

public int bysecondCount

public int[] bysetpos

public int bysetposCount

public int[] byweekno

public int byweeknoCount

public int[] byyearday

public int byyeardayCount

public int count

public int freq

public int interval

public android.pim.Time startDate

public java.lang.String until

public int wkst
----------------METHODS----------------

public void <init>()

private void appendByDay(
java.lang.StringBuilder
int)

private static void appendNumbers(
java.lang.StringBuilder
java.lang.String
int
int[])

public static int calendarDay2Day(
int)

public static int day2CalendarDay(
int)

private static java.lang.String day2String(
int)

public static int day2TimeDay(
int)

private java.lang.String dayToString(
android.content.res.Resources
int)

public static int timeDay2Day(
int)

public java.lang.String getRepeatString()

public native void parse(
java.lang.String)

public boolean repeatsMonthlyOnDayCount()

public boolean repeatsOnEveryWeekDay()

public void setStartDate(
android.pim.Time)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/pim/ICalendar; )
 class android.pim.ICalendar$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Component )
@dalvik.annotation.EnclosingClass (value =Landroid/pim/ICalendar; )
public class android.pim.ICalendar$Component extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String BEGIN

private static final java.lang.String END

private static final java.lang.String NEWLINE

public static final java.lang.String VALARM

public static final java.lang.String VCALENDAR

public static final java.lang.String VEVENT

public static final java.lang.String VFREEBUSY

public static final java.lang.String VJOURNAL

public static final java.lang.String VTIMEZONE

public static final java.lang.String VTODO
@dalvik.annotation.Signature (value =Ljava/util/LinkedList<Landroid/pim/ICalendar$Component;>; )
private java.util.LinkedList mChildren

private final java.lang.String mName

private final android.pim.ICalendar$Component mParent
@dalvik.annotation.Signature (value =Ljava/util/LinkedHashMap<Ljava/lang/String;Ljava/util/ArrayList<Landroid/pim/ICalendar$Property;>;>; )
private final java.util.LinkedHashMap mPropsMap
----------------METHODS----------------

public void <init>(
java.lang.String
android.pim.ICalendar$Component)

public void addChild(
android.pim.ICalendar$Component)

public void addProperty(
android.pim.ICalendar$Property)
@dalvik.annotation.Signature (value =()Ljava/util/List<Landroid/pim/ICalendar$Component;>; )
public java.util.List getComponents()

public android.pim.ICalendar$Property getFirstProperty(
java.lang.String)

public java.lang.String getName()
@dalvik.annotation.Signature (value =()Ljava/util/LinkedList<Landroid/pim/ICalendar$Component;>; )
protected java.util.LinkedList getOrCreateChildren()

public android.pim.ICalendar$Component getParent()
@dalvik.annotation.Signature (value =(Ljava/lang/String;)Ljava/util/List<Landroid/pim/ICalendar$Property;>; )
public java.util.List getProperties(
java.lang.String)
@dalvik.annotation.Signature (value =()Ljava/util/Set<Ljava/lang/String;>; )
public java.util.Set getPropertyNames()

public java.lang.String toString()

public void toString(
java.lang.StringBuilder)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =FormatException )
@dalvik.annotation.EnclosingClass (value =Landroid/pim/ICalendar; )
public class android.pim.ICalendar$FormatException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/pim/ICalendar; )
@dalvik.annotation.InnerClass (accessFlags =9 name =Parameter )
public class android.pim.ICalendar$Parameter extends java.lang.Object

----------------FIELDS----------------

public java.lang.String name

public java.lang.String value
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String
java.lang.String)

public java.lang.String toString()

public void toString(
java.lang.StringBuilder)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/pim/ICalendar; )
@dalvik.annotation.InnerClass (accessFlags =26 name =ParserState )
final class android.pim.ICalendar$ParserState extends java.lang.Object

----------------FIELDS----------------

public int index

public java.lang.String line
----------------METHODS----------------

private void <init>()

 void <init>(
android.pim.ICalendar$1)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/pim/ICalendar; )
@dalvik.annotation.InnerClass (accessFlags =9 name =Property )
public class android.pim.ICalendar$Property extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String DTEND

public static final java.lang.String DTSTART

public static final java.lang.String DURATION

public static final java.lang.String EXDATE

public static final java.lang.String EXRULE

public static final java.lang.String RDATE

public static final java.lang.String RRULE

private final java.lang.String mName
@dalvik.annotation.Signature (value =Ljava/util/LinkedHashMap<Ljava/lang/String;Ljava/util/ArrayList<Landroid/pim/ICalendar$Parameter;>;>; )
private java.util.LinkedHashMap mParamsMap

private java.lang.String mValue
----------------METHODS----------------

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.String)

public void addParameter(
android.pim.ICalendar$Parameter)

public android.pim.ICalendar$Parameter getFirstParameter(
java.lang.String)

public java.lang.String getName()
@dalvik.annotation.Signature (value =()Ljava/util/Set<Ljava/lang/String;>; )
public java.util.Set getParameterNames()
@dalvik.annotation.Signature (value =(Ljava/lang/String;)Ljava/util/List<Landroid/pim/ICalendar$Parameter;>; )
public java.util.List getParameters(
java.lang.String)

public java.lang.String getValue()

public void setValue(
java.lang.String)

public java.lang.String toString()

public void toString(
java.lang.StringBuilder)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/pim/ICalendar$1;Landroid/pim/ICalendar$ParserState;Landroid/pim/ICalendar$Parameter;Landroid/pim/ICalendar$Property;Landroid/pim/ICalendar$Component;Landroid/pim/ICalendar$FormatException; )
public class android.pim.ICalendar extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG
----------------METHODS----------------

private void <init>()
@dalvik.annotation.Throws (value =Landroid/pim/ICalendar$FormatException; )
private static android.pim.ICalendar$Parameter extractParameter(
android.pim.ICalendar$ParserState)
@dalvik.annotation.Throws (value =Landroid/pim/ICalendar$FormatException; )
private static java.lang.String extractValue(
android.pim.ICalendar$ParserState)

private static java.lang.String normalizeText(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/pim/ICalendar$FormatException; )
public static android.pim.ICalendar$Component parseCalendar(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/pim/ICalendar$FormatException; )
public static android.pim.ICalendar$Component parseComponent(
android.pim.ICalendar$Component
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/pim/ICalendar$FormatException; )
public static android.pim.ICalendar$Component parseComponent(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/pim/ICalendar$FormatException; )
private static android.pim.ICalendar$Component parseComponentImpl(
android.pim.ICalendar$Component
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/pim/ICalendar$FormatException; )
public static android.pim.ICalendar$Component parseEvent(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/pim/ICalendar$FormatException; )
private static android.pim.ICalendar$Component parseLine(
java.lang.String
android.pim.ICalendar$ParserState
android.pim.ICalendar$Component)

________________CLASS________________


public class android.pim.RecurrenceSet extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String RULE_SEPARATOR

private static final java.lang.String TAG

public long[] exdates

public android.pim.EventRecurrence[] exrules

public long[] rdates

public android.pim.EventRecurrence[] rrules
----------------METHODS----------------

public void <init>(
android.content.ContentValues)

public void <init>(
android.database.Cursor)

public void <init>(
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

private static void addPropertiesForRuleStr(
android.pim.ICalendar$Component
java.lang.String
java.lang.String)

private static void addPropertyForDateStr(
android.pim.ICalendar$Component
java.lang.String
java.lang.String)

private static java.lang.String computeDuration(
android.pim.Time
android.pim.ICalendar$Component)

private static java.lang.String extractDates(
android.pim.ICalendar$Property)

private static java.lang.String flattenProperties(
android.pim.ICalendar$Component
java.lang.String)

private void init(
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

public static long[] parseRecurrenceDates(
java.lang.String)

public static boolean populateComponent(
android.database.Cursor
android.pim.ICalendar$Component)

public static boolean populateContentValues(
android.pim.ICalendar$Component
android.content.ContentValues)

public boolean hasRecurrence()

________________CLASS________________


public class android.pim.Time extends java.lang.Object

----------------FIELDS----------------

private static final int[] DAYS_PER_MONTH

public static final int EPOCH_JULIAN_DAY

public static final int FRIDAY

public static final int HOUR

public static final int MINUTE

public static final int MONDAY

public static final int MONTH

public static final int MONTH_DAY

public static final int SATURDAY

public static final int SECOND

public static final int SUNDAY

public static final int THURSDAY

public static final java.lang.String TIMEZONE_UTC

public static final int TUESDAY

public static final int WEDNESDAY

public static final int WEEK_DAY

public static final int WEEK_NUM

public static final int YEAR

public static final int YEAR_DAY

private static final int[] sThursdayOffset

public boolean allDay

public long gmtoff

public int hour

public int isDst

public int minute

public int month

public int monthDay

public int second

public java.lang.String timezone

public int weekDay

public int year

public int yearDay
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
android.pim.Time)

public void <init>(
java.lang.String)

public static native int compare(
android.pim.Time
android.pim.Time)

public static java.lang.String getCurrentTimezone()

public static int getJulianDay(
long
long)

public static boolean isEpoch(
android.pim.Time)

private native boolean nativeParse2445(
java.lang.String)

private native boolean nativeParse3339(
java.lang.String)

public boolean after(
android.pim.Time)

public boolean before(
android.pim.Time)

public void clear(
java.lang.String)

public native java.lang.String format(
java.lang.String)

public native java.lang.String format2445()

public java.lang.String format3339(
boolean)

public int getActualMaximum(
int)

public int getWeekNumber()

public native long normalize(
boolean)

public native void parse(
java.lang.String)

public boolean parse2445(
java.lang.String)

public boolean parse3339(
java.lang.String)

public void set(
int
int
int)

public void set(
int
int
int
int
int
int)

public native void set(
long)

public void set(
android.pim.Time)

public long setJulianDay(
int)

public native void setToNow()

public native void switchTimezone(
java.lang.String)

public native long toMillis(
boolean)

public native java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/CheckBoxPreference$SavedState; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/preference/CheckBoxPreference$SavedState;>; )
final class android.preference.CheckBoxPreference$SavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.preference.CheckBoxPreference$SavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.preference.CheckBoxPreference$SavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public abstract class android.view.AbsSavedState extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/view/AbsSavedState;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final android.view.AbsSavedState EMPTY_STATE

private final android.os.Parcelable mSuperState
----------------METHODS----------------

static void <clinit>()

private void <init>()

protected void <init>(
android.os.Parcel)

protected void <init>(
android.os.Parcelable)

 void <init>(
android.view.AbsSavedState$1)

public int describeContents()

public final android.os.Parcelable getSuperState()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =BaseSavedState )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/Preference; )
public class android.preference.Preference$BaseSavedState extends android.view.AbsSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/preference/Preference$BaseSavedState;>; )
public static final android.os.Parcelable$Creator CREATOR
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.os.Parcel)

public void <init>(
android.os.Parcelable)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =SavedState )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/CheckBoxPreference; )
 class android.preference.CheckBoxPreference$SavedState extends android.preference.Preference$BaseSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/preference/CheckBoxPreference$SavedState;>; )
public static final android.os.Parcelable$Creator CREATOR

 boolean checked
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.os.Parcel)

public void <init>(
android.os.Parcelable)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


abstract interface class android.preference.OnDependencyChangeListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onDependencyChanged(
android.preference.Preference
boolean)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Ljava/lang/Comparable<Landroid/preference/Preference;>;Landroid/preference/OnDependencyChangeListener; )
@dalvik.annotation.MemberClasses (value =Landroid/preference/Preference$BaseSavedState;Landroid/preference/Preference$OnPreferenceChangeInternalListener;Landroid/preference/Preference$OnPreferenceClickListener;Landroid/preference/Preference$OnPreferenceChangeListener; )
public class android.preference.Preference extends java.lang.Object implements java.lang.Comparable, android.preference.OnDependencyChangeListener

----------------FIELDS----------------

public static final int DEFAULT_ORDER

private boolean mBaseMethodCalled

private android.content.Context mContext

private java.lang.Object mDefaultValue

private java.lang.String mDependencyKey
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/preference/Preference;>; )
private java.util.List mDependents

private boolean mEnabled

private boolean mHasSpecifiedLayout

private long mId

private android.content.Intent mIntent

private java.lang.String mKey

private int mLayoutResId

private android.preference.Preference$OnPreferenceChangeInternalListener mListener

private android.preference.Preference$OnPreferenceChangeListener mOnChangeListener

private android.preference.Preference$OnPreferenceClickListener mOnClickListener

private int mOrder

private boolean mPersistent

private android.preference.PreferenceManager mPreferenceManager

private boolean mRequiresKey

private boolean mSelectable

private boolean mShouldDisableView

private java.lang.CharSequence mSummary

private java.lang.CharSequence mTitle

private int mWidgetLayoutResId
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private void dispatchSetInitialValue()

private void registerDependency()

private void registerDependent(
android.preference.Preference)

private void setEnabledStateOnViews(
android.view.View
boolean)

private void tryCommit(
android.content.SharedPreferences$Editor)

private void unregisterDependency()

private void unregisterDependent(
android.preference.Preference)

protected boolean callChangeListener(
java.lang.Object)

public int compareTo(
android.preference.Preference)

public volatile int compareTo(
java.lang.Object)

 void dispatchRestoreInstanceState(
android.os.Bundle)

 void dispatchSaveInstanceState(
android.os.Bundle)

protected android.preference.Preference findPreferenceInHierarchy(
java.lang.String)

public android.content.Context getContext()

public java.lang.String getDependency()

public android.content.SharedPreferences$Editor getEditor()

 java.lang.StringBuilder getFilterableStringBuilder()

 long getId()

public android.content.Intent getIntent()

public java.lang.String getKey()

public int getLayoutResource()

public android.preference.Preference$OnPreferenceChangeListener getOnPreferenceChangeListener()

public android.preference.Preference$OnPreferenceClickListener getOnPreferenceClickListener()

public int getOrder()

protected boolean getPersistedBoolean(
boolean)

protected float getPersistedFloat(
float)

protected int getPersistedInt(
int)

protected long getPersistedLong(
long)

protected java.lang.String getPersistedString(
java.lang.String)

public android.preference.PreferenceManager getPreferenceManager()

public android.content.SharedPreferences getSharedPreferences()

public boolean getShouldDisableView()

public java.lang.CharSequence getSummary()

public java.lang.CharSequence getTitle()

public android.view.View getView(
android.view.View
android.view.ViewGroup)

public int getWidgetLayoutResource()

public boolean hasKey()

 boolean hasSpecifiedLayout()

public boolean isEnabled()

public boolean isPersistent()

public boolean isSelectable()

protected void notifyChanged()

public void notifyDependencyChange(
boolean)

protected void notifyHierarchyChanged()

protected void onAttachedToActivity()

protected void onAttachedToHierarchy(
android.preference.PreferenceManager)

protected void onBindView(
android.view.View)

protected void onClick()

protected android.view.View onCreateView(
android.view.ViewGroup)

public void onDependencyChanged(
android.preference.Preference
boolean)

protected java.lang.Object onGetDefaultValue(
android.content.res.TypedArray
int)

protected void onPrepareForRemoval()

protected void onRestoreInstanceState(
android.os.Parcelable)

protected android.os.Parcelable onSaveInstanceState()

protected void onSetInitialValue(
boolean
java.lang.Object)

 void performClick(
android.preference.PreferenceScreen)

protected boolean persistBoolean(
boolean)

protected boolean persistFloat(
float)

protected boolean persistInt(
int)

protected boolean persistLong(
long)

protected boolean persistString(
java.lang.String)

 void requireKey()

public void restoreHierarchyState(
android.os.Bundle)

public void saveHierarchyState(
android.os.Bundle)

public void setDefaultValue(
java.lang.Object)

public void setDependency(
java.lang.String)

public void setEnabled(
boolean)

public void setIntent(
android.content.Intent)

public void setKey(
java.lang.String)

public void setLayoutResource(
int)

final void setOnPreferenceChangeInternalListener(
android.preference.Preference$OnPreferenceChangeInternalListener)

public void setOnPreferenceChangeListener(
android.preference.Preference$OnPreferenceChangeListener)

public void setOnPreferenceClickListener(
android.preference.Preference$OnPreferenceClickListener)

public void setOrder(
int)

public void setPersistent(
boolean)

public void setSelectable(
boolean)

public void setShouldDisableView(
boolean)

public void setSummary(
int)

public void setSummary(
java.lang.CharSequence)

public void setTitle(
int)

public void setTitle(
java.lang.CharSequence)

public void setWidgetLayoutResource(
int)

public boolean shouldCommit()

public boolean shouldDisableDependents()

protected boolean shouldPersist()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/preference/CheckBoxPreference$SavedState; )
public class android.preference.CheckBoxPreference extends android.preference.Preference

----------------FIELDS----------------

private boolean mChecked

private boolean mDisableDependentsState

private java.lang.CharSequence mSummaryOff

private java.lang.CharSequence mSummaryOn
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

public boolean getDisableDependentsState()

public java.lang.CharSequence getSummaryOff()

public java.lang.CharSequence getSummaryOn()

public boolean isChecked()

protected void onBindView(
android.view.View)

protected void onClick()

protected java.lang.Object onGetDefaultValue(
android.content.res.TypedArray
int)

protected void onRestoreInstanceState(
android.os.Parcelable)

protected android.os.Parcelable onSaveInstanceState()

protected void onSetInitialValue(
boolean
java.lang.Object)

public void setChecked(
boolean)

public void setDisableDependentsState(
boolean)

public void setSummaryOff(
int)

public void setSummaryOff(
java.lang.CharSequence)

public void setSummaryOn(
int)

public void setSummaryOn(
java.lang.CharSequence)

public boolean shouldDisableDependents()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/preference/DialogPreference$SavedState;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/DialogPreference$SavedState; )
final class android.preference.DialogPreference$SavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.preference.DialogPreference$SavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.preference.DialogPreference$SavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =SavedState )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/DialogPreference; )
 class android.preference.DialogPreference$SavedState extends android.preference.Preference$BaseSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/preference/DialogPreference$SavedState;>; )
public static final android.os.Parcelable$Creator CREATOR

 android.os.Bundle dialogBundle

 boolean isDialogShowing
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.os.Parcel)

public void <init>(
android.os.Parcelable)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnActivityDestroyListener )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/PreferenceManager; )
public abstract interface class android.preference.PreferenceManager$OnActivityDestroyListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onActivityDestroy()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/preference/DialogPreference$SavedState; )
public abstract class android.preference.DialogPreference extends android.preference.Preference implements android.content.DialogInterface$OnClickListener, android.content.DialogInterface$OnDismissListener, android.preference.PreferenceManager$OnActivityDestroyListener

----------------FIELDS----------------

private android.app.AlertDialog$Builder mBuilder

private android.app.Dialog mDialog

private android.graphics.drawable.Drawable mDialogIcon

private int mDialogLayoutResId

private java.lang.CharSequence mDialogMessage

private java.lang.CharSequence mDialogTitle

private java.lang.CharSequence mNegativeButtonText

private java.lang.CharSequence mPositiveButtonText

private int mWhichButtonClicked
----------------METHODS----------------

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

public android.graphics.drawable.Drawable getDialogIcon()

public int getDialogLayoutResource()

public java.lang.CharSequence getDialogMessage()

public java.lang.CharSequence getDialogTitle()

public java.lang.CharSequence getNegativeButtonText()

public java.lang.CharSequence getPositiveButtonText()

public void onActivityDestroy()

protected void onBindDialogView(
android.view.View)

protected void onClick()

public void onClick(
android.content.DialogInterface
int)

protected android.view.View onCreateDialogView()

protected void onDialogClosed(
boolean)

public void onDismiss(
android.content.DialogInterface)

protected void onPrepareDialogBuilder(
android.app.AlertDialog$Builder)

protected void onRestoreInstanceState(
android.os.Parcelable)

protected android.os.Parcelable onSaveInstanceState()

public void setDialogIcon(
int)

public void setDialogIcon(
android.graphics.drawable.Drawable)

public void setDialogLayoutResource(
int)

public void setDialogMessage(
int)

public void setDialogMessage(
java.lang.CharSequence)

public void setDialogTitle(
int)

public void setDialogTitle(
java.lang.CharSequence)

public void setNegativeButtonText(
int)

public void setNegativeButtonText(
java.lang.CharSequence)

public void setPositiveButtonText(
int)

public void setPositiveButtonText(
java.lang.CharSequence)

protected void showDialog(
android.os.Bundle)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/preference/EditTextPreference$SavedState; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/preference/EditTextPreference$SavedState;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.preference.EditTextPreference$SavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.preference.EditTextPreference$SavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.preference.EditTextPreference$SavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =SavedState )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/EditTextPreference; )
 class android.preference.EditTextPreference$SavedState extends android.preference.Preference$BaseSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/preference/EditTextPreference$SavedState;>; )
public static final android.os.Parcelable$Creator CREATOR

 java.lang.String text
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.os.Parcel)

public void <init>(
android.os.Parcelable)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/preference/EditTextPreference$SavedState; )
public class android.preference.EditTextPreference extends android.preference.DialogPreference

----------------FIELDS----------------

private android.widget.EditText mEditText

private java.lang.String mText
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

public android.widget.EditText getEditText()

public java.lang.String getText()

protected void onAddEditTextToDialogView(
android.view.View
android.widget.EditText)

protected void onBindDialogView(
android.view.View)

protected void onDialogClosed(
boolean)

protected java.lang.Object onGetDefaultValue(
android.content.res.TypedArray
int)

protected void onRestoreInstanceState(
android.os.Parcelable)

protected android.os.Parcelable onSaveInstanceState()

protected void onSetInitialValue(
boolean
java.lang.Object)

public void setText(
java.lang.String)

public boolean shouldDisableDependents()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =Factory )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/GenericInflater; )
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>Ljava/lang/Object; )
public abstract interface class android.preference.GenericInflater$Factory extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)TT; )
public abstract java.lang.Object onCreateItem(
java.lang.String
android.content.Context
android.util.AttributeSet)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =FactoryMerger )
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>Ljava/lang/Object;Landroid/preference/GenericInflater$Factory<TT;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/GenericInflater; )
 class android.preference.GenericInflater$FactoryMerger extends java.lang.Object implements android.preference.GenericInflater$Factory

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/preference/GenericInflater$Factory<TT;>; )
private final android.preference.GenericInflater$Factory mF1
@dalvik.annotation.Signature (value =Landroid/preference/GenericInflater$Factory<TT;>; )
private final android.preference.GenericInflater$Factory mF2
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Landroid/preference/GenericInflater$Factory<TT;>;Landroid/preference/GenericInflater$Factory<TT;>;)V )
 void <init>(
android.preference.GenericInflater$Factory
android.preference.GenericInflater$Factory)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)TT; )
public java.lang.Object onCreateItem(
java.lang.String
android.content.Context
android.util.AttributeSet)

________________CLASS________________

@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>Ljava/lang/Object; )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/GenericInflater; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =Parent )
public abstract interface class android.preference.GenericInflater$Parent extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Signature (value =(TT;)V )
public abstract void addItemFromInflater(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/preference/GenericInflater$FactoryMerger;Landroid/preference/GenericInflater$Factory;Landroid/preference/GenericInflater$Parent; )
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;P::Landroid/preference/GenericInflater$Parent;>Ljava/lang/Object; )
abstract class android.preference.GenericInflater extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.Class[] mConstructorSignature

private static final java.util.HashMap sConstructorMap

private final boolean DEBUG

private final java.lang.Object[] mConstructorArgs

protected final android.content.Context mContext

private java.lang.String mDefaultPackage
@dalvik.annotation.Signature (value =Landroid/preference/GenericInflater$Factory<TT;>; )
private android.preference.GenericInflater$Factory mFactory

private boolean mFactorySet
----------------METHODS----------------

static void <clinit>()

protected void <init>(
android.content.Context)
@dalvik.annotation.Signature (value =(Landroid/preference/GenericInflater<TT;TP;>;Landroid/content/Context;)V )
protected void <init>(
android.preference.GenericInflater
android.content.Context)
@dalvik.annotation.Signature (value =(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;Landroid/util/AttributeSet;)TT; )
private final java.lang.Object createItemFromTag(
org.xmlpull.v1.XmlPullParser
java.lang.String
android.util.AttributeSet)
@dalvik.annotation.Signature (value =(Lorg/xmlpull/v1/XmlPullParser;TT;Landroid/util/AttributeSet;)V )
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private void rInflate(
org.xmlpull.v1.XmlPullParser
java.lang.Object
android.util.AttributeSet)

public abstract android.preference.GenericInflater cloneInContext(
android.content.Context)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)TT; )
@dalvik.annotation.Throws (value =Ljava/lang/ClassNotFoundException;Landroid/view/InflateException; )
public final java.lang.Object createItem(
java.lang.String
java.lang.String
android.util.AttributeSet)

public android.content.Context getContext()

public java.lang.String getDefaultPackage()
@dalvik.annotation.Signature (value =()Landroid/preference/GenericInflater$Factory<TT;>; )
public final android.preference.GenericInflater$Factory getFactory()
@dalvik.annotation.Signature (value =(ITP;)TT; )
public java.lang.Object inflate(
int
android.preference.GenericInflater$Parent)
@dalvik.annotation.Signature (value =(ITP;Z)TT; )
public java.lang.Object inflate(
int
android.preference.GenericInflater$Parent
boolean)
@dalvik.annotation.Signature (value =(Lorg/xmlpull/v1/XmlPullParser;TP;)TT; )
public java.lang.Object inflate(
org.xmlpull.v1.XmlPullParser
android.preference.GenericInflater$Parent)
@dalvik.annotation.Signature (value =(Lorg/xmlpull/v1/XmlPullParser;TP;Z)TT; )
public java.lang.Object inflate(
org.xmlpull.v1.XmlPullParser
android.preference.GenericInflater$Parent
boolean)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException; )
@dalvik.annotation.Signature (value =(Lorg/xmlpull/v1/XmlPullParser;TT;Landroid/util/AttributeSet;)Z )
protected boolean onCreateCustomFromTag(
org.xmlpull.v1.XmlPullParser
java.lang.Object
android.util.AttributeSet)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Landroid/util/AttributeSet;)TT; )
@dalvik.annotation.Throws (value =Ljava/lang/ClassNotFoundException; )
protected java.lang.Object onCreateItem(
java.lang.String
android.util.AttributeSet)
@dalvik.annotation.Signature (value =(TP;ZTP;)TP; )
protected android.preference.GenericInflater$Parent onMergeRoots(
android.preference.GenericInflater$Parent
boolean
android.preference.GenericInflater$Parent)

public void setDefaultPackage(
java.lang.String)
@dalvik.annotation.Signature (value =(Landroid/preference/GenericInflater$Factory<TT;>;)V )
public void setFactory(
android.preference.GenericInflater$Factory)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.preference.ListPreference$1 extends java.lang.Object implements android.content.DialogInterface$OnClickListener

----------------FIELDS----------------

final android.preference.ListPreference this$0
----------------METHODS----------------

 void <init>(
android.preference.ListPreference)

public void onClick(
android.content.DialogInterface
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/preference/ListPreference$SavedState; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/preference/ListPreference$SavedState;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.preference.ListPreference$SavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.preference.ListPreference$SavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.preference.ListPreference$SavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/preference/ListPreference; )
@dalvik.annotation.InnerClass (accessFlags =10 name =SavedState )
 class android.preference.ListPreference$SavedState extends android.preference.Preference$BaseSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/preference/ListPreference$SavedState;>; )
public static final android.os.Parcelable$Creator CREATOR

 java.lang.String value
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.os.Parcel)

public void <init>(
android.os.Parcelable)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/preference/ListPreference$SavedState; )
public class android.preference.ListPreference extends android.preference.DialogPreference

----------------FIELDS----------------

private int mClickedDialogEntryIndex

private java.lang.CharSequence[] mEntries

private java.lang.CharSequence[] mEntryValues

private java.lang.String mValue
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

static int access$002(
android.preference.ListPreference
int)

private int getValueIndex()

public int findIndexOfValue(
java.lang.String)

public java.lang.CharSequence[] getEntries()

public java.lang.CharSequence getEntry()

public java.lang.CharSequence[] getEntryValues()

public java.lang.String getValue()

protected void onDialogClosed(
boolean)

protected java.lang.Object onGetDefaultValue(
android.content.res.TypedArray
int)

protected void onPrepareDialogBuilder(
android.app.AlertDialog$Builder)

protected void onRestoreInstanceState(
android.os.Parcelable)

protected android.os.Parcelable onSaveInstanceState()

protected void onSetInitialValue(
boolean
java.lang.Object)

public void setEntries(
int)

public void setEntries(
java.lang.CharSequence[])

public void setEntryValues(
int)

public void setEntryValues(
java.lang.CharSequence[])

public void setValue(
java.lang.String)

public void setValueIndex(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/Preference$BaseSavedState; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/preference/Preference$BaseSavedState;>; )
final class android.preference.Preference$BaseSavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.preference.Preference$BaseSavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.preference.Preference$BaseSavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1544 name =OnPreferenceChangeInternalListener )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/Preference; )
abstract interface class android.preference.Preference$OnPreferenceChangeInternalListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onPreferenceChange(
android.preference.Preference)

public abstract void onPreferenceHierarchyChange(
android.preference.Preference)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnPreferenceChangeListener )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/Preference; )
public abstract interface class android.preference.Preference$OnPreferenceChangeListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onPreferenceChange(
android.preference.Preference
java.lang.Object)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnPreferenceClickListener )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/Preference; )
public abstract interface class android.preference.Preference$OnPreferenceClickListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onPreferenceClick(
android.preference.Preference)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/PreferenceActivity; )
 class android.preference.PreferenceActivity$1 extends android.os.Handler

----------------FIELDS----------------

final android.preference.PreferenceActivity this$0
----------------METHODS----------------

 void <init>(
android.preference.PreferenceActivity)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1544 name =OnPreferenceTreeClickListener )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/PreferenceManager; )
abstract interface class android.preference.PreferenceManager$OnPreferenceTreeClickListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onPreferenceTreeClick(
android.preference.PreferenceScreen
android.preference.Preference)

________________CLASS________________


public abstract class android.preference.PreferenceActivity extends android.app.ListActivity implements android.preference.PreferenceManager$OnPreferenceTreeClickListener

----------------FIELDS----------------

private static final int FIRST_REQUEST_CODE

private static final int MSG_BIND_PREFERENCES

private static final java.lang.String PREFERENCES_TAG

private android.os.Handler mHandler

private android.preference.PreferenceManager mPreferenceManager
----------------METHODS----------------

public void <init>()

static void access$000(
android.preference.PreferenceActivity)

private void bindPreferences()

private android.preference.PreferenceManager onCreatePreferenceManager()

private void postBindPreferences()

private void requirePreferenceManager()

public void addPreferencesFromIntent(
android.content.Intent)

public void addPreferencesFromResource(
int)

public android.preference.Preference findPreference(
java.lang.CharSequence)

public android.preference.PreferenceManager getPreferenceManager()

public android.preference.PreferenceScreen getPreferenceScreen()

protected void onActivityResult(
int
int
android.content.Intent)

public void onContentChanged()

protected void onCreate(
android.os.Bundle)

protected void onDestroy()

protected void onNewIntent(
android.content.Intent)

public boolean onPreferenceTreeClick(
android.preference.PreferenceScreen
android.preference.Preference)

protected void onRestoreInstanceState(
android.os.Bundle)

protected void onSaveInstanceState(
android.os.Bundle)

protected void onStop()

public void setPreferenceScreen(
android.preference.PreferenceScreen)

________________CLASS________________

@dalvik.annotation.Signature (value =Landroid/preference/Preference;Landroid/preference/GenericInflater$Parent<Landroid/preference/Preference;>; )
public abstract class android.preference.PreferenceGroup extends android.preference.Preference implements android.preference.GenericInflater$Parent

----------------FIELDS----------------

private boolean mAttachedToActivity

private int mCurrentPreferenceOrder

private boolean mOrderingAsAdded
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/preference/Preference;>; )
private java.util.List mPreferenceList
----------------METHODS----------------

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private boolean removePreferenceInt(
android.preference.Preference)

public void addItemFromInflater(
android.preference.Preference)

public volatile void addItemFromInflater(
java.lang.Object)

public boolean addPreference(
android.preference.Preference)

protected void dispatchRestoreInstanceState(
android.os.Bundle)

protected void dispatchSaveInstanceState(
android.os.Bundle)

public android.preference.Preference findPreference(
java.lang.CharSequence)

public android.preference.Preference getPreference(
int)

public int getPreferenceCount()

protected boolean isOnSameScreenAsChildren()

public boolean isOrderingAsAdded()

protected void onAttachedToActivity()

protected boolean onPrepareAddPreference(
android.preference.Preference)

protected void onPrepareForRemoval()

public void removeAll()

public boolean removePreference(
android.preference.Preference)

public void setEnabled(
boolean)

public void setOrderingAsAdded(
boolean)

 void sortPreferences()

________________CLASS________________


public class android.preference.PreferenceCategory extends android.preference.PreferenceGroup

----------------FIELDS----------------

private static final java.lang.String TAG
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

public boolean isEnabled()

protected boolean onPrepareAddPreference(
android.preference.Preference)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/preference/PreferenceGroupAdapter; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.preference.PreferenceGroupAdapter$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.preference.PreferenceGroupAdapter this$0
----------------METHODS----------------

 void <init>(
android.preference.PreferenceGroupAdapter)

public void run()

________________CLASS________________


 class android.preference.PreferenceGroupAdapter extends android.widget.BaseAdapter implements android.preference.Preference$OnPreferenceChangeInternalListener

----------------FIELDS----------------

private static final java.lang.String TAG

private android.os.Handler mHandler

private boolean mHasReturnedViewTypeCount

private volatile boolean mIsSyncing
@dalvik.annotation.Signature (value =Ljava/util/List<Ljava/lang/String;>; )
private java.util.List mPreferenceClassNames

private android.preference.PreferenceGroup mPreferenceGroup
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/preference/Preference;>; )
private java.util.List mPreferenceList

private java.lang.Runnable mSyncRunnable
----------------METHODS----------------

public void <init>(
android.preference.PreferenceGroup)

static void access$000(
android.preference.PreferenceGroupAdapter)

private void addPreferenceClassName(
android.preference.Preference)
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/preference/Preference;>;Landroid/preference/PreferenceGroup;)V )
private void flattenPreferenceGroup(
java.util.List
android.preference.PreferenceGroup)

private void syncMyPreferences()

public boolean areAllItemsEnabled()

public int getCount()

public android.preference.Preference getItem(
int)

public volatile java.lang.Object getItem(
int)

public long getItemId(
int)

public int getItemViewType(
int)

public android.view.View getView(
int
android.view.View
android.view.ViewGroup)

public int getViewTypeCount()

public boolean hasStableIds()

public boolean isEnabled(
int)

public void onPreferenceChange(
android.preference.Preference)

public void onPreferenceHierarchyChange(
android.preference.Preference)

________________CLASS________________

@dalvik.annotation.Signature (value =Landroid/preference/GenericInflater<Landroid/preference/Preference;Landroid/preference/PreferenceGroup;>; )
 class android.preference.PreferenceInflater extends android.preference.GenericInflater

----------------FIELDS----------------

private static final java.lang.String INTENT_TAG_NAME

private static final java.lang.String TAG

private android.preference.PreferenceManager mPreferenceManager
----------------METHODS----------------

public void <init>(
android.content.Context
android.preference.PreferenceManager)
@dalvik.annotation.Signature (value =(Landroid/preference/GenericInflater<Landroid/preference/Preference;Landroid/preference/PreferenceGroup;>;Landroid/preference/PreferenceManager;Landroid/content/Context;)V )
 void <init>(
android.preference.GenericInflater
android.preference.PreferenceManager
android.content.Context)

private void init(
android.preference.PreferenceManager)
@dalvik.annotation.Signature (value =(Landroid/content/Context;)Landroid/preference/GenericInflater<Landroid/preference/Preference;Landroid/preference/PreferenceGroup;>; )
public android.preference.GenericInflater cloneInContext(
android.content.Context)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException; )
protected boolean onCreateCustomFromTag(
org.xmlpull.v1.XmlPullParser
android.preference.Preference
android.util.AttributeSet)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException; )
protected volatile boolean onCreateCustomFromTag(
org.xmlpull.v1.XmlPullParser
java.lang.Object
android.util.AttributeSet)

protected volatile android.preference.GenericInflater$Parent onMergeRoots(
android.preference.GenericInflater$Parent
boolean
android.preference.GenericInflater$Parent)

protected android.preference.PreferenceGroup onMergeRoots(
android.preference.PreferenceGroup
boolean
android.preference.PreferenceGroup)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnActivityResultListener )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/PreferenceManager; )
public abstract interface class android.preference.PreferenceManager$OnActivityResultListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onActivityResult(
int
int
android.content.Intent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/preference/PreferenceManager; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnActivityStopListener )
public abstract interface class android.preference.PreferenceManager$OnActivityStopListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onActivityStop()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/preference/PreferenceManager$OnActivityDestroyListener;Landroid/preference/PreferenceManager$OnActivityStopListener;Landroid/preference/PreferenceManager$OnActivityResultListener;Landroid/preference/PreferenceManager$OnPreferenceTreeClickListener; )
public class android.preference.PreferenceManager extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String KEY_HAS_SET_DEFAULT_VALUES

public static final java.lang.String METADATA_KEY_PREFERENCES

private static final java.lang.String TAG

private android.app.Activity mActivity
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/preference/PreferenceManager$OnActivityDestroyListener;>; )
private java.util.List mActivityDestroyListeners
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/preference/PreferenceManager$OnActivityResultListener;>; )
private java.util.List mActivityResultListeners
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/preference/PreferenceManager$OnActivityStopListener;>; )
private java.util.List mActivityStopListeners

private android.content.Context mContext

private android.content.SharedPreferences$Editor mEditor

private long mNextId

private int mNextRequestCode

private boolean mNoCommit

private android.preference.PreferenceManager$OnPreferenceTreeClickListener mOnPreferenceTreeClickListener

private android.preference.PreferenceScreen mPreferenceScreen
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/content/DialogInterface;>; )
private java.util.List mPreferencesScreens

private android.content.SharedPreferences mSharedPreferences

private int mSharedPreferencesMode

private java.lang.String mSharedPreferencesName
----------------METHODS----------------

 void <init>(
android.app.Activity
int)

private void <init>(
android.content.Context)

public static android.content.SharedPreferences getDefaultSharedPreferences(
android.content.Context)

private static int getDefaultSharedPreferencesMode()

private static java.lang.String getDefaultSharedPreferencesName(
android.content.Context)

private void init(
android.content.Context)
@dalvik.annotation.Signature (value =(Landroid/content/Intent;)Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
private java.util.List queryIntentActivities(
android.content.Intent)

public static void setDefaultValues(
android.content.Context
int
boolean)

public static void setDefaultValues(
android.content.Context
java.lang.String
int
int
boolean)

private void setNoCommit(
boolean)

 void addPreferencesScreen(
android.content.DialogInterface)

public android.preference.PreferenceScreen createPreferenceScreen(
android.content.Context)

 void dispatchActivityDestroy()

 void dispatchActivityResult(
int
int
android.content.Intent)

 void dispatchActivityStop()

 void dispatchNewIntent(
android.content.Intent)

public android.preference.Preference findPreference(
java.lang.CharSequence)

 android.app.Activity getActivity()

 android.content.Context getContext()

 android.content.SharedPreferences$Editor getEditor()

 long getNextId()

 int getNextRequestCode()

 android.preference.PreferenceManager$OnPreferenceTreeClickListener getOnPreferenceTreeClickListener()

 android.preference.PreferenceScreen getPreferenceScreen()

public android.content.SharedPreferences getSharedPreferences()

public int getSharedPreferencesMode()

public java.lang.String getSharedPreferencesName()

 android.preference.PreferenceScreen inflateFromIntent(
android.content.Intent
android.preference.PreferenceScreen)

 android.preference.PreferenceScreen inflateFromResource(
android.content.Context
int
android.preference.PreferenceScreen)

 void registerOnActivityDestroyListener(
android.preference.PreferenceManager$OnActivityDestroyListener)

 void registerOnActivityResultListener(
android.preference.PreferenceManager$OnActivityResultListener)

 void registerOnActivityStopListener(
android.preference.PreferenceManager$OnActivityStopListener)

 void removePreferencesScreen(
android.content.DialogInterface)

 void setOnPreferenceTreeClickListener(
android.preference.PreferenceManager$OnPreferenceTreeClickListener)

 boolean setPreferences(
android.preference.PreferenceScreen)

public void setSharedPreferencesMode(
int)

public void setSharedPreferencesName(
java.lang.String)

 boolean shouldCommit()

 void unregisterOnActivityDestroyListener(
android.preference.PreferenceManager$OnActivityDestroyListener)

 void unregisterOnActivityResultListener(
android.preference.PreferenceManager$OnActivityResultListener)

 void unregisterOnActivityStopListener(
android.preference.PreferenceManager$OnActivityStopListener)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/preference/PreferenceScreen$SavedState; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/preference/PreferenceScreen$SavedState;>; )
final class android.preference.PreferenceScreen$SavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.preference.PreferenceScreen$SavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.preference.PreferenceScreen$SavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/preference/PreferenceScreen; )
@dalvik.annotation.InnerClass (accessFlags =10 name =SavedState )
 class android.preference.PreferenceScreen$SavedState extends android.preference.Preference$BaseSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/preference/PreferenceScreen$SavedState;>; )
public static final android.os.Parcelable$Creator CREATOR

 android.os.Bundle dialogBundle

 boolean isDialogShowing
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.os.Parcel)

public void <init>(
android.os.Parcelable)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/preference/PreferenceScreen$SavedState; )
public final class android.preference.PreferenceScreen extends android.preference.PreferenceGroup implements android.widget.AdapterView$OnItemClickListener, android.content.DialogInterface$OnDismissListener

----------------FIELDS----------------

private android.app.Dialog mDialog

private android.widget.ListAdapter mRootAdapter
----------------METHODS----------------

public void <init>(
android.content.Context
android.util.AttributeSet)

private void showDialog(
android.os.Bundle)

public void bind(
android.widget.ListView)

public android.app.Dialog getDialog()

public android.widget.ListAdapter getRootAdapter()

protected boolean isOnSameScreenAsChildren()

protected void onClick()

protected android.widget.ListAdapter onCreateRootAdapter()

public void onDismiss(
android.content.DialogInterface)

public void onItemClick(
android.widget.AdapterView
android.view.View
int
long)

protected void onRestoreInstanceState(
android.os.Parcelable)

protected android.os.Parcelable onSaveInstanceState()

________________CLASS________________


public class android.preference.RingtonePreference extends android.preference.Preference implements android.preference.PreferenceManager$OnActivityResultListener

----------------FIELDS----------------

private static final java.lang.String TAG

private int mRequestCode

private int mRingtoneType

private boolean mShowDefault

private boolean mShowSilent
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

public int getRingtoneType()

public boolean getShowDefault()

public boolean getShowSilent()

public boolean onActivityResult(
int
int
android.content.Intent)

protected void onAttachedToHierarchy(
android.preference.PreferenceManager)

protected void onClick()

protected java.lang.Object onGetDefaultValue(
android.content.res.TypedArray
int)

protected void onPrepareRingtonePickerIntent(
android.content.Intent)

protected android.net.Uri onRestoreRingtone()

protected void onSaveRingtone(
android.net.Uri)

protected void onSetInitialValue(
boolean
java.lang.Object)

public void setRingtoneType(
int)

public void setShowDefault(
boolean)

public void setShowSilent(
boolean)

________________CLASS________________


public class android.preference.SeekBarPreference extends android.preference.DialogPreference

----------------FIELDS----------------

private static final java.lang.String TAG

private android.graphics.drawable.Drawable mMyIcon
----------------METHODS----------------

public void <init>(
android.content.Context
android.util.AttributeSet)

protected static android.widget.SeekBar getSeekBar(
android.view.View)

protected void onBindDialogView(
android.view.View)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/preference/VolumePreference; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.preference.VolumePreference$1 extends android.database.ContentObserver

----------------FIELDS----------------

final android.preference.VolumePreference this$0
----------------METHODS----------------

 void <init>(
android.preference.VolumePreference
android.os.Handler)

public void onChange(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnSeekBarChangeListener )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/SeekBar; )
public abstract interface class android.widget.SeekBar$OnSeekBarChangeListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onProgressChanged(
android.widget.SeekBar
int
boolean)

public abstract void onStartTrackingTouch(
android.widget.SeekBar)

public abstract void onStopTrackingTouch(
android.widget.SeekBar)

________________CLASS________________


public class android.preference.VolumePreference extends android.preference.SeekBarPreference implements android.widget.SeekBar$OnSeekBarChangeListener, java.lang.Runnable, android.preference.PreferenceManager$OnActivityStopListener

----------------FIELDS----------------

private static final java.lang.String TAG

private android.content.ContentResolver mContentResolver

private android.os.Handler mHandler

private int mLastProgress

private int mOriginalStreamVolume

private android.media.Ringtone mRingtone

private android.widget.SeekBar mSeekBar

private int mStreamType

private android.media.AudioManager mVolume

private android.database.ContentObserver mVolumeObserver
----------------METHODS----------------

public void <init>(
android.content.Context
android.util.AttributeSet)

static android.widget.SeekBar access$000(
android.preference.VolumePreference)

static android.content.ContentResolver access$100(
android.preference.VolumePreference)

static int access$200(
android.preference.VolumePreference)

private void cleanup()

private void postSetVolume(
int)

private void sample()

private void stopSample()

public void onActivityStop()

protected void onBindDialogView(
android.view.View)

protected void onDialogClosed(
boolean)

public void onProgressChanged(
android.widget.SeekBar
int
boolean)

public void onStartTrackingTouch(
android.widget.SeekBar)

public void onStopTrackingTouch(
android.widget.SeekBar)

public void run()

________________CLASS________________


public abstract interface class android.provider.BaseColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String _COUNT

public static final java.lang.String _ID
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =BookmarkColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Browser; )
public class android.provider.Browser$BookmarkColumns extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String BOOKMARK

public static final java.lang.String CREATED

public static final java.lang.String DATE

public static final java.lang.String FAVICON

public static final java.lang.String TITLE

public static final java.lang.String URL

public static final java.lang.String VISITS
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Browser; )
@dalvik.annotation.InnerClass (accessFlags =9 name =SearchColumns )
public class android.provider.Browser$SearchColumns extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String DATE

public static final java.lang.String SEARCH

public static final java.lang.String URL
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Browser$SearchColumns;Landroid/provider/Browser$BookmarkColumns; )
public class android.provider.Browser extends java.lang.Object

----------------FIELDS----------------

public static final android.net.Uri BOOKMARKS_URI

public static final java.lang.String[] HISTORY_PROJECTION

public static final int HISTORY_PROJECTION_BOOKMARK_INDEX

public static final int HISTORY_PROJECTION_DATE_INDEX

public static final int HISTORY_PROJECTION_FAVICON_INDEX

public static final int HISTORY_PROJECTION_ID_INDEX

public static final int HISTORY_PROJECTION_TITLE_INDEX

public static final int HISTORY_PROJECTION_URL_INDEX

public static final int HISTORY_PROJECTION_VISITS_INDEX

public static final java.lang.String INITIAL_ZOOM_LEVEL

private static final java.lang.String LOGTAG

private static final int MAX_HISTORY_COUNT

public static final java.lang.String[] SEARCHES_PROJECTION

public static final int SEARCHES_PROJECTION_DATE_INDEX

public static final int SEARCHES_PROJECTION_SEARCH_INDEX

public static final android.net.Uri SEARCHES_URI

private static final java.lang.String SEARCHES_WHERE_CLAUSE

public static final java.lang.String[] TRUNCATE_HISTORY_PROJECTION

public static final int TRUNCATE_HISTORY_PROJECTION_ID_INDEX

public static final int TRUNCATE_N_OLDEST
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static final void addSearchUrl(
android.content.ContentResolver
java.lang.String)

public static final boolean canClearHistory(
android.content.ContentResolver)

public static final void clearHistory(
android.content.ContentResolver)

public static final void clearSearches(
android.content.ContentResolver)

public static final void deleteFromHistory(
android.content.ContentResolver
java.lang.String)

public static final void deleteHistoryTimeFrame(
android.content.ContentResolver
long
long)

private static final void deleteHistoryWhere(
android.content.ContentResolver
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public static final android.database.Cursor getAllBookmarks(
android.content.ContentResolver)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public static final android.database.Cursor getAllVisitedUrls(
android.content.ContentResolver)

public static final void requestAllIcons(
android.content.ContentResolver
java.lang.String
android.webkit.WebIconDatabase$IconListener)

public static final void saveBookmark(
android.content.Context
java.lang.String
java.lang.String)

public static final void sendString(
android.content.Context
java.lang.String)

public static final void truncateHistory(
android.content.ContentResolver)

public static final void updateVisitedHistory(
android.content.ContentResolver
java.lang.String
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =AttendeesColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
public abstract interface class android.provider.Calendar$AttendeesColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ATTENDEE_EMAIL

public static final java.lang.String ATTENDEE_NAME

public static final java.lang.String ATTENDEE_RELATIONSHIP

public static final java.lang.String ATTENDEE_STATUS

public static final int ATTENDEE_STATUS_ACCEPTED

public static final int ATTENDEE_STATUS_DECLINED

public static final int ATTENDEE_STATUS_INVITED

public static final int ATTENDEE_STATUS_NONE

public static final int ATTENDEE_STATUS_TENTATIVE

public static final java.lang.String ATTENDEE_TYPE

public static final java.lang.String EVENT_ID

public static final int RELATIONSHIP_ATTENDEE

public static final int RELATIONSHIP_NONE

public static final int RELATIONSHIP_ORGANIZER

public static final int RELATIONSHIP_PERFORMER

public static final int RELATIONSHIP_SPEAKER

public static final int TYPE_NONE

public static final int TYPE_OPTIONAL

public static final int TYPE_REQUIRED
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =EventsColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
public abstract interface class android.provider.Calendar$EventsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ALL_DAY

public static final java.lang.String CALENDAR_ID

public static final java.lang.String COMMENTS_URI

public static final java.lang.String DESCRIPTION

public static final java.lang.String DTEND

public static final java.lang.String DTSTART

public static final java.lang.String DURATION

public static final java.lang.String EVENT_LOCATION

public static final java.lang.String EVENT_TIMEZONE

public static final java.lang.String EXDATE

public static final java.lang.String EXRULE

public static final java.lang.String HAS_ALARM

public static final java.lang.String HAS_EXTENDED_PROPERTIES

public static final java.lang.String HTML_URI

public static final java.lang.String LAST_DATE

public static final java.lang.String ORIGINAL_EVENT

public static final java.lang.String ORIGINAL_INSTANCE_TIME

public static final java.lang.String RDATE

public static final java.lang.String RRULE

public static final java.lang.String SELF_ATTENDEE_STATUS

public static final java.lang.String STATUS

public static final int STATUS_CANCELED

public static final int STATUS_CONFIRMED

public static final int STATUS_TENTATIVE

public static final java.lang.String TITLE

public static final java.lang.String TRANSPARENCY

public static final int TRANSPARENCY_OPAQUE

public static final int TRANSPARENCY_TRANSPARENT

public static final java.lang.String VISIBILITY

public static final int VISIBILITY_CONFIDENTIAL

public static final int VISIBILITY_DEFAULT

public static final int VISIBILITY_PRIVATE

public static final int VISIBILITY_PUBLIC
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Attendees )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
public final class android.provider.Calendar$Attendees extends java.lang.Object implements android.provider.BaseColumns, android.provider.Calendar$AttendeesColumns, android.provider.Calendar$EventsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =BusyBitsColumns )
public abstract interface class android.provider.Calendar$BusyBitsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ALL_DAY_COUNT

public static final java.lang.String BUSYBITS

public static final java.lang.String DAY
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
@dalvik.annotation.InnerClass (accessFlags =25 name =BusyBits )
public final class android.provider.Calendar$BusyBits extends java.lang.Object implements android.provider.Calendar$BusyBitsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final int INTERVALS_PER_DAY

public static final int MINUTES_PER_BUSY_INTERVAL

public static final java.lang.String[] PROJECTION
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static final android.database.Cursor query(
android.content.ContentResolver
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =CalendarAlertsColumns )
public abstract interface class android.provider.Calendar$CalendarAlertsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ALARM_TIME

public static final java.lang.String BEGIN

public static final java.lang.String DEFAULT_SORT_ORDER

public static final int DISMISSED

public static final java.lang.String END

public static final java.lang.String EVENT_ID

public static final int FIRED

public static final java.lang.String MINUTES

public static final int SCHEDULED

public static final java.lang.String STATE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =CalendarsColumns )
public abstract interface class android.provider.Calendar$CalendarsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACCESS_LEVEL

public static final java.lang.String COLOR

public static final int CONTRIBUTOR_ACCESS

public static final int EDITOR_ACCESS

public static final int FREEBUSY_ACCESS

public static final int NO_ACCESS

public static final int OVERRIDE_ACCESS

public static final int OWNER_ACCESS

public static final int READ_ACCESS

public static final int RESPOND_ACCESS

public static final int ROOT_ACCESS

public static final java.lang.String SELECTED

public static final java.lang.String SYNC_EVENTS

public static final java.lang.String TIMEZONE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
@dalvik.annotation.InnerClass (accessFlags =25 name =CalendarAlerts )
public final class android.provider.Calendar$CalendarAlerts extends java.lang.Object implements android.provider.BaseColumns, android.provider.Calendar$CalendarAlertsColumns, android.provider.Calendar$EventsColumns, android.provider.Calendar$CalendarsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final android.net.Uri CONTENT_URI_BY_INSTANCE

public static final java.lang.String TABLE_NAME
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static final boolean alarmExists(
android.content.ContentResolver
long
long
long)

public static final long findNextAlarmTime(
android.content.ContentResolver
long)

public static final android.net.Uri insert(
android.content.ContentResolver
long
long
long
long
int)

public static final android.database.Cursor query(
android.content.ContentResolver
java.lang.String[]
java.lang.String
java.lang.String[])

public static final void rescheduleMissedAlarms(
android.content.ContentResolver
android.content.Context
android.app.AlarmManager)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =CalendarMetaDataColumns )
public abstract interface class android.provider.Calendar$CalendarMetaDataColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String LOCAL_TIMEZONE

public static final java.lang.String MAX_BUSYBITS

public static final java.lang.String MAX_INSTANCE

public static final java.lang.String MIN_BUSYBITS

public static final java.lang.String MIN_INSTANCE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
@dalvik.annotation.InnerClass (accessFlags =25 name =CalendarMetaData )
public final class android.provider.Calendar$CalendarMetaData extends java.lang.Object implements android.provider.Calendar$CalendarMetaDataColumns

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________


public abstract interface class android.provider.SyncConstValue extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String NON_SYNCABLE_ACCOUNT

public static final java.lang.String _SYNC_ACCOUNT

public static final java.lang.String _SYNC_DIRTY

public static final java.lang.String _SYNC_ID

public static final java.lang.String _SYNC_LOCAL_ID

public static final java.lang.String _SYNC_MARK

public static final java.lang.String _SYNC_TIME

public static final java.lang.String _SYNC_VERSION
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Calendars )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
public class android.provider.Calendar$Calendars extends java.lang.Object implements android.provider.BaseColumns, android.provider.SyncConstValue, android.provider.Calendar$CalendarsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String DISPLAY_NAME

public static final java.lang.String HIDDEN

public static final android.net.Uri LIVE_CONTENT_URI

public static final java.lang.String LOCATION

public static final java.lang.String NAME

public static final java.lang.String URL
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static int delete(
android.content.ContentResolver
java.lang.String
java.lang.String[])

public static int deleteCalendarsForAccount(
android.content.ContentResolver
java.lang.String)

public static final android.database.Cursor query(
android.content.ContentResolver
java.lang.String[]
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Events )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
public final class android.provider.Calendar$Events extends java.lang.Object implements android.provider.BaseColumns, android.provider.SyncConstValue, android.provider.Calendar$EventsColumns, android.provider.Calendar$CalendarsColumns

----------------FIELDS----------------

private static final java.lang.String[] ATTENDEES_COLUMNS

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

public static final android.net.Uri DELETED_CONTENT_URI

private static final java.lang.String[] FETCH_ENTRY_COLUMNS

private static com.google.wireless.gdata.calendar.client.CalendarClient sCalendarClient
----------------METHODS----------------

static void <clinit>()

public void <init>()
@dalvik.annotation.Signature (value =(Lcom/google/wireless/gdata/calendar/data/EventEntry;Ljava/util/ArrayList<Ljava/util/ArrayList;>;)V )
private static final void extractAttendeesIntoArrayList(
com.google.wireless.gdata.calendar.data.EventEntry
java.util.ArrayList)

private static java.lang.String extractValue(
android.pim.ICalendar$Component
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lcom/google/wireless/gdata/parser/ParseException; )
private static final com.google.wireless.gdata.calendar.data.EventEntry fetchEntry(
com.google.android.googleapps.GoogleLoginServiceBlockingHelper
com.google.wireless.gdata.calendar.client.CalendarClient
java.lang.String
java.lang.String)

private static com.google.wireless.gdata.calendar.client.CalendarClient getCalendarClient(
android.content.ContentResolver)

public static final android.net.Uri insertVEvent(
android.content.ContentResolver
android.pim.ICalendar$Component
long
int
android.content.ContentValues)

public static final android.database.Cursor query(
android.content.ContentResolver
java.lang.String[])

public static final android.database.Cursor query(
android.content.ContentResolver
java.lang.String[]
java.lang.String
java.lang.String)

public static final android.database.Cursor queryAttendees(
android.content.Context
android.content.ContentResolver
long)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =ExtendedPropertiesColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
public abstract interface class android.provider.Calendar$ExtendedPropertiesColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String EVENT_ID

public static final java.lang.String NAME

public static final java.lang.String VALUE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
@dalvik.annotation.InnerClass (accessFlags =25 name =ExtendedProperties )
public final class android.provider.Calendar$ExtendedProperties extends java.lang.Object implements android.provider.BaseColumns, android.provider.Calendar$ExtendedPropertiesColumns, android.provider.Calendar$EventsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Instances )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
public final class android.provider.Calendar$Instances extends java.lang.Object implements android.provider.BaseColumns, android.provider.Calendar$EventsColumns, android.provider.Calendar$CalendarsColumns

----------------FIELDS----------------

public static final java.lang.String BEGIN

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String END

public static final java.lang.String END_DAY

public static final java.lang.String END_MINUTE

public static final java.lang.String EVENT_ID

public static final java.lang.String SORT_CALENDAR_VIEW

public static final java.lang.String START_DAY

public static final java.lang.String START_MINUTE
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static final android.database.Cursor query(
android.content.ContentResolver
java.lang.String[]
long
long)

public static final android.database.Cursor query(
android.content.ContentResolver
java.lang.String[]
long
long
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =RemindersColumns )
public abstract interface class android.provider.Calendar$RemindersColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String EVENT_ID

public static final java.lang.String METHOD

public static final int METHOD_ALERT

public static final int METHOD_DEFAULT

public static final int METHOD_EMAIL

public static final int METHOD_SMS

public static final java.lang.String MINUTES

public static final int MINUTES_DEFAULT
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Reminders )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Calendar; )
public final class android.provider.Calendar$Reminders extends java.lang.Object implements android.provider.BaseColumns, android.provider.Calendar$RemindersColumns, android.provider.Calendar$EventsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String TABLE_NAME
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Calendar$ExtendedProperties;Landroid/provider/Calendar$ExtendedPropertiesColumns;Landroid/provider/Calendar$CalendarAlerts;Landroid/provider/Calendar$CalendarAlertsColumns;Landroid/provider/Calendar$Reminders;Landroid/provider/Calendar$RemindersColumns;Landroid/provider/Calendar$BusyBits;Landroid/provider/Calendar$BusyBitsColumns;Landroid/provider/Calendar$CalendarMetaData;Landroid/provider/Calendar$CalendarMetaDataColumns;Landroid/provider/Calendar$Instances;Landroid/provider/Calendar$Events;Landroid/provider/Calendar$EventsColumns;Landroid/provider/Calendar$Attendees;Landroid/provider/Calendar$AttendeesColumns;Landroid/provider/Calendar$Calendars;Landroid/provider/Calendar$CalendarsColumns; )
public final class android.provider.Calendar extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String AUTHORITY

public static final android.net.Uri CONTENT_URI

public static final java.lang.String EVENT_BEGIN_TIME

public static final java.lang.String EVENT_END_TIME

public static final java.lang.String EVENT_REMINDER_ACTION

public static final java.lang.String TAG
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/CallLog; )
@dalvik.annotation.InnerClass (accessFlags =9 name =Calls )
public class android.provider.CallLog$Calls extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String CACHED_NAME

public static final java.lang.String CACHED_NUMBER_LABEL

public static final java.lang.String CACHED_NUMBER_TYPE

public static final android.net.Uri CONTENT_FILTER_URI

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DATE

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String DURATION

public static final int INCOMING_TYPE

public static final int MISSED_TYPE

public static final java.lang.String NEW

public static final java.lang.String NUMBER

public static final int OUTGOING_TYPE

public static final java.lang.String TYPE
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.net.Uri addCall(
com.android.internal.telephony.CallerInfo
android.content.Context
java.lang.String
boolean
int
long
int)

private static void removeExpiredEntries(
android.content.Context)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/CallLog$Calls; )
public class android.provider.CallLog extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String AUTHORITY

public static final android.net.Uri CONTENT_URI
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =Crashes )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Checkin; )
public abstract interface class android.provider.Checkin$Crashes extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DATA

public static final java.lang.String LOGS

public static final java.lang.String TABLE_NAME
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Checkin$Events; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Tag )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/provider/Checkin$Events$Tag;>; )
public final class android.provider.Checkin$Events$Tag extends java.lang.Enum

----------------FIELDS----------------

private static final android.provider.Checkin$Events$Tag[] $VALUES

public static final android.provider.Checkin$Events$Tag BROWSER_BUG_REPORT

public static final android.provider.Checkin$Events$Tag CARRIER_BUG_REPORT

public static final android.provider.Checkin$Events$Tag CHECKIN_FAILURE

public static final android.provider.Checkin$Events$Tag CHECKIN_SUCCESS

public static final android.provider.Checkin$Events$Tag FOTA_BEGIN

public static final android.provider.Checkin$Events$Tag FOTA_FAILURE

public static final android.provider.Checkin$Events$Tag FOTA_INSTALL

public static final android.provider.Checkin$Events$Tag FOTA_PROMPT

public static final android.provider.Checkin$Events$Tag FOTA_PROMPT_ACCEPT

public static final android.provider.Checkin$Events$Tag FOTA_PROMPT_REJECT

public static final android.provider.Checkin$Events$Tag FOTA_PROMPT_SKIPPED

public static final android.provider.Checkin$Events$Tag GSERVICES_ERROR

public static final android.provider.Checkin$Events$Tag GSERVICES_UPDATE

public static final android.provider.Checkin$Events$Tag LOGIN_SERVICE_ACCOUNT_SAVED

public static final android.provider.Checkin$Events$Tag LOGIN_SERVICE_ACCOUNT_TRIED

public static final android.provider.Checkin$Events$Tag LOGIN_SERVICE_AUTHENTICATE

public static final android.provider.Checkin$Events$Tag LOGIN_SERVICE_CAPTCHA_ANSWERED

public static final android.provider.Checkin$Events$Tag LOGIN_SERVICE_CAPTCHA_SHOWN

public static final android.provider.Checkin$Events$Tag LOGIN_SERVICE_PASSWORD_ENTERED

public static final android.provider.Checkin$Events$Tag LOGIN_SERVICE_SWITCH_GOOGLE_MAIL

public static final android.provider.Checkin$Events$Tag NETWORK_DOWN

public static final android.provider.Checkin$Events$Tag NETWORK_UP

public static final android.provider.Checkin$Events$Tag PHONE_UI

public static final android.provider.Checkin$Events$Tag RADIO_BUG_REPORT

public static final android.provider.Checkin$Events$Tag SETUP_COMPLETED

public static final android.provider.Checkin$Events$Tag SETUP_INITIATED

public static final android.provider.Checkin$Events$Tag SETUP_IO_ERROR

public static final android.provider.Checkin$Events$Tag SETUP_NETWORK_ERROR

public static final android.provider.Checkin$Events$Tag SETUP_REQUIRED_CAPTCHA

public static final android.provider.Checkin$Events$Tag SETUP_RETRIES_EXHAUSTED

public static final android.provider.Checkin$Events$Tag SETUP_SERVER_ERROR

public static final android.provider.Checkin$Events$Tag SETUP_SERVER_TIMEOUT

public static final android.provider.Checkin$Events$Tag SYSTEM_APP_NOT_RESPONDING

public static final android.provider.Checkin$Events$Tag SYSTEM_BOOT

public static final android.provider.Checkin$Events$Tag SYSTEM_LAST_KMSG

public static final android.provider.Checkin$Events$Tag SYSTEM_RECOVERY_LOG

public static final android.provider.Checkin$Events$Tag SYSTEM_RESTART

public static final android.provider.Checkin$Events$Tag SYSTEM_SERVICE_LOOPING

public static final android.provider.Checkin$Events$Tag SYSTEM_TOMBSTONE

public static final android.provider.Checkin$Events$Tag TEST
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.provider.Checkin$Events$Tag valueOf(
java.lang.String)

public static android.provider.Checkin$Events$Tag[] values()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =Events )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Checkin; )
@dalvik.annotation.MemberClasses (value =Landroid/provider/Checkin$Events$Tag; )
public abstract interface class android.provider.Checkin$Events extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DATE

public static final java.lang.String TABLE_NAME

public static final java.lang.String TAG

public static final java.lang.String VALUE
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/provider/Checkin$Properties$Tag;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Tag )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Checkin$Properties; )
public final class android.provider.Checkin$Properties$Tag extends java.lang.Enum

----------------FIELDS----------------

private static final android.provider.Checkin$Properties$Tag[] $VALUES

public static final android.provider.Checkin$Properties$Tag DESIRED_BUILD

public static final android.provider.Checkin$Properties$Tag MARKET_CHECKIN
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.provider.Checkin$Properties$Tag valueOf(
java.lang.String)

public static android.provider.Checkin$Properties$Tag[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Checkin$Properties$Tag; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =Properties )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Checkin; )
public abstract interface class android.provider.Checkin$Properties extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String TABLE_NAME

public static final java.lang.String TAG

public static final java.lang.String VALUE
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16409 name =Tag )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/provider/Checkin$Stats$Tag;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Checkin$Stats; )
public final class android.provider.Checkin$Stats$Tag extends java.lang.Enum

----------------FIELDS----------------

private static final android.provider.Checkin$Stats$Tag[] $VALUES

public static final android.provider.Checkin$Stats$Tag CRASHES_REPORTED

public static final android.provider.Checkin$Stats$Tag CRASHES_TRUNCATED

public static final android.provider.Checkin$Stats$Tag ELAPSED_REALTIME_SEC

public static final android.provider.Checkin$Stats$Tag ELAPSED_UPTIME_SEC

public static final android.provider.Checkin$Stats$Tag HTTP_STATUS

public static final android.provider.Checkin$Stats$Tag PHONE_GPRS_ATTEMPTED

public static final android.provider.Checkin$Stats$Tag PHONE_GPRS_CONNECTED

public static final android.provider.Checkin$Stats$Tag PHONE_GSM_REGISTERED

public static final android.provider.Checkin$Stats$Tag PHONE_RADIO_RESETS

public static final android.provider.Checkin$Stats$Tag TEST
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.provider.Checkin$Stats$Tag valueOf(
java.lang.String)

public static android.provider.Checkin$Stats$Tag[] values()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Checkin; )
@dalvik.annotation.MemberClasses (value =Landroid/provider/Checkin$Stats$Tag; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =Stats )
public abstract interface class android.provider.Checkin$Stats extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String COUNT

public static final java.lang.String SUM

public static final java.lang.String TABLE_NAME

public static final java.lang.String TAG
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Checkin; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =TriggerIntent )
public abstract interface class android.provider.Checkin$TriggerIntent extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACTION

public static final java.lang.String CATEGORY
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Checkin$TriggerIntent;Landroid/provider/Checkin$Crashes;Landroid/provider/Checkin$Properties;Landroid/provider/Checkin$Stats;Landroid/provider/Checkin$Events; )
public final class android.provider.Checkin extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String AUTHORITY

private static final long MIN_CRASH_FAILURE_RETRY

private static final java.lang.String TAG

private static volatile long sLastCrashFailureRealtime
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.net.Uri logEvent(
android.content.ContentResolver
android.provider.Checkin$Events$Tag
java.lang.String)

public static android.net.Uri reportCrash(
android.content.ContentResolver
android.server.data.CrashData)

public static android.net.Uri reportCrash(
android.content.ContentResolver
byte[])

public static android.net.Uri updateStats(
android.content.ContentResolver
android.provider.Checkin$Stats$Tag
int
double)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ContactMethodsColumns )
public abstract interface class android.provider.Contacts$ContactMethodsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String AUX_DATA

public static final java.lang.String DATA

public static final java.lang.String ISPRIMARY

public static final java.lang.String KIND

public static final java.lang.String LABEL

public static final java.lang.String TYPE

public static final int TYPE_CUSTOM

public static final int TYPE_HOME

public static final int TYPE_OTHER

public static final int TYPE_WORK
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =PeopleColumns )
public abstract interface class android.provider.Contacts$PeopleColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String CUSTOM_RINGTONE

public static final java.lang.String DISPLAY_NAME

public static final java.lang.String LAST_TIME_CONTACTED

public static final java.lang.String NAME

public static final java.lang.String NOTES

public static final java.lang.String PHOTO_VERSION

public static final java.lang.String SEND_TO_VOICEMAIL

public static final java.lang.String STARRED

public static final java.lang.String TIMES_CONTACTED
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
@dalvik.annotation.InnerClass (accessFlags =25 name =ContactMethods )
public final class android.provider.Contacts$ContactMethods extends java.lang.Object implements android.provider.BaseColumns, android.provider.Contacts$ContactMethodsColumns, android.provider.Contacts$PeopleColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_EMAIL_ITEM_TYPE

public static final java.lang.String CONTENT_EMAIL_TYPE

public static final android.net.Uri CONTENT_EMAIL_URI

public static final java.lang.String CONTENT_IM_ITEM_TYPE

public static final java.lang.String CONTENT_POSTAL_ITEM_TYPE

public static final java.lang.String CONTENT_POSTAL_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String PERSON_ID

public static final java.lang.String POSTAL_LOCATION_LATITUDE

public static final java.lang.String POSTAL_LOCATION_LONGITUDE

public static final int PROTOCOL_AIM

public static final int PROTOCOL_GOOGLE_TALK

public static final int PROTOCOL_ICQ

public static final int PROTOCOL_JABBER

public static final int PROTOCOL_MSN

public static final int PROTOCOL_QQ

public static final int PROTOCOL_SKYPE

public static final int PROTOCOL_YAHOO
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static java.lang.Object decodeImProtocol(
java.lang.String)

public static java.lang.String encodeCustomImProtocol(
java.lang.String)

public static java.lang.String encodePredefinedImProtocol(
int)

public static final java.lang.CharSequence getDisplayLabel(
android.content.Context
int
int
java.lang.CharSequence)

public static java.lang.String lookupProviderCategoryFromId(
int)

public void addPostalLocation(
android.content.Context
long
double
double)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ExtensionsColumns )
public abstract interface class android.provider.Contacts$ExtensionsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String NAME

public static final java.lang.String VALUE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Extensions )
public final class android.provider.Contacts$Extensions extends java.lang.Object implements android.provider.BaseColumns, android.provider.Contacts$ExtensionsColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String PERSON_ID
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =GroupsColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
public abstract interface class android.provider.Contacts$GroupsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String NAME

public static final java.lang.String NOTES

public static final java.lang.String SHOULD_SYNC

public static final java.lang.String SYSTEM_ID
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
@dalvik.annotation.InnerClass (accessFlags =25 name =GroupMembership )
public final class android.provider.Contacts$GroupMembership extends java.lang.Object implements android.provider.BaseColumns, android.provider.Contacts$GroupsColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_DIRECTORY

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String GROUP_ID

public static final java.lang.String GROUP_SYNC_ACCOUNT

public static final java.lang.String GROUP_SYNC_ID

public static final java.lang.String PERSON_ID

public static final android.net.Uri RAW_CONTENT_URI
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Groups )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
public final class android.provider.Contacts$Groups extends java.lang.Object implements android.provider.BaseColumns, android.provider.SyncConstValue, android.provider.Contacts$GroupsColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

public static final android.net.Uri DELETED_CONTENT_URI

public static final java.lang.String GROUP_ANDROID_STARRED

public static final java.lang.String GROUP_MY_CONTACTS
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Insert )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts$Intents; )
public final class android.provider.Contacts$Intents$Insert extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACTION

public static final java.lang.String COMPANY

public static final java.lang.String EMAIL

public static final java.lang.String EMAIL_ISPRIMARY

public static final java.lang.String EMAIL_TYPE

public static final java.lang.String FULL_MODE

public static final java.lang.String IM_HANDLE

public static final java.lang.String IM_ISPRIMARY

public static final java.lang.String IM_PROTOCOL

public static final java.lang.String JOB_TITLE

public static final java.lang.String NAME

public static final java.lang.String NOTES

public static final java.lang.String PHONE

public static final java.lang.String PHONE_ISPRIMARY

public static final java.lang.String PHONE_TYPE

public static final java.lang.String POSTAL

public static final java.lang.String POSTAL_ISPRIMARY

public static final java.lang.String POSTAL_TYPE
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =UI )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts$Intents; )
public final class android.provider.Contacts$Intents$UI extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String FILTER_CONTACTS_ACTION

public static final java.lang.String FILTER_TEXT_EXTRA_KEY

public static final java.lang.String GROUP_NAME_EXTRA_KEY

public static final java.lang.String LIST_ALL_CONTACTS_ACTION

public static final java.lang.String LIST_CONTACTS_WITH_PHONES_ACTION

public static final java.lang.String LIST_DEFAULT

public static final java.lang.String LIST_FREQUENT_ACTION

public static final java.lang.String LIST_GROUP_ACTION

public static final java.lang.String LIST_STARRED_ACTION

public static final java.lang.String LIST_STREQUENT_ACTION

public static final java.lang.String TITLE_EXTRA_KEY
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Contacts$Intents$Insert;Landroid/provider/Contacts$Intents$UI; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Intents )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
public final class android.provider.Contacts$Intents extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ATTACH_IMAGE

public static final java.lang.String SEARCH_SUGGESTION_CLICKED

public static final java.lang.String SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED

public static final java.lang.String SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OrganizationColumns )
public abstract interface class android.provider.Contacts$OrganizationColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String COMPANY

public static final java.lang.String ISPRIMARY

public static final java.lang.String LABEL

public static final java.lang.String PERSON_ID

public static final java.lang.String TITLE

public static final java.lang.String TYPE

public static final int TYPE_CUSTOM

public static final int TYPE_OTHER

public static final int TYPE_WORK
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Organizations )
public final class android.provider.Contacts$Organizations extends java.lang.Object implements android.provider.BaseColumns, android.provider.Contacts$OrganizationColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_DIRECTORY

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static final java.lang.CharSequence getDisplayLabel(
android.content.Context
int
java.lang.CharSequence)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts$People; )
@dalvik.annotation.InnerClass (accessFlags =25 name =ContactMethods )
public final class android.provider.Contacts$People$ContactMethods extends java.lang.Object implements android.provider.BaseColumns, android.provider.Contacts$ContactMethodsColumns, android.provider.Contacts$PeopleColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_DIRECTORY

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Extensions )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts$People; )
public class android.provider.Contacts$People$Extensions extends java.lang.Object implements android.provider.BaseColumns, android.provider.Contacts$ExtensionsColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_DIRECTORY

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String PERSON_ID
----------------METHODS----------------

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =PhonesColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
public abstract interface class android.provider.Contacts$PhonesColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ISPRIMARY

public static final java.lang.String LABEL

public static final java.lang.String NUMBER

public static final java.lang.String NUMBER_KEY

public static final java.lang.String TYPE

public static final int TYPE_CUSTOM

public static final int TYPE_FAX_HOME

public static final int TYPE_FAX_WORK

public static final int TYPE_HOME

public static final int TYPE_MOBILE

public static final int TYPE_OTHER

public static final int TYPE_PAGER

public static final int TYPE_WORK
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Phones )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts$People; )
public final class android.provider.Contacts$People$Phones extends java.lang.Object implements android.provider.BaseColumns, android.provider.Contacts$PhonesColumns, android.provider.Contacts$PeopleColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_DIRECTORY

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

private void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =1544 name =CommonPresenceColumns )
abstract interface class android.provider.Im$CommonPresenceColumns extends java.lang.Object

----------------FIELDS----------------

public static final int AVAILABLE

public static final int AWAY

public static final int DO_NOT_DISTURB

public static final int IDLE

public static final int INVISIBLE

public static final int OFFLINE

public static final java.lang.String PRESENCE_CUSTOM_STATUS

public static final java.lang.String PRESENCE_STATUS

public static final java.lang.String PRIORITY
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =PresenceColumns )
public abstract interface class android.provider.Contacts$PresenceColumns extends java.lang.Object implements android.provider.Im$CommonPresenceColumns

----------------FIELDS----------------

public static final java.lang.String IM_ACCOUNT

public static final java.lang.String IM_HANDLE

public static final java.lang.String IM_PROTOCOL
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Contacts$People$Extensions;Landroid/provider/Contacts$People$ContactMethods;Landroid/provider/Contacts$People$Phones; )
@dalvik.annotation.InnerClass (accessFlags =25 name =People )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
public final class android.provider.Contacts$People extends java.lang.Object implements android.provider.BaseColumns, android.provider.SyncConstValue, android.provider.Contacts$PeopleColumns, android.provider.Contacts$PhonesColumns, android.provider.Contacts$PresenceColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_FILTER_URI

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

public static final android.net.Uri DELETED_CONTENT_URI

private static final java.lang.String[] GROUPS_PROJECTION

public static final java.lang.String PRIMARY_EMAIL_ID

public static final java.lang.String PRIMARY_ORGANIZATION_ID

public static final java.lang.String PRIMARY_PHONE_ID
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static android.net.Uri addToGroup(
android.content.ContentResolver
long
long)

public static android.net.Uri addToGroup(
android.content.ContentResolver
long
java.lang.String)

public static android.net.Uri addToMyContactsGroup(
android.content.ContentResolver
long)

public static android.net.Uri createPersonInMyContactsGroup(
android.content.ContentResolver
android.content.ContentValues)

public static android.graphics.Bitmap loadContactPhoto(
android.content.Context
android.net.Uri
int
android.graphics.BitmapFactory$Options)

private static android.graphics.Bitmap loadPlaceholderPhoto(
int
android.content.Context
android.graphics.BitmapFactory$Options)

public static void markAsContacted(
android.content.ContentResolver
long)

public static java.io.InputStream openContactPhotoInputStream(
android.content.ContentResolver
android.net.Uri)

public static android.database.Cursor queryGroups(
android.content.ContentResolver
long)

public static void setPhotoData(
android.content.ContentResolver
android.net.Uri
byte[])

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Phones )
public final class android.provider.Contacts$Phones extends java.lang.Object implements android.provider.BaseColumns, android.provider.Contacts$PhonesColumns, android.provider.Contacts$PeopleColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_FILTER_URL

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String PERSON_ID
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static final java.lang.CharSequence getDisplayLabel(
android.content.Context
int
java.lang.CharSequence)

public static final java.lang.CharSequence getDisplayLabel(
android.content.Context
int
java.lang.CharSequence
java.lang.CharSequence[])

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =PhotosColumns )
public abstract interface class android.provider.Contacts$PhotosColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String DATA

public static final java.lang.String DOWNLOAD_REQUIRED

public static final java.lang.String EXISTS_ON_SERVER

public static final java.lang.String LOCAL_VERSION

public static final java.lang.String PERSON_ID

public static final java.lang.String SYNC_ERROR
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Photos )
public final class android.provider.Contacts$Photos extends java.lang.Object implements android.provider.BaseColumns, android.provider.Contacts$PhotosColumns, android.provider.SyncConstValue

----------------FIELDS----------------

public static final java.lang.String CONTENT_DIRECTORY

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Presence )
public final class android.provider.Contacts$Presence extends java.lang.Object implements android.provider.BaseColumns, android.provider.Contacts$PresenceColumns, android.provider.Contacts$PeopleColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String PERSON_ID
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static final int getPresenceIconResourceId(
int)

public static final void setPresenceIcon(
android.widget.ImageView
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =SettingsColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
public abstract interface class android.provider.Contacts$SettingsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String KEY

public static final java.lang.String VALUE

public static final java.lang.String _SYNC_ACCOUNT
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Contacts; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Settings )
public final class android.provider.Contacts$Settings extends java.lang.Object implements android.provider.BaseColumns, android.provider.Contacts$SettingsColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_DIRECTORY

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String SYNC_EVERYTHING
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static java.lang.String getSetting(
android.content.ContentResolver
java.lang.String
java.lang.String)

public static void setSetting(
android.content.ContentResolver
java.lang.String
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Contacts$Intents;Landroid/provider/Contacts$Extensions;Landroid/provider/Contacts$ExtensionsColumns;Landroid/provider/Contacts$Photos;Landroid/provider/Contacts$PhotosColumns;Landroid/provider/Contacts$Organizations;Landroid/provider/Contacts$OrganizationColumns;Landroid/provider/Contacts$Presence;Landroid/provider/Contacts$PresenceColumns;Landroid/provider/Contacts$ContactMethods;Landroid/provider/Contacts$ContactMethodsColumns;Landroid/provider/Contacts$GroupMembership;Landroid/provider/Contacts$Phones;Landroid/provider/Contacts$PhonesColumns;Landroid/provider/Contacts$Groups;Landroid/provider/Contacts$GroupsColumns;Landroid/provider/Contacts$People;Landroid/provider/Contacts$PeopleColumns;Landroid/provider/Contacts$Settings;Landroid/provider/Contacts$SettingsColumns; )
public class android.provider.Contacts extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String AUTHORITY

public static final android.net.Uri CONTENT_URI

public static final int KIND_EMAIL

public static final int KIND_IM

public static final int KIND_ORGANIZATION

public static final int KIND_PHONE

public static final int KIND_POSTAL

private static final java.lang.String TAG
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________


public final class android.provider.Downloads extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String CONTROL

public static final int CONTROL_PAUSE

public static final int CONTROL_RUN

public static final int CONTROL_STOP

public static final java.lang.String COOKIE_DATA

public static final java.lang.String CURRENT_BYTES

public static final java.lang.String DESCRIPTION

public static final java.lang.String DESTINATION

public static final int DESTINATION_CACHE_PARTITION

public static final int DESTINATION_CACHE_PARTITION_PURGEABLE

public static final int DESTINATION_DATA_CACHE

public static final int DESTINATION_EXTERNAL

public static final java.lang.String DOWNLOAD_COMPLETED_ACTION

public static final java.lang.String ENTITY

public static final java.lang.String ETAG

public static final java.lang.String FAILED_CONNECTIONS

public static final java.lang.String FILENAME

public static final java.lang.String FILENAME_HINT

public static final java.lang.String LAST_MODIFICATION

public static final java.lang.String MEDIA_SCANNED

public static final java.lang.String METHOD

public static final int METHOD_GET

public static final int METHOD_POST

public static final java.lang.String MIMETYPE

public static final java.lang.String NOTIFICATION_CLASS

public static final java.lang.String NOTIFICATION_CLICKED_ACTION

public static final java.lang.String NOTIFICATION_EXTRAS

public static final java.lang.String NOTIFICATION_PACKAGE

public static final java.lang.String NO_INTEGRITY

public static final java.lang.String NO_SYSTEM_FILES

public static final java.lang.String OTA_UPDATE

public static final java.lang.String OTHER_UID

public static final java.lang.String REFERER

public static final java.lang.String STATUS

public static final int STATUS_BAD_REQUEST

public static final int STATUS_CANCELED

public static final int STATUS_CANCELLED

public static final int STATUS_ERROR

public static final int STATUS_FILE_ERROR

public static final int STATUS_HTTP_DATA_ERROR

public static final int STATUS_HTTP_EXCEPTION

public static final int STATUS_LENGTH_REQUIRED

public static final int STATUS_NOT_ACCEPTABLE

public static final int STATUS_NOT_AUTHORIZED

public static final int STATUS_PENDING

public static final int STATUS_PENDING_PAUSED

public static final int STATUS_PRECONDITION_FAILED

public static final int STATUS_RUNNING

public static final int STATUS_RUNNING_PAUSED

public static final int STATUS_SUCCESS

public static final int STATUS_UNHANDLED_HTTP_CODE

public static final int STATUS_UNHANDLED_REDIRECT

public static final int STATUS_UNKNOWN_ERROR

public static final java.lang.String TITLE

public static final java.lang.String TOTAL_BYTES

public static final java.lang.String UID

public static final java.lang.String URI

public static final java.lang.String USER_AGENT

public static final java.lang.String VISIBILITY

public static final int VISIBILITY_HIDDEN

public static final int VISIBILITY_VISIBLE

public static final int VISIBILITY_VISIBLE_NOTIFY_COMPLETED
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static boolean isStatusClientError(
int)

public static boolean isStatusCompleted(
int)

public static boolean isStatusError(
int)

public static boolean isStatusInformational(
int)

public static boolean isStatusServerError(
int)

public static boolean isStatusSuccess(
int)

public static boolean isStatusSuspended(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/DrmStore; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =Columns )
public abstract interface class android.provider.DrmStore$Columns extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String DATA

public static final java.lang.String MIME_TYPE

public static final java.lang.String SIZE

public static final java.lang.String TITLE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =Audio )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/DrmStore; )
public abstract interface class android.provider.DrmStore$Audio extends java.lang.Object implements android.provider.DrmStore$Columns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =Images )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/DrmStore; )
public abstract interface class android.provider.DrmStore$Images extends java.lang.Object implements android.provider.DrmStore$Columns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/DrmStore$Audio;Landroid/provider/DrmStore$Images;Landroid/provider/DrmStore$Columns; )
public final class android.provider.DrmStore extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String ACCESS_DRM_PERMISSION

public static final java.lang.String AUTHORITY

private static final java.lang.String TAG
----------------METHODS----------------

public void <init>()

public static final android.content.Intent addDrmFile(
android.content.ContentResolver
java.io.File
java.lang.String)

public static void enforceAccessDrmPermission(
android.content.Context)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.provider.Gmail$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Attachment )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
public final class android.provider.Gmail$Attachment extends java.lang.Object

----------------FIELDS----------------

public java.lang.String contentType

public java.lang.String name

public android.provider.Gmail$AttachmentOrigin origin

public java.lang.String originExtras

public java.lang.String partId

public java.lang.String simpleContentType

public int size
----------------METHODS----------------

public void <init>()

public static android.provider.Gmail$Attachment parseJoinedString(
java.lang.String)

public java.lang.String toJoinedString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =AttachmentColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
public final class android.provider.Gmail$AttachmentColumns extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String FILENAME

public static final java.lang.String STATUS
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16409 name =AttachmentOrigin )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/provider/Gmail$AttachmentOrigin;>; )
public final class android.provider.Gmail$AttachmentOrigin extends java.lang.Enum

----------------FIELDS----------------

private static final android.provider.Gmail$AttachmentOrigin[] $VALUES

public static final android.provider.Gmail$AttachmentOrigin LOCAL_FILE

public static final android.provider.Gmail$AttachmentOrigin SERVER_ATTACHMENT

private static final java.lang.String SERVER_EXTRAS_SEPARATOR
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static java.lang.String localFileExtras(
android.net.Uri)

public static java.lang.String serverExtras(
long
long
java.lang.String)

public static java.lang.String[] splitServerExtras(
java.lang.String)

public static android.provider.Gmail$AttachmentOrigin valueOf(
java.lang.String)

public static android.provider.Gmail$AttachmentOrigin[] values()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/provider/Gmail$AttachmentRendition;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =AttachmentRendition )
public final class android.provider.Gmail$AttachmentRendition extends java.lang.Enum

----------------FIELDS----------------

private static final android.provider.Gmail$AttachmentRendition[] $VALUES

public static final android.provider.Gmail$AttachmentRendition BEST

public static final android.provider.Gmail$AttachmentRendition SIMPLE
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.provider.Gmail$AttachmentRendition valueOf(
java.lang.String)

public static android.provider.Gmail$AttachmentRendition[] values()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/TextUtils; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Ljava/lang/Iterable<Ljava/lang/String;>; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =StringSplitter )
public abstract interface class android.text.TextUtils$StringSplitter extends java.lang.Object implements java.lang.Iterable

----------------FIELDS----------------
----------------METHODS----------------

public abstract void setString(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =SimpleStringSplitter )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/text/TextUtils$StringSplitter;Ljava/util/Iterator<Ljava/lang/String;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/text/TextUtils; )
public class android.text.TextUtils$SimpleStringSplitter extends java.lang.Object implements android.text.TextUtils$StringSplitter, java.util.Iterator

----------------FIELDS----------------

private char mDelimiter

private int mLength

private int mPosition

private java.lang.String mString
----------------METHODS----------------

public void <init>(
char)

public boolean hasNext()
@dalvik.annotation.Signature (value =()Ljava/util/Iterator<Ljava/lang/String;>; )
public java.util.Iterator iterator()

public volatile java.lang.Object next()

public java.lang.String next()

public void remove()

public void setString(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =CommaStringSplitter )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
 class android.provider.Gmail$CommaStringSplitter extends android.text.TextUtils$SimpleStringSplitter

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void setString(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =ConversationColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
public final class android.provider.Gmail$ConversationColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String DATE

public static final java.lang.String FORCE_ALL_UNREAD

public static final java.lang.String FROM

public static final java.lang.String HAS_ATTACHMENTS

public static final java.lang.String HAS_MESSAGES_WITH_ERRORS

public static final java.lang.String ID

public static final java.lang.String LABEL_IDS

public static final java.lang.String MAX_MESSAGE_ID

public static final java.lang.String NUM_MESSAGES

public static final java.lang.String PERSONAL_LEVEL

public static final java.lang.String SNIPPET

public static final java.lang.String SUBJECT
----------------METHODS----------------

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =MailCursor )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
public class android.provider.Gmail$MailCursor extends android.database.ContentObserver

----------------FIELDS----------------

protected java.lang.String mAccount

protected android.database.Cursor mCursor
@dalvik.annotation.Signature (value =Ljava/util/Set<Landroid/provider/Gmail$MailCursorObserver;>; )
private java.util.Set mObservers

private android.content.ContentValues mUpdateValues
----------------METHODS----------------

protected void <init>(
java.lang.String
android.database.Cursor)

protected void checkCursor()

protected void checkThread()

public final int count()

public final boolean deliverSelfNotifications()

public java.lang.String getAccount()

public android.database.Cursor getCursor()

protected java.lang.String getStringInColumn(
int)

protected android.content.ContentValues getUpdateValues()

public final boolean moveTo(
int)

public final boolean next()

public void onChange(
boolean)

protected void onCursorPositionChanged()

public final int position()

public final void registerContentObserver(
android.database.ContentObserver)

public final void registerDataSetObserver(
android.database.DataSetObserver)

public final void registerObserver(
android.provider.Gmail$MailCursorObserver)

public final void release()

public final void unregisterContentObserver(
android.database.ContentObserver)

public final void unregisterDataSetObserver(
android.database.DataSetObserver)

public final void unregisterObserver(
android.provider.Gmail$MailCursorObserver)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =ConversationCursor )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
public final class android.provider.Gmail$ConversationCursor extends android.provider.Gmail$MailCursor

----------------FIELDS----------------

static final boolean $assertionsDisabled

private int mConversationIdIndex

private int mDateIndex

private int mForceAllUnreadIndex

private int mFromIndex

private int mHasAttachmentsIndex

private int mHasMessagesWithErrorsIndex

private int mLabelIdsIndex

private android.text.TextUtils$StringSplitter mLabelIdsSplitter

private android.provider.Gmail$LabelMap mLabelMap

private int mMaxMessageIdIndex

private int mNumMessagesIndex

private int mPersonalLevelIndex

private int mSnippetIndex

private int mSubjectIndex
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.provider.Gmail
java.lang.String
android.database.Cursor)

 void <init>(
android.provider.Gmail
java.lang.String
android.database.Cursor
android.provider.Gmail$1)

public void becomeActiveNetworkCursor()

public long getConversationId()

public long getDateMs()

public boolean getForceAllUnread()

public java.lang.String getFromSnippetInstructions()
@dalvik.annotation.Signature (value =()Ljava/util/Set<Ljava/lang/Long;>; )
public java.util.Set getLabelIds()
@dalvik.annotation.Signature (value =()Ljava/util/Set<Ljava/lang/String;>; )
public java.util.Set getLabels()
@dalvik.annotation.Signature (value =(Ljava/lang/String;Landroid/provider/Gmail$LabelMap;)Ljava/util/Set<Ljava/lang/String;>; )
public java.util.Set getLabels(
java.lang.String
android.provider.Gmail$LabelMap)

public long getMaxMessageId()

public int getNumMessages()

public android.provider.Gmail$PersonalLevel getPersonalLevel()

public java.lang.String getRawLabelIds()

public java.lang.String getSnippet()

public android.provider.Gmail$CursorStatus getStatus()

public java.lang.String getSubject()

public boolean hasAttachments()

public boolean hasMessagesWithErrors()

protected void onCursorPositionChanged()

public void retry()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/provider/Gmail$CursorStatus;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =CursorStatus )
public final class android.provider.Gmail$CursorStatus extends java.lang.Enum

----------------FIELDS----------------

private static final android.provider.Gmail$CursorStatus[] $VALUES

public static final android.provider.Gmail$CursorStatus ERROR

public static final android.provider.Gmail$CursorStatus LOADED

public static final android.provider.Gmail$CursorStatus LOADING
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.provider.Gmail$CursorStatus valueOf(
java.lang.String)

public static android.provider.Gmail$CursorStatus[] values()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =LabelColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
public final class android.provider.Gmail$LabelColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String CANONICAL_NAME

public static final java.lang.String NAME

public static final java.lang.String NUM_CONVERSATIONS

public static final java.lang.String NUM_UNREAD_CONVERSATIONS
----------------METHODS----------------

private void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
@dalvik.annotation.InnerClass (accessFlags =17 name =LabelCursor )
public final class android.provider.Gmail$LabelCursor extends android.provider.Gmail$MailCursor

----------------FIELDS----------------

private int mNameIndex

private int mNumConversationsIndex

private int mNumUnreadConversationsIndex

final android.provider.Gmail this$0
----------------METHODS----------------

private void <init>(
android.provider.Gmail
java.lang.String
android.database.Cursor)

public java.lang.String getName()

public int getNumConversations()

public int getNumUnreadConversations()

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.provider.Gmail$LabelMap$1 extends java.lang.Object implements java.util.Observer

----------------FIELDS----------------

final android.provider.Gmail$LabelMap this$0
----------------METHODS----------------

 void <init>(
android.provider.Gmail$LabelMap)

public void update(
java.util.Observable
java.lang.Object)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
@dalvik.annotation.InnerClass (accessFlags =25 name =LabelMap )
public final class android.provider.Gmail$LabelMap extends java.util.Observable

----------------FIELDS----------------

private static final android.content.ContentValues EMPTY_CONTENT_VALUES
@dalvik.annotation.Signature (value =Ljava/util/Set<Ljava/lang/String;>; )
private static final java.util.Set FORCED_INCLUDED_LABELS
@dalvik.annotation.Signature (value =Ljava/util/Set<Ljava/lang/String;>; )
private static final java.util.Set FORCED_INCLUDED_OR_PARTIAL_LABELS
@dalvik.annotation.Signature (value =Ljava/util/Set<Ljava/lang/String;>; )
private static final java.util.Set FORCED_UNSYNCED_LABELS
@dalvik.annotation.Signature (value =Ljava/util/List<Ljava/lang/String;>; )
private static final java.util.List SORTED_USER_MEANINGFUL_SYSTEM_LABELS
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Ljava/lang/Long;>; )
private java.util.Map mCanonicalNameToId

private long mLabelIdCached

private long mLabelIdChat

private long mLabelIdDraft

private long mLabelIdInbox

private long mLabelIdOutbox

private long mLabelIdSent

private long mLabelIdSpam

private long mLabelIdStarred

private long mLabelIdTrash

private long mLabelIdUnread

private long mLabelIdVoicemail

private long mLabelIdVoicemailInbox

private boolean mLabelsSynced

private android.content.ContentQueryMap mQueryMap
@dalvik.annotation.Signature (value =Ljava/util/SortedSet<Ljava/lang/String;>; )
private java.util.SortedSet mSortedUserLabels
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.ContentResolver
java.lang.String
boolean)

public void <init>(
android.database.Cursor
boolean)

static void access$400(
android.provider.Gmail$LabelMap)

static void access$500(
android.provider.Gmail$LabelMap)

private void checkLabelsSynced()
@dalvik.annotation.Signature (value =()Ljava/util/Set<Ljava/lang/String;>; )
public static java.util.Set getForcedIncludedLabels()
@dalvik.annotation.Signature (value =()Ljava/util/Set<Ljava/lang/String;>; )
public static java.util.Set getForcedIncludedOrPartialLabels()
@dalvik.annotation.Signature (value =()Ljava/util/Set<Ljava/lang/String;>; )
public static java.util.Set getForcedUnsyncedLabels()

private android.content.ContentValues getLabelIdValues(
long)
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public static java.util.List getSortedUserMeaningfulSystemLabels()

private void init(
android.database.Cursor
boolean)

private void updateDataStructures()

public void close()

public java.lang.String getCanonicalName(
long)

public long getLabelId(
java.lang.String)

public long getLabelIdCached()

public long getLabelIdChat()

public long getLabelIdDraft()

public long getLabelIdInbox()

public long getLabelIdOutbox()

public long getLabelIdSent()

public long getLabelIdSpam()

public long getLabelIdStarred()

public long getLabelIdTrash()

public long getLabelIdUnread()

public long getLabelIdVoicemail()

public long getLabelIdVoicemailInbox()

public java.lang.String getName(
long)

public int getNumConversations(
long)

public int getNumConversations(
java.lang.String)

public int getNumUnreadConversations(
long)

public int getNumUnreadConversations(
java.lang.String)
@dalvik.annotation.Signature (value =()Ljava/util/SortedSet<Ljava/lang/String;>; )
public java.util.SortedSet getSortedUserLabels()

public boolean hasLabel(
long)

public boolean labelsSynced()

public void requery()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =MailCursorObserver )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
public abstract interface class android.provider.Gmail$MailCursorObserver extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onCursorChanged(
android.provider.Gmail$MailCursor)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =MessageColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
public final class android.provider.Gmail$MessageColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String BCC

public static final java.lang.String BODY

public static final java.lang.String CC

public static final java.lang.String CONVERSATION_ID

public static final java.lang.String DATE_RECEIVED_MS

public static final java.lang.String DATE_SENT_MS

public static final java.lang.String EMBEDS_EXTERNAL_RESOURCES

public static final java.lang.String ERROR

public static final java.lang.String FAKE_REF_MESSAGE_ID

public static final java.lang.String FAKE_SAVE

public static final java.lang.String FROM

public static final java.lang.String ID

public static final java.lang.String JOINED_ATTACHMENT_INFOS

public static final java.lang.String LABEL_IDS

public static final java.lang.String LIST_INFO

public static final java.lang.String MESSAGE_ID

public static final java.lang.String PERSONAL_LEVEL

public static final java.lang.String REPLY_TO

public static final java.lang.String SNIPPET

public static final java.lang.String SUBJECT

public static final java.lang.String TO
----------------METHODS----------------

private void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
@dalvik.annotation.InnerClass (accessFlags =25 name =MessageCursor )
public final class android.provider.Gmail$MessageCursor extends android.provider.Gmail$MailCursor

----------------FIELDS----------------

static final boolean $assertionsDisabled

private int mBccIndex

private int mBodyEmbedsExternalResourcesIndex

private int mBodyIndex

private int mCcIndex

private android.content.ContentResolver mContentResolver

private int mConversationIdIndex

private int mDateReceivedMsIndex

private int mDateSentMsIndex

private int mErrorIndex

private int mFromIndex

private int mIdIndex

 long mInReplyToLocalMessageId

private int mJoinedAttachmentInfosIndex

private int mLabelIdsIndex

private android.text.TextUtils$StringSplitter mLabelIdsSplitter

private android.provider.Gmail$LabelMap mLabelMap

private int mListInfoIndex

private int mPersonalLevelIndex

 boolean mPreserveAttachments

private int mReplyToIndex

private int mSnippetIndex

private int mSubjectIndex

private int mToIndex
----------------METHODS----------------

static void <clinit>()

protected void <init>(
android.content.ContentResolver
java.lang.String
long
boolean)

public void <init>(
android.provider.Gmail
android.content.ContentResolver
java.lang.String
android.database.Cursor)

private java.lang.String[] getAddresses(
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/provider/Gmail$NonexistentLabelException; )
public void addOrRemoveLabel(
java.lang.String
boolean)
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Landroid/provider/Gmail$Attachment;>; )
public java.util.ArrayList getAttachmentInfos()

public java.lang.String[] getBccAddresses()

public java.lang.String getBody()

public boolean getBodyEmbedsExternalResources()

public java.lang.String[] getCcAddresses()

public long getConversationId()

public long getDateReceivedMs()

public long getDateSentMs()

public java.lang.String getErrorText()

public boolean getExpanded()

public java.lang.String getFromAddress()
@dalvik.annotation.Signature (value =()Ljava/util/Set<Ljava/lang/Long;>; )
public java.util.Set getLabelIds()

public java.lang.String getListInfo()

public long getMessageId()

public android.provider.Gmail$PersonalLevel getPersonalLevel()

public java.lang.String getRawLabelIds()

public java.lang.String[] getReplyToAddress()

public java.lang.String getSnippet()

public android.provider.Gmail$CursorStatus getStatus()

public java.lang.String getSubject()

public java.lang.String[] getToAddresses()

protected void onCursorPositionChanged()

public void retry()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =MessageModification )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
public class android.provider.Gmail$MessageModification extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/provider/Gmail$Attachment;>;)Ljava/lang/String; )
public static java.lang.String joinedAttachmentsString(
java.util.List)
@dalvik.annotation.Signature (value =(Landroid/content/ContentValues;Ljava/util/List<Landroid/provider/Gmail$Attachment;>;)V )
public static void putAttachments(
android.content.ContentValues
java.util.List)

public static void putBccAddresses(
android.content.ContentValues
java.lang.String[])

public static void putBody(
android.content.ContentValues
java.lang.String)

public static void putCcAddresses(
android.content.ContentValues
java.lang.String[])

public static void putSubject(
android.content.ContentValues
java.lang.String)

public static void putToAddresses(
android.content.ContentValues
java.lang.String[])

public static void sendOrSaveExistingMessage(
android.content.ContentResolver
java.lang.String
long
android.content.ContentValues
boolean)

public static long sendOrSaveNewMessage(
android.content.ContentResolver
java.lang.String
android.content.ContentValues
long
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =NonexistentLabelException )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
public class android.provider.Gmail$NonexistentLabelException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16409 name =PersonalLevel )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/provider/Gmail$PersonalLevel;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
public final class android.provider.Gmail$PersonalLevel extends java.lang.Enum

----------------FIELDS----------------

private static final android.provider.Gmail$PersonalLevel[] $VALUES

public static final android.provider.Gmail$PersonalLevel NOT_TO_ME

public static final android.provider.Gmail$PersonalLevel ONLY_TO_ME

public static final android.provider.Gmail$PersonalLevel TO_ME_AND_OTHERS

private int mLevel
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.provider.Gmail$PersonalLevel fromInt(
int)

public static android.provider.Gmail$PersonalLevel valueOf(
java.lang.String)

public static android.provider.Gmail$PersonalLevel[] values()

public int toInt()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Settings )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
public class android.provider.Gmail$Settings extends java.lang.Object

----------------FIELDS----------------

public long conversationAgeDays

public java.lang.String[] labelsIncluded

public java.lang.String[] labelsPartial

public long maxAttachmentSizeMb
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Gmail; )
@dalvik.annotation.InnerClass (accessFlags =25 name =SettingsColumns )
public final class android.provider.Gmail$SettingsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String CONVERSATION_AGE_DAYS

public static final java.lang.String LABELS_INCLUDED

public static final java.lang.String LABELS_PARTIAL

public static final java.lang.String MAX_ATTACHMENET_SIZE_MB
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Gmail$1;Landroid/provider/Gmail$ConversationCursor;Landroid/provider/Gmail$MessageModification;Landroid/provider/Gmail$MessageCursor;Landroid/provider/Gmail$CursorStatus;Landroid/provider/Gmail$Attachment;Landroid/provider/Gmail$AttachmentOrigin;Landroid/provider/Gmail$AttachmentColumns;Landroid/provider/Gmail$AttachmentRendition;Landroid/provider/Gmail$PersonalLevel;Landroid/provider/Gmail$LabelMap;Landroid/provider/Gmail$LabelCursor;Landroid/provider/Gmail$NonexistentLabelException;Landroid/provider/Gmail$MailCursorObserver;Landroid/provider/Gmail$MailCursor;Landroid/provider/Gmail$Settings;Landroid/provider/Gmail$SettingsColumns;Landroid/provider/Gmail$LabelColumns;Landroid/provider/Gmail$MessageColumns;Landroid/provider/Gmail$ConversationColumns;Landroid/provider/Gmail$CommaStringSplitter; )
public final class android.provider.Gmail extends java.lang.Object

----------------FIELDS----------------

static final boolean $assertionsDisabled

public static final java.lang.String ATTACHMENT_INFO_SEPARATOR

public static final java.util.regex.Pattern ATTACHMENT_INFO_SEPARATOR_PATTERN

public static final java.lang.String AUTHORITY

private static final java.lang.String AUTHORITY_PLUS_CONVERSATIONS

private static final java.lang.String AUTHORITY_PLUS_LABELS

private static final java.lang.String AUTHORITY_PLUS_MESSAGES

private static final java.lang.String AUTHORITY_PLUS_SETTINGS

public static final android.net.Uri BASE_URI

public static final java.lang.String COMMAND_ACTIVATE

public static final java.lang.String COMMAND_RESPONSE_OK

public static final java.lang.String COMMAND_RESPONSE_UNKNOWN

public static final java.lang.String COMMAND_RETRY

private static final char COMMA_SEPARATOR

public static final java.util.regex.Pattern COMMA_SEPARATOR_PATTERN

private static final android.net.Uri CONVERSATIONS_URI

private static java.lang.String[] CONVERSATION_PROJECTION

public static final java.lang.String EMAIL_SEPARATOR

public static final java.util.regex.Pattern EMAIL_SEPARATOR_PATTERN

public static final java.lang.String EXTRA_STATUS

public static final java.lang.String GMAIL_AUTH_SERVICE

public static final java.lang.String INSERT_PARAM_ATTACHMENT_ORIGIN

public static final java.lang.String INSERT_PARAM_ATTACHMENT_ORIGIN_EXTRAS

private static final android.net.Uri LABELS_URI

public static final java.lang.String LABEL_ALL

public static final java.lang.String LABEL_CACHED

public static final java.lang.String LABEL_CHAT

public static final java.lang.String LABEL_DRAFT

public static final java.lang.String LABEL_INBOX

public static final java.lang.String LABEL_OUTBOX

private static java.lang.String[] LABEL_PROJECTION

public static final java.lang.String LABEL_SENT

public static final java.lang.String LABEL_SPAM

public static final java.lang.String LABEL_STARRED

public static final java.lang.String LABEL_TRASH

public static final java.lang.String LABEL_UNREAD

public static final java.lang.String LABEL_VOICEMAIL

public static final java.lang.String LABEL_VOICEMAIL_INBOX

private static java.lang.String[] MESSAGE_PROJECTION

private static final java.util.regex.Pattern NAME_ADDRESS_PATTERN

public static final java.lang.String PROVIDER_CHANGED_EXTRA_ACCOUNT

public static final java.lang.String PROVIDER_CHANGED_EXTRA_COUNT

public static final java.lang.String PROVIDER_CHANGED_EXTRA_GET_ATTENTION

public static final java.lang.String PROVIDER_CHANGED_EXTRA_TAG_LABEL

public static final java.lang.String RESPOND_INPUT_COMMAND

public static final java.lang.String RESPOND_OUTPUT_COMMAND_RESPONSE

public static final java.lang.Character SENDER_LIST_SEPARATOR

public static final java.lang.String SENDER_LIST_TOKEN_ELIDED

public static final java.lang.String SENDER_LIST_TOKEN_LITERAL

public static final java.lang.String SENDER_LIST_TOKEN_NUM_DRAFTS

public static final java.lang.String SENDER_LIST_TOKEN_NUM_MESSAGES

public static final java.lang.String SENDER_LIST_TOKEN_SENDING

public static final java.lang.String SENDER_LIST_TOKEN_SEND_FAILED

private static java.lang.String[] SETTINGS_PROJECTION

private static final android.net.Uri SETTINGS_URI

private static final char SPACE_SEPARATOR

public static final java.util.regex.Pattern SPACE_SEPARATOR_PATTERN

private static final java.lang.String TAG

private static final java.util.regex.Pattern UNNAMED_ADDRESS_PATTERN
@dalvik.annotation.Signature (value =Ljava/util/Set<Ljava/lang/String;>; )
private static final java.util.Set USER_SETTABLE_BUILTIN_LABELS
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/Integer;Ljava/lang/Integer;>; )
private static final java.util.Map sPriorityToLength

public static java.lang.String[] sSenderFragments

public static final android.text.TextUtils$SimpleStringSplitter sSenderListSplitter

private android.content.ContentResolver mContentResolver
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Landroid/provider/Gmail$LabelMap;>; )
private java.util.Map mLabelMaps
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.ContentResolver)

static java.lang.String access$100(
java.lang.String)

static android.net.Uri access$200()

static java.lang.String[] access$300()

public static void addOrRemoveLabelOnMessage(
android.content.ContentResolver
java.lang.String
long
long
java.lang.String
boolean)

public static android.net.Uri getAttachmentDownloadUri(
android.net.Uri)

public static android.net.Uri getAttachmentUri(
java.lang.String
long
android.provider.Gmail$Attachment
android.provider.Gmail$AttachmentRendition
boolean)
@dalvik.annotation.Signature (value =(Landroid/provider/Gmail$LabelMap;Landroid/text/TextUtils$StringSplitter;)Ljava/util/Set<Ljava/lang/String;>; )
public static java.util.Set getCanonicalNamesFromLabelIdsString(
android.provider.Gmail$LabelMap
android.text.TextUtils$StringSplitter)

public static java.lang.String getEmailFromAddressString(
java.lang.String)
@dalvik.annotation.Signature (value =(Landroid/text/TextUtils$StringSplitter;)Ljava/util/Set<Ljava/lang/Long;>; )
public static java.util.Set getLabelIdsFromLabelIdsString(
android.text.TextUtils$StringSplitter)
@dalvik.annotation.Signature (value =(Ljava/util/Set<Ljava/lang/Long;>;)Ljava/lang/String; )
public static java.lang.String getLabelIdsStringFromLabelIds(
java.util.Set)

public static java.lang.String getNameFromAddressString(
java.lang.String)

public static void getSenderSnippet(
java.lang.String
android.text.SpannableStringBuilder
int
android.text.style.CharacterStyle
android.text.style.CharacterStyle
java.lang.CharSequence
java.lang.CharSequence
java.lang.CharSequence
java.lang.CharSequence
java.lang.CharSequence
boolean
boolean)

public static boolean isLabelUserDefined(
java.lang.String)

public static boolean isLabelUserSettable(
java.lang.String)

public static android.text.TextUtils$StringSplitter newConversationLabelIdsSplitter()

public static android.text.TextUtils$StringSplitter newMessageLabelIdsSplitter()

private static java.lang.String toNonnullString(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/provider/Gmail$NonexistentLabelException; )
public void addOrRemoveLabelOnConversation(
java.lang.String
long
long
java.lang.String
boolean)

public void expungeMessage(
java.lang.String
long)

public android.provider.Gmail$ConversationCursor getConversationCursorForCursor(
java.lang.String
android.database.Cursor)

public android.provider.Gmail$ConversationCursor getConversationCursorForQuery(
java.lang.String
java.lang.String)

public android.provider.Gmail$LabelMap getLabelMap(
java.lang.String)

public android.provider.Gmail$MessageCursor getLocalMessageCursorForQuery(
java.lang.String
java.lang.String)

public android.provider.Gmail$MessageCursor getMessageCursorForConversationId(
java.lang.String
long)

public android.provider.Gmail$MessageCursor getMessageCursorForMessageId(
java.lang.String
long)

public android.provider.Gmail$Settings getSettings(
java.lang.String)

public void runQueryForConversations(
java.lang.String
android.content.AsyncQueryHandler
int
java.lang.String)

public void setSettings(
java.lang.String
android.provider.Gmail$Settings)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =AccountColumns )
public abstract interface class android.provider.Im$AccountColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACTIVE

public static final java.lang.String KEEP_SIGNED_IN

public static final java.lang.String LAST_LOGIN_STATE

public static final java.lang.String LOCKED

public static final java.lang.String NAME

public static final java.lang.String PASSWORD

public static final java.lang.String PROVIDER

public static final java.lang.String USERNAME
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Account )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public final class android.provider.Im$Account extends java.lang.Object implements android.provider.BaseColumns, android.provider.Im$AccountColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

private static final int PROVIDER_COLUMN

private static final java.lang.String[] PROVIDER_PROJECTION
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static final long getProviderIdForAccount(
android.content.ContentResolver
long)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =AvatarsColumns )
public abstract interface class android.provider.Im$AvatarsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACCOUNT

public static final java.lang.String CONTACT

public static final java.lang.String DATA

public static final java.lang.String HASH

public static final java.lang.String PROVIDER
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Avatars )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public final class android.provider.Im$Avatars extends java.lang.Object implements android.provider.BaseColumns, android.provider.Im$AvatarsColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final android.net.Uri CONTENT_URI_AVATARS_BY

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =BaseMessageColumns )
public abstract interface class android.provider.Im$BaseMessageColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String BODY

public static final java.lang.String CONTACT

public static final java.lang.String DATE

public static final java.lang.String ERROR_CODE

public static final java.lang.String ERROR_MESSAGE

public static final java.lang.String PACKET_ID

public static final java.lang.String TYPE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =BlockedListColumns )
public abstract interface class android.provider.Im$BlockedListColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACCOUNT

public static final java.lang.String NICKNAME

public static final java.lang.String PROVIDER

public static final java.lang.String USERNAME
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =BlockedList )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public final class android.provider.Im$BlockedList extends java.lang.Object implements android.provider.BaseColumns, android.provider.Im$BlockedListColumns

----------------FIELDS----------------

public static final java.lang.String ACCOUNT_NAME

public static final java.lang.String AVATAR_DATA

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String PROVIDER_NAME
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =ChatsColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public abstract interface class android.provider.Im$ChatsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String CONTACT_ID

public static final java.lang.String GROUP_CHAT

public static final java.lang.String JID_RESOURCE

public static final java.lang.String LAST_MESSAGE_DATE

public static final java.lang.String LAST_UNREAD_MESSAGE

public static final java.lang.String UNSENT_COMPOSED_MESSAGE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Chats )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public final class android.provider.Im$Chats extends java.lang.Object implements android.provider.BaseColumns, android.provider.Im$ChatsColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final android.net.Uri CONTENT_URI_BY_ACCOUNT

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =ContactListColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public abstract interface class android.provider.Im$ContactListColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACCOUNT

public static final java.lang.String NAME

public static final java.lang.String PROVIDER
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =25 name =ContactList )
public final class android.provider.Im$ContactList extends java.lang.Object implements android.provider.BaseColumns, android.provider.Im$ContactListColumns

----------------FIELDS----------------

public static final java.lang.String ACCOUNT_NAME

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String PROVIDER_NAME
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ContactsColumns )
public abstract interface class android.provider.Im$ContactsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACCOUNT

public static final java.lang.String CONTACTLIST

public static final java.lang.String NICKNAME

public static final java.lang.String PROVIDER

public static final java.lang.String QUICK_CONTACT

public static final java.lang.String REJECTED

public static final java.lang.String SUBSCRIPTION_STATUS

public static final int SUBSCRIPTION_STATUS_NONE

public static final int SUBSCRIPTION_STATUS_SUBSCRIBE_PENDING

public static final int SUBSCRIPTION_STATUS_UNSUBSCRIBE_PENDING

public static final java.lang.String SUBSCRIPTION_TYPE

public static final int SUBSCRIPTION_TYPE_BOTH

public static final int SUBSCRIPTION_TYPE_FROM

public static final int SUBSCRIPTION_TYPE_INVITATIONS

public static final int SUBSCRIPTION_TYPE_NONE

public static final int SUBSCRIPTION_TYPE_REMOVE

public static final int SUBSCRIPTION_TYPE_TO

public static final java.lang.String TYPE

public static final int TYPE_BLOCKED

public static final int TYPE_GROUP

public static final int TYPE_HIDDEN

public static final int TYPE_NORMAL

public static final int TYPE_PINNED

public static final int TYPE_TEMPORARY

public static final java.lang.String USERNAME
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =PresenceColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public abstract interface class android.provider.Im$PresenceColumns extends java.lang.Object implements android.provider.Im$CommonPresenceColumns

----------------FIELDS----------------

public static final java.lang.String CLIENT_TYPE

public static final int CLIENT_TYPE_ANDROID

public static final int CLIENT_TYPE_DEFAULT

public static final int CLIENT_TYPE_MOBILE

public static final java.lang.String CONTACT_ID

public static final java.lang.String JID_RESOURCE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Contacts )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public final class android.provider.Im$Contacts extends java.lang.Object implements android.provider.BaseColumns, android.provider.Im$ContactsColumns, android.provider.Im$PresenceColumns, android.provider.Im$ChatsColumns

----------------FIELDS----------------

public static final java.lang.String AVATAR_DATA

public static final java.lang.String AVATAR_HASH

public static final android.net.Uri BULK_CONTENT_URI

public static final java.lang.String CHATS_CONTACT

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final android.net.Uri CONTENT_URI_BLOCKED_CONTACTS

public static final android.net.Uri CONTENT_URI_CHAT_CONTACTS

public static final android.net.Uri CONTENT_URI_CHAT_CONTACTS_BY

public static final android.net.Uri CONTENT_URI_CONTACTS_BAREBONE

public static final android.net.Uri CONTENT_URI_CONTACTS_BY

public static final android.net.Uri CONTENT_URI_OFFLINE_CONTACTS_BY

public static final android.net.Uri CONTENT_URI_ONLINE_CONTACTS_BY

public static final android.net.Uri CONTENT_URI_WITH_PRESENCE

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =ContactsEtagColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public abstract interface class android.provider.Im$ContactsEtagColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACCOUNT

public static final java.lang.String ETAG
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =25 name =ContactsEtag )
public final class android.provider.Im$ContactsEtag extends java.lang.Object implements android.provider.BaseColumns, android.provider.Im$ContactsEtagColumns

----------------FIELDS----------------

private static int COLUMN_ETAG

private static final java.lang.String[] CONTACT_ETAG_PROJECTION

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static final java.lang.String getRosterEtag(
android.content.ContentResolver
long)

public static final android.database.Cursor query(
android.content.ContentResolver
java.lang.String[])

public static final android.database.Cursor query(
android.content.ContentResolver
java.lang.String[]
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =CredentialSettingsColumns )
public abstract interface class android.provider.Im$CredentialSettingsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String NAME

public static final java.lang.String PROVIDER

public static final java.lang.String VALUE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =25 name =CredentialSettings )
public final class android.provider.Im$CredentialSettings extends java.lang.Object implements android.provider.BaseColumns, android.provider.Im$CredentialSettingsColumns

----------------FIELDS----------------

public static final java.lang.String CLIENT_ID

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final java.lang.String PRIVATE_CLIENT_KEY1

public static final java.lang.String PRIVATE_CLIENT_KEY2
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =GroupMemberColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public abstract interface class android.provider.Im$GroupMemberColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String GROUP

public static final java.lang.String NICKNAME

public static final java.lang.String USERNAME
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =25 name =GroupMembers )
public final class android.provider.Im$GroupMembers extends java.lang.Object implements android.provider.Im$GroupMemberColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =GroupMessageColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public abstract interface class android.provider.Im$GroupMessageColumns extends java.lang.Object implements android.provider.Im$BaseMessageColumns

----------------FIELDS----------------

public static final java.lang.String GROUP
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =25 name =GroupMessages )
public final class android.provider.Im$GroupMessages extends java.lang.Object implements android.provider.BaseColumns, android.provider.Im$GroupMessageColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final android.net.Uri CONTENT_URI_GROUP_MESSAGES_BY

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static final android.net.Uri getContentUriByGroup(
long)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =InvitationColumns )
public abstract interface class android.provider.Im$InvitationColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACCOUNT

public static final java.lang.String GROUP_NAME

public static final java.lang.String INVITE_ID

public static final java.lang.String NOTE

public static final java.lang.String PROVIDER

public static final java.lang.String SENDER

public static final java.lang.String STATUS

public static final int STATUS_ACCEPTED

public static final int STATUS_PENDING

public static final int STATUS_REJECTED
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Invitation )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public final class android.provider.Im$Invitation extends java.lang.Object implements android.provider.Im$InvitationColumns, android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =LastRmqIdColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public abstract interface class android.provider.Im$LastRmqIdColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String RMQ_ID
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =25 name =LastRmqId )
public final class android.provider.Im$LastRmqId extends java.lang.Object implements android.provider.BaseColumns, android.provider.Im$LastRmqIdColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

private static java.lang.String[] PROJECTION
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static final long queryLastRmqId(
android.content.ContentResolver)

public static final void saveLastRmqId(
android.content.ContentResolver
long)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =MessageType )
public abstract interface class android.provider.Im$MessageType extends java.lang.Object

----------------FIELDS----------------

public static final int CONVERT_TO_GROUPCHAT

public static final int INCOMING

public static final int OUTGOING

public static final int POSTPONED

public static final int PRESENCE_AVAILABLE

public static final int PRESENCE_AWAY

public static final int PRESENCE_DND

public static final int PRESENCE_UNAVAILABLE

public static final int STATUS
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =MessagesColumns )
public abstract interface class android.provider.Im$MessagesColumns extends java.lang.Object implements android.provider.Im$BaseMessageColumns

----------------FIELDS----------------

public static final java.lang.String ACCOUNT

public static final java.lang.String PROVIDER
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Messages )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public final class android.provider.Im$Messages extends java.lang.Object implements android.provider.BaseColumns, android.provider.Im$MessagesColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final android.net.Uri CONTENT_URI_MESSAGES_BY

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static final android.net.Uri getContentUriByContact(
long
long
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OutgoingRmqColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public abstract interface class android.provider.Im$OutgoingRmqColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String DATA

public static final java.lang.String RMQ_ID

public static final java.lang.String TIMESTAMP

public static final java.lang.String TYPE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =OutgoingRmq )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public final class android.provider.Im$OutgoingRmq extends java.lang.Object implements android.provider.BaseColumns, android.provider.Im$OutgoingRmqColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final android.net.Uri CONTENT_URI_FOR_HIGHEST_RMQ_ID

public static final java.lang.String DEFAULT_SORT_ORDER

private static java.lang.String[] RMQ_ID_PROJECTION
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static final long queryHighestRmqId(
android.content.ContentResolver)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Presence )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public final class android.provider.Im$Presence extends java.lang.Object implements android.provider.BaseColumns, android.provider.Im$PresenceColumns

----------------FIELDS----------------

public static final android.net.Uri BULK_CONTENT_URI

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final android.net.Uri CONTENT_URI_BY_ACCOUNT

public static final java.lang.String DEFAULT_SORT_ORDER

public static final android.net.Uri SEED_PRESENCE_BY_ACCOUNT_CONTENT_URI
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =ProviderColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public abstract interface class android.provider.Im$ProviderColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String FULLNAME

public static final java.lang.String NAME

public static final java.lang.String SIGNUP_URL
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Provider )
public final class android.provider.Im$Provider extends java.lang.Object implements android.provider.BaseColumns, android.provider.Im$ProviderColumns

----------------FIELDS----------------

public static final java.lang.String ACTIVE_ACCOUNT_ID

public static final java.lang.String ACTIVE_ACCOUNT_PW

public static final java.lang.String ACTIVE_ACCOUNT_USERNAME

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final android.net.Uri CONTENT_URI_WITH_ACCOUNT

public static final java.lang.String DEFAULT_SORT_ORDER

private static final java.lang.String[] PROVIDER_PROJECTION
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static java.lang.String getProviderCategoryFromName(
java.lang.String)

public static final long getProviderIdForName(
android.content.ContentResolver
java.lang.String)

public static java.lang.String getProviderNameForCategory(
java.lang.String)

public static final java.lang.String getProviderNameForId(
android.content.ContentResolver
long)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =ProviderCategories )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public abstract interface class android.provider.Im$ProviderCategories extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String AIM

public static final java.lang.String GTALK

public static final java.lang.String ICQ

public static final java.lang.String MSN

public static final java.lang.String YAHOO
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ProviderNames )
public abstract interface class android.provider.Im$ProviderNames extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String AIM

public static final java.lang.String GTALK

public static final java.lang.String ICQ

public static final java.lang.String MSN

public static final java.lang.String YAHOO
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im$ProviderSettings; )
@dalvik.annotation.InnerClass (accessFlags =9 name =QueryMap )
public class android.provider.Im$ProviderSettings$QueryMap extends android.content.ContentQueryMap

----------------FIELDS----------------

private android.content.ContentResolver mContentResolver

private long mProviderId
----------------METHODS----------------

public void <init>(
android.content.ContentResolver
long
boolean
android.os.Handler)

private boolean getBoolean(
java.lang.String
boolean)

private int getInteger(
java.lang.String
int)

private java.lang.String getString(
java.lang.String
java.lang.String)

public boolean getAutomaticallyConnectToGTalkServer()

public boolean getEnableNotification()

public boolean getHideOfflineContacts()

public java.lang.String getRingtoneURI()

public boolean getShowMobileIndicator()

public boolean getVibrate()

public void setAutomaticallyConnectToGTalkServer(
boolean)

public void setEnableNotification(
boolean)

public void setHideOfflineContacts(
boolean)

public void setRingtoneURI(
java.lang.String)

public void setShowMobileIndicator(
boolean)

public void setVibrate(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =ProviderSettingsColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public abstract interface class android.provider.Im$ProviderSettingsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String NAME

public static final java.lang.String PROVIDER

public static final java.lang.String VALUE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =ProviderSettings )
@dalvik.annotation.MemberClasses (value =Landroid/provider/Im$ProviderSettings$QueryMap; )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public class android.provider.Im$ProviderSettings extends java.lang.Object implements android.provider.Im$ProviderSettingsColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_ACCOUNT

public static final java.lang.String DEFUALT_DOMAIN

public static final java.lang.String IMPS_BASIC_PA_ONLY_PREF

public static final java.lang.String IMPS_CIR_CHANNEL_PREF

public static final java.lang.String IMPS_DATA_CHANNEL_PREF

public static final java.lang.String IMPS_DATA_ENCODING_PREF

public static final java.lang.String IMPS_HOST_PREF

public static final java.lang.String IMPS_MSISDN_PREF

public static final java.lang.String IMPS_PASSWORD_DIGEST_CLASS_PREF

public static final java.lang.String IMPS_PRESENCE_MAPPING_CLASS_PREF

public static final java.lang.String IMPS_SECURE_LOGIN_PREF

public static final java.lang.String LAST_RMQ_RECEIVED

public static final java.lang.String SETTING_AUTOMATICALLY_CONNECT_GTALK

public static final java.lang.String SETTING_AUTOMATICALLY_START_SERVICE

public static final java.lang.String SETTING_ENABLE_NOTIFICATION

public static final java.lang.String SETTING_HIDE_OFFLINE_CONTACTS

public static final java.lang.String SETTING_RINGTONE

public static final java.lang.String SETTING_RINGTONE_DEFAULT

public static final java.lang.String SETTING_SHOW_MOBILE_INDICATOR

public static final java.lang.String SETTING_VIBRATE

public static final java.lang.String SHOW_OFFLINE_CONTACTS

public static final java.lang.String SIGNUP_URL
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static boolean getBooleanValue(
android.content.ContentResolver
long
java.lang.String)

private static android.database.Cursor getSettingValue(
android.content.ContentResolver
long
java.lang.String)

public static java.lang.String getStringValue(
android.content.ContentResolver
long
java.lang.String)

public static void putBooleanValue(
android.content.ContentResolver
long
java.lang.String
boolean)

public static void putLongValue(
android.content.ContentResolver
long
java.lang.String
long)

public static void putStringValue(
android.content.ContentResolver
long
java.lang.String
java.lang.String)
@dalvik.annotation.Signature (value =(Landroid/content/ContentResolver;J)Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>; )
public static java.util.HashMap queryProviderSettings(
android.content.ContentResolver
long)

public static void setAutomaticallyConnectGTalk(
android.content.ContentResolver
long
boolean)

public static void setEnableNotification(
android.content.ContentResolver
long
boolean)

public static void setHideOfflineContacts(
android.content.ContentResolver
long
boolean)

public static void setRingtoneURI(
android.content.ContentResolver
long
java.lang.String)

public static void setShowMobileIndicator(
android.content.ContentResolver
long
boolean)

public static void setVibrate(
android.content.ContentResolver
long
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =SessionCookiesColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
public abstract interface class android.provider.Im$SessionCookiesColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACCOUNT

public static final java.lang.String NAME

public static final java.lang.String PROVIDER

public static final java.lang.String VALUE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Im; )
@dalvik.annotation.InnerClass (accessFlags =9 name =SessionCookies )
public class android.provider.Im$SessionCookies extends java.lang.Object implements android.provider.Im$SessionCookiesColumns, android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final android.net.Uri CONTENT_URI_SESSION_COOKIES_BY
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Im$CredentialSettings;Landroid/provider/Im$CredentialSettingsColumns;Landroid/provider/Im$LastRmqId;Landroid/provider/Im$LastRmqIdColumns;Landroid/provider/Im$OutgoingRmq;Landroid/provider/Im$OutgoingRmqColumns;Landroid/provider/Im$ProviderSettings;Landroid/provider/Im$ProviderSettingsColumns;Landroid/provider/Im$SessionCookies;Landroid/provider/Im$SessionCookiesColumns;Landroid/provider/Im$Chats;Landroid/provider/Im$ChatsColumns;Landroid/provider/Im$Presence;Landroid/provider/Im$PresenceColumns;Landroid/provider/Im$CommonPresenceColumns;Landroid/provider/Im$Avatars;Landroid/provider/Im$AvatarsColumns;Landroid/provider/Im$GroupMessages;Landroid/provider/Im$GroupMessageColumns;Landroid/provider/Im$Invitation;Landroid/provider/Im$InvitationColumns;Landroid/provider/Im$GroupMembers;Landroid/provider/Im$GroupMemberColumns;Landroid/provider/Im$Messages;Landroid/provider/Im$MessagesColumns;Landroid/provider/Im$BaseMessageColumns;Landroid/provider/Im$MessageType;Landroid/provider/Im$ContactsEtag;Landroid/provider/Im$ContactsEtagColumns;Landroid/provider/Im$BlockedList;Landroid/provider/Im$BlockedListColumns;Landroid/provider/Im$ContactList;Landroid/provider/Im$ContactListColumns;Landroid/provider/Im$Contacts;Landroid/provider/Im$ContactsColumns;Landroid/provider/Im$Account;Landroid/provider/Im$AccountColumns;Landroid/provider/Im$Provider;Landroid/provider/Im$ProviderCategories;Landroid/provider/Im$ProviderNames;Landroid/provider/Im$ProviderColumns; )
public class android.provider.Im extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =AlbumColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Audio; )
public abstract interface class android.provider.MediaStore$Audio$AlbumColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ALBUM

public static final java.lang.String ALBUM_ART

public static final java.lang.String ALBUM_ID

public static final java.lang.String ALBUM_KEY

public static final java.lang.String ARTIST

public static final java.lang.String FIRST_YEAR

public static final java.lang.String LAST_YEAR

public static final java.lang.String NUMBER_OF_SONGS
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Albums )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Audio; )
public final class android.provider.MediaStore$Audio$Albums extends java.lang.Object implements android.provider.BaseColumns, android.provider.MediaStore$Audio$AlbumColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_TYPE

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String ENTRY_CONTENT_TYPE

public static final android.net.Uri EXTERNAL_CONTENT_URI

public static final android.net.Uri INTERNAL_CONTENT_URI
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.net.Uri getContentUri(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Audio; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ArtistColumns )
public abstract interface class android.provider.MediaStore$Audio$ArtistColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ARTIST

public static final java.lang.String ARTIST_KEY

public static final java.lang.String NUMBER_OF_ALBUMS

public static final java.lang.String NUMBER_OF_TRACKS
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Audio$Artists; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Albums )
public final class android.provider.MediaStore$Audio$Artists$Albums extends java.lang.Object implements android.provider.MediaStore$Audio$AlbumColumns

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static final android.net.Uri getContentUri(
java.lang.String
long)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/MediaStore$Audio$Artists$Albums; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Artists )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Audio; )
public final class android.provider.MediaStore$Audio$Artists extends java.lang.Object implements android.provider.BaseColumns, android.provider.MediaStore$Audio$ArtistColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_TYPE

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String ENTRY_CONTENT_TYPE

public static final android.net.Uri EXTERNAL_CONTENT_URI

public static final android.net.Uri INTERNAL_CONTENT_URI
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.net.Uri getContentUri(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =MediaColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore; )
public abstract interface class android.provider.MediaStore$MediaColumns extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String DATA

public static final java.lang.String DATE_ADDED

public static final java.lang.String DATE_MODIFIED

public static final java.lang.String DISPLAY_NAME

public static final java.lang.String MIME_TYPE

public static final java.lang.String SIZE

public static final java.lang.String TITLE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =AudioColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Audio; )
public abstract interface class android.provider.MediaStore$Audio$AudioColumns extends java.lang.Object implements android.provider.MediaStore$MediaColumns

----------------FIELDS----------------

public static final java.lang.String ALBUM

public static final java.lang.String ALBUM_ART

public static final java.lang.String ALBUM_ID

public static final java.lang.String ALBUM_KEY

public static final java.lang.String ARTIST

public static final java.lang.String ARTIST_ID

public static final java.lang.String ARTIST_KEY

public static final java.lang.String COMPOSER

public static final java.lang.String DURATION

public static final java.lang.String IS_ALARM

public static final java.lang.String IS_MUSIC

public static final java.lang.String IS_NOTIFICATION

public static final java.lang.String IS_RINGTONE

public static final java.lang.String TITLE_KEY

public static final java.lang.String TRACK

public static final java.lang.String YEAR
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Audio$Genres; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Members )
public final class android.provider.MediaStore$Audio$Genres$Members extends java.lang.Object implements android.provider.MediaStore$Audio$AudioColumns

----------------FIELDS----------------

public static final java.lang.String AUDIO_ID

public static final java.lang.String CONTENT_DIRECTORY

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String GENRE_ID
----------------METHODS----------------

public void <init>()

public static final android.net.Uri getContentUri(
java.lang.String
long)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =GenresColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Audio; )
public abstract interface class android.provider.MediaStore$Audio$GenresColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String NAME
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Genres )
@dalvik.annotation.MemberClasses (value =Landroid/provider/MediaStore$Audio$Genres$Members; )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Audio; )
public final class android.provider.MediaStore$Audio$Genres extends java.lang.Object implements android.provider.BaseColumns, android.provider.MediaStore$Audio$GenresColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_TYPE

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String ENTRY_CONTENT_TYPE

public static final android.net.Uri EXTERNAL_CONTENT_URI

public static final android.net.Uri INTERNAL_CONTENT_URI
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.net.Uri getContentUri(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Media )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Audio; )
public final class android.provider.MediaStore$Audio$Media extends java.lang.Object implements android.provider.MediaStore$Audio$AudioColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_TYPE

public static final java.lang.String DEFAULT_SORT_ORDER

public static final android.net.Uri EXTERNAL_CONTENT_URI

public static final android.net.Uri INTERNAL_CONTENT_URI

public static final java.lang.String RECORD_SOUND_ACTION
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.net.Uri getContentUri(
java.lang.String)

public static android.net.Uri getContentUriForPath(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Members )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Audio$Playlists; )
public final class android.provider.MediaStore$Audio$Playlists$Members extends java.lang.Object implements android.provider.MediaStore$Audio$AudioColumns

----------------FIELDS----------------

public static final java.lang.String AUDIO_ID

public static final java.lang.String CONTENT_DIRECTORY

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String PLAYLIST_ID

public static final java.lang.String PLAY_ORDER

public static final java.lang.String _ID
----------------METHODS----------------

public void <init>()

public static final android.net.Uri getContentUri(
java.lang.String
long)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Audio; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =PlaylistsColumns )
public abstract interface class android.provider.MediaStore$Audio$PlaylistsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String DATA

public static final java.lang.String DATE_ADDED

public static final java.lang.String DATE_MODIFIED

public static final java.lang.String NAME
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Playlists )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Audio; )
@dalvik.annotation.MemberClasses (value =Landroid/provider/MediaStore$Audio$Playlists$Members; )
public final class android.provider.MediaStore$Audio$Playlists extends java.lang.Object implements android.provider.BaseColumns, android.provider.MediaStore$Audio$PlaylistsColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_TYPE

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String ENTRY_CONTENT_TYPE

public static final android.net.Uri EXTERNAL_CONTENT_URI

public static final android.net.Uri INTERNAL_CONTENT_URI
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.net.Uri getContentUri(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/MediaStore$Audio$Albums;Landroid/provider/MediaStore$Audio$AlbumColumns;Landroid/provider/MediaStore$Audio$Artists;Landroid/provider/MediaStore$Audio$ArtistColumns;Landroid/provider/MediaStore$Audio$Playlists;Landroid/provider/MediaStore$Audio$PlaylistsColumns;Landroid/provider/MediaStore$Audio$Genres;Landroid/provider/MediaStore$Audio$GenresColumns;Landroid/provider/MediaStore$Audio$Media;Landroid/provider/MediaStore$Audio$AudioColumns; )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Audio )
public final class android.provider.MediaStore$Audio extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static java.lang.String keyFor(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Images; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ImageColumns )
public abstract interface class android.provider.MediaStore$Images$ImageColumns extends java.lang.Object implements android.provider.MediaStore$MediaColumns

----------------FIELDS----------------

public static final java.lang.String BUCKET_DISPLAY_NAME

public static final java.lang.String BUCKET_ID

public static final java.lang.String DATE_TAKEN

public static final java.lang.String DESCRIPTION

public static final java.lang.String IS_PRIVATE

public static final java.lang.String LATITUDE

public static final java.lang.String LONGITUDE

public static final java.lang.String MINI_THUMB_MAGIC

public static final java.lang.String ORIENTATION

public static final java.lang.String PICASA_ID
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Images; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Media )
public final class android.provider.MediaStore$Images$Media extends java.lang.Object implements android.provider.MediaStore$Images$ImageColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_TYPE

public static final java.lang.String DEFAULT_SORT_ORDER

public static final android.net.Uri EXTERNAL_CONTENT_URI

public static final android.net.Uri INTERNAL_CONTENT_URI
----------------METHODS----------------

static void <clinit>()

public void <init>()

private static final android.graphics.Bitmap StoreThumbnail(
android.content.ContentResolver
android.graphics.Bitmap
long
float
float
int)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException;Ljava/io/IOException; )
public static final android.graphics.Bitmap getBitmap(
android.content.ContentResolver
android.net.Uri)

public static android.net.Uri getContentUri(
java.lang.String)

public static final java.lang.String insertImage(
android.content.ContentResolver
android.graphics.Bitmap
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public static final java.lang.String insertImage(
android.content.ContentResolver
java.lang.String
java.lang.String
java.lang.String)

public static final android.database.Cursor query(
android.content.ContentResolver
android.net.Uri
java.lang.String[])

public static final android.database.Cursor query(
android.content.ContentResolver
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String)

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)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Thumbnails )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Images; )
public class android.provider.MediaStore$Images$Thumbnails extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String DATA

public static final java.lang.String DEFAULT_SORT_ORDER

public static final android.net.Uri EXTERNAL_CONTENT_URI

public static final int FULL_SCREEN_KIND

public static final java.lang.String HEIGHT

public static final java.lang.String IMAGE_ID

public static final android.net.Uri INTERNAL_CONTENT_URI

public static final java.lang.String KIND

public static final int MICRO_KIND

public static final int MINI_KIND

public static final java.lang.String WIDTH
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.net.Uri getContentUri(
java.lang.String)

public static final android.database.Cursor query(
android.content.ContentResolver
android.net.Uri
java.lang.String[])

public static final android.database.Cursor queryMiniThumbnail(
android.content.ContentResolver
long
int
java.lang.String[])

public static final android.database.Cursor queryMiniThumbnails(
android.content.ContentResolver
android.net.Uri
int
java.lang.String[])

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/MediaStore$Images$Thumbnails;Landroid/provider/MediaStore$Images$Media;Landroid/provider/MediaStore$Images$ImageColumns; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Images )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore; )
public final class android.provider.MediaStore$Images extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =VideoColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Video; )
public abstract interface class android.provider.MediaStore$Video$VideoColumns extends java.lang.Object implements android.provider.MediaStore$MediaColumns

----------------FIELDS----------------

public static final java.lang.String ALBUM

public static final java.lang.String ARTIST

public static final java.lang.String CATEGORY

public static final java.lang.String DATE_TAKEN

public static final java.lang.String DESCRIPTION

public static final java.lang.String DURATION

public static final java.lang.String IS_PRIVATE

public static final java.lang.String LANGUAGE

public static final java.lang.String LATITUDE

public static final java.lang.String LONGITUDE

public static final java.lang.String MINI_THUMB_MAGIC

public static final java.lang.String RESOLUTION

public static final java.lang.String TAGS
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Media )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore$Video; )
public final class android.provider.MediaStore$Video$Media extends java.lang.Object implements android.provider.MediaStore$Video$VideoColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_TYPE

public static final java.lang.String DEFAULT_SORT_ORDER

public static final android.net.Uri EXTERNAL_CONTENT_URI

public static final android.net.Uri INTERNAL_CONTENT_URI
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.net.Uri getContentUri(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/MediaStore$Video$Media;Landroid/provider/MediaStore$Video$VideoColumns; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Video )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/MediaStore; )
public final class android.provider.MediaStore$Video extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

public void <init>()

public static final android.database.Cursor query(
android.content.ContentResolver
android.net.Uri
java.lang.String[])

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/MediaStore$Video;Landroid/provider/MediaStore$Audio;Landroid/provider/MediaStore$Images;Landroid/provider/MediaStore$MediaColumns; )
public final class android.provider.MediaStore extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACTION_IMAGE_CAPTURE

public static final java.lang.String AUTHORITY

private static final java.lang.String CONTENT_AUTHORITY_SLASH

public static final java.lang.String FILE_URI_PREFIX

public static final java.lang.String MEDIA_SCANNER_VOLUME

private static final java.lang.String TAG
----------------METHODS----------------

public void <init>()

public static android.net.Uri getMediaScannerUri()

________________CLASS________________


public abstract interface class android.provider.OpenableColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String DISPLAY_NAME

public static final java.lang.String SIZE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/SearchRecentSuggestions; )
@dalvik.annotation.InnerClass (accessFlags =10 name =SuggestionColumns )
 class android.provider.SearchRecentSuggestions$SuggestionColumns extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String DATE

public static final java.lang.String DISPLAY1

public static final java.lang.String DISPLAY2

public static final java.lang.String QUERY
----------------METHODS----------------

private void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/SearchRecentSuggestions$SuggestionColumns; )
public class android.provider.SearchRecentSuggestions extends java.lang.Object

----------------FIELDS----------------

private static final int DBG_SUGGESTION_TIMESTAMPS

private static final java.lang.String LOG_TAG

private static final int MAX_HISTORY_COUNT

public static final java.lang.String[] QUERIES_PROJECTION_1LINE

public static final java.lang.String[] QUERIES_PROJECTION_2LINE

public static final int QUERIES_PROJECTION_DATE_INDEX

public static final int QUERIES_PROJECTION_DISPLAY1_INDEX

public static final int QUERIES_PROJECTION_DISPLAY2_INDEX

public static final int QUERIES_PROJECTION_QUERY_INDEX

private static final java.lang.String[] TRUNCATE_HISTORY_PROJECTION

private java.lang.String mAuthority

private android.content.Context mContext

private java.lang.String[] mQueriesProjection

private android.net.Uri mSuggestionsUri

private boolean mTwoLineDisplay
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context
java.lang.String
int)

public void clearHistory()

public void saveRecentQuery(
java.lang.String
java.lang.String)

protected void truncateHistory(
android.content.ContentResolver
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Settings; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Bookmarks )
public final class android.provider.Settings$Bookmarks extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String FOLDER

public static final java.lang.String ID

public static final java.lang.String INTENT

public static final java.lang.String ORDERING

public static final java.lang.String SHORTCUT

private static final java.lang.String TAG

public static final java.lang.String TITLE

private static final java.lang.String[] sIntentProjection

private static final java.lang.String[] sShortcutProjection

private static final java.lang.String sShortcutSelection
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.net.Uri add(
android.content.ContentResolver
android.content.Intent
java.lang.String
java.lang.String
char
int)

public static android.content.Intent getIntentForShortcut(
android.content.ContentResolver
char)

public static java.lang.CharSequence labelForFolder(
android.content.res.Resources
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Settings$Gservices; )
@java.lang.Deprecated
@dalvik.annotation.InnerClass (accessFlags =9 name =QueryMap )
public class android.provider.Settings$Gservices$QueryMap extends android.content.ContentQueryMap

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.content.ContentResolver
android.database.Cursor
boolean
android.os.Handler)

public void <init>(
android.content.ContentResolver
boolean
android.os.Handler)

public java.lang.String getString(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =NameValueTable )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Settings; )
public class android.provider.Settings$NameValueTable extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String NAME

public static final java.lang.String VALUE
----------------METHODS----------------

public void <init>()

public static android.net.Uri getUriFor(
android.net.Uri
java.lang.String)

protected static boolean putString(
android.content.ContentResolver
android.net.Uri
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Settings$Gservices$QueryMap; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Gservices )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Settings; )
public final class android.provider.Settings$Gservices extends android.provider.Settings$NameValueTable

----------------FIELDS----------------

public static final java.lang.String CHECKIN_EVENTS

public static final java.lang.String CHECKIN_INTERVAL

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DISK_FREE_CHANGE_REPORTING_THRESHOLD

public static final java.lang.String GLS_PUBLIC_KEY

public static final java.lang.String GMAIL_CONFIG_INFO_MIN_SERVER_VERSION

public static final java.lang.String GMAIL_DISALLOW_IMAGE_PREVIEWS

public static final java.lang.String GMAIL_TIMEOUT_MS

public static final java.lang.String GOOGLE_LOGIN_GENERIC_AUTH_SERVICE

public static final java.lang.String GOOGLE_SERVICES_PREFIX

public static final java.lang.String GTALK_DATA_MESSAGE_WAKELOCK_MS

public static final java.lang.String GTALK_SERVICE_ACTIVE_HEARTBEAT_INTERVAL_MS

public static final java.lang.String GTALK_SERVICE_AWAY_HEARTBEAT_INTERVAL_MS

public static final java.lang.String GTALK_SERVICE_CONNECT_ON_AUTO_SYNC

public static final java.lang.String GTALK_SERVICE_HEARTBEAT_ACK_TIMEOUT_MS

public static final java.lang.String GTALK_SERVICE_HOSTNAME

public static final java.lang.String GTALK_SERVICE_IDLE_TIMEOUT_MS

public static final java.lang.String GTALK_SERVICE_MAX_RECONNECT_DELAY

public static final java.lang.String GTALK_SERVICE_MIN_RECONNECT_DELAY_LONG

public static final java.lang.String GTALK_SERVICE_MIN_RECONNECT_DELAY_SHORT

public static final java.lang.String GTALK_SERVICE_NOSYNC_HEARTBEAT_INTERVAL_MS

public static final java.lang.String GTALK_SERVICE_RECONNECT_VARIANT_LONG

public static final java.lang.String GTALK_SERVICE_RECONNECT_VARIANT_SHORT

public static final java.lang.String GTALK_SERVICE_RMQ_ACK_INTERVAL

public static final java.lang.String GTALK_SERVICE_SECURE_PORT

public static final java.lang.String GTALK_SERVICE_SHORT_NETWORK_DOWNTIME

public static final java.lang.String GTALK_SERVICE_SYNC_HEARTBEAT_INTERVAL_MS

public static final java.lang.String GTALK_SSL_HANDSHAKE_TIMEOUT_MS

public static final java.lang.String MEMCHECK_EXEC_END_TIME

public static final java.lang.String MEMCHECK_EXEC_START_TIME

public static final java.lang.String MEMCHECK_INTERVAL

public static final java.lang.String MEMCHECK_LOG_REALTIME_INTERVAL

public static final java.lang.String MEMCHECK_MIN_ALARM

public static final java.lang.String MEMCHECK_MIN_SCREEN_OFF

public static final java.lang.String MEMCHECK_PHONE_ENABLED

public static final java.lang.String MEMCHECK_PHONE_HARD_THRESHOLD

public static final java.lang.String MEMCHECK_PHONE_SOFT_THRESHOLD

public static final java.lang.String MEMCHECK_RECHECK_INTERVAL

public static final java.lang.String MEMCHECK_SYSTEM_ENABLED

public static final java.lang.String MEMCHECK_SYSTEM_HARD_THRESHOLD

public static final java.lang.String MEMCHECK_SYSTEM_SOFT_THRESHOLD

public static final java.lang.String MMS_X_WAP_PROFILE_URL

public static final java.lang.String PARENTAL_CONTROL_CHECK_ENABLED

public static final java.lang.String PARENTAL_CONTROL_EXPECTED_RESPONSE

public static final java.lang.String PARENTAL_CONTROL_REDIRECT_REGEX

public static final java.lang.String PARENTAL_CONTROL_TIMEOUT_IN_MS

public static final java.lang.String PROVISIONING_DIGEST

public static final java.lang.String PROVISIONING_OVERRIDE

public static final java.lang.String REBOOT_INTERVAL

public static final java.lang.String REBOOT_START_TIME

public static final java.lang.String REBOOT_WINDOW

public static final java.lang.String SETTINGS_CONTRIBUTORS_PRETTY_URL

public static final java.lang.String SETTINGS_CONTRIBUTORS_URL

public static final java.lang.String SETTINGS_TOS_PRETTY_URL

public static final java.lang.String SETTINGS_TOS_URL

public static final java.lang.String SYNC_MAX_RETRY_DELAY_IN_SECONDS

public static final java.lang.String SYNC_MIN_GZIP_BYTES

public static final java.lang.String SYS_FREE_STORAGE_LOG_INTERVAL

public static final java.lang.String SYS_PROP_SETTING_VERSION

public static final java.lang.String SYS_STORAGE_THRESHOLD_PERCENTAGE

public static final java.lang.String USE_MSISDN_TOKEN

public static final java.lang.String VENDING_REQUIRE_SIM_FOR_PURCHASE

public static final java.lang.String VENDING_SUPPORT_URL

public static final java.lang.String VENDING_SYNC_FREQUENCY_MS

public static final java.lang.String VENDING_TOS_URL

public static final java.lang.String VENDING_TOS_VERSION

public static final java.lang.String VENDING_USE_CHECKOUT_QA_SERVICE

public static final java.lang.String YOUTUBE_BY_AUTHOR_URL

public static final java.lang.String YOUTUBE_CATEGORY_LIST_URL

public static final java.lang.String YOUTUBE_CATEGORY_SEARCH_URL

public static final java.lang.String YOUTUBE_INDIVIDUAL_VIDEO_URL

public static final java.lang.String YOUTUBE_MOBILE_VIDEOS_URL

public static final java.lang.String YOUTUBE_MOST_DISCUSSED_URL

public static final java.lang.String YOUTUBE_MOST_LINKED_URL

public static final java.lang.String YOUTUBE_MOST_RECENT_URL

public static final java.lang.String YOUTUBE_MOST_RESPONDED_URL

public static final java.lang.String YOUTUBE_MOST_VIEWED_URL

public static final java.lang.String YOUTUBE_MY_FAVORITES_URL

public static final java.lang.String YOUTUBE_MY_PLAYLISTS_URL

public static final java.lang.String YOUTUBE_MY_SUBSCRIPTIONS_URL

public static final java.lang.String YOUTUBE_MY_VIDEOS_URL

public static final java.lang.String YOUTUBE_RECENTLY_FEATURED_URL

public static final java.lang.String YOUTUBE_REGISTER_DEVICE_URL

public static final java.lang.String YOUTUBE_RELATED_VIDEOS_URL

public static final java.lang.String YOUTUBE_SAVE_TO_FAVORITES_URL

public static final java.lang.String YOUTUBE_SEARCH_URL

public static final java.lang.String YOUTUBE_TOP_FAVORITES_URL

public static final java.lang.String YOUTUBE_TOP_RATED_URL

public static final java.lang.String YOUTUBE_USE_PROXY

private static volatile android.provider.Settings$NameValueCache mNameValueCache

private static final java.lang.Object mNameValueCacheLock
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static int getInt(
android.content.ContentResolver
java.lang.String
int)

public static long getLong(
android.content.ContentResolver
java.lang.String
long)

public static java.lang.String getString(
android.content.ContentResolver
java.lang.String)

public static android.net.Uri getUriFor(
java.lang.String)

public static boolean putString(
android.content.ContentResolver
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Settings; )
@dalvik.annotation.InnerClass (accessFlags =10 name =NameValueCache )
 class android.provider.Settings$NameValueCache extends java.lang.Object

----------------FIELDS----------------

private final android.net.Uri mUri
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>; )
private final java.util.HashMap mValues

private long mValuesVersion

private final java.lang.String mVersionSystemProperty
----------------METHODS----------------

 void <init>(
java.lang.String
android.net.Uri)

 java.lang.String getString(
android.content.ContentResolver
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Settings; )
@dalvik.annotation.InnerClass (accessFlags =9 name =SettingNotFoundException )
public class android.provider.Settings$SettingNotFoundException extends android.util.AndroidException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =System )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Settings; )
public final class android.provider.Settings$System extends android.provider.Settings$NameValueTable

----------------FIELDS----------------

public static final java.lang.String ADB_ENABLED

public static final java.lang.String AIRPLANE_MODE_ON

public static final java.lang.String AIRPLANE_MODE_RADIOS

public static final java.lang.String ALWAYS_FINISH_ACTIVITIES

public static final java.lang.String ANDROID_ID

public static final java.lang.String APPEND_FOR_LAST_AUDIBLE

public static final java.lang.String AUTO_TIME

public static final java.lang.String BLUETOOTH_DISCOVERABILITY

public static final java.lang.String BLUETOOTH_DISCOVERABILITY_TIMEOUT

public static final java.lang.String BLUETOOTH_ON

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DATA_ROAMING

public static final java.lang.String DATE_FORMAT

public static final java.lang.String DEBUG_APP

public static final android.net.Uri DEFAULT_NOTIFICATION_URI

public static final android.net.Uri DEFAULT_RINGTONE_URI

public static final java.lang.String DEVICE_PROVISIONED

public static final java.lang.String DIM_SCREEN

public static final java.lang.String DTMF_TONE_WHEN_DIALING

public static final java.lang.String END_BUTTON_BEHAVIOR

public static final java.lang.String FONT_SCALE

public static final java.lang.String HTTP_PROXY

public static final java.lang.String INSTALL_NON_MARKET_APPS

public static final java.lang.String LOCATION_PROVIDERS_ALLOWED

public static final java.lang.String LOCK_PATTERN_ENABLED

public static final java.lang.String LOCK_PATTERN_VISIBLE

public static final java.lang.String LOGGING_ID

public static final java.lang.String MODE_RINGER

public static final java.lang.String MODE_RINGER_STREAMS_AFFECTED

public static final java.lang.String MUTE_STREAMS_AFFECTED

public static final java.lang.String NETWORK_PREFERENCE

public static final java.lang.String NEXT_ALARM_FORMATTED

public static final java.lang.String NOTIFICATION_SOUND

public static final java.lang.String PARENTAL_CONTROL_ENABLED

public static final java.lang.String PARENTAL_CONTROL_LAST_UPDATE

public static final java.lang.String PARENTAL_CONTROL_REDIRECT_URL

public static final java.lang.String RADIO_BLUETOOTH

public static final java.lang.String RADIO_CELL

public static final java.lang.String RADIO_WIFI

public static final java.lang.String RINGTONE

public static final java.lang.String SCREEN_BRIGHTNESS

public static final java.lang.String SCREEN_OFF_TIMEOUT

public static final java.lang.String SETTINGS_CLASSNAME

public static final java.lang.String SETUP_WIZARD_HAS_RUN

public static final java.lang.String SHOW_GTALK_SERVICE_STATUS

public static final java.lang.String SHOW_PROCESSES

public static final java.lang.String SOUND_EFFECTS_ENABLED

public static final java.lang.String STAY_ON_WHILE_PLUGGED_IN

public static final java.lang.String SYS_PROP_SETTING_VERSION

public static final java.lang.String TEXT_AUTO_CAPS

public static final java.lang.String TEXT_AUTO_PUNCTUATE

public static final java.lang.String TEXT_AUTO_REPLACE

public static final java.lang.String TEXT_SHOW_PASSWORD

public static final java.lang.String TIME_12_24

public static final java.lang.String TRANSITION_ANIMATION_SCALE

public static final java.lang.String USB_MASS_STORAGE_ENABLED

public static final java.lang.String USE_GOOGLE_MAIL

public static final java.lang.String VIBRATE_ON

public static final java.lang.String VOLUME_ALARM

public static final java.lang.String VOLUME_MUSIC

public static final java.lang.String VOLUME_RING

public static final java.lang.String[] VOLUME_SETTINGS

public static final java.lang.String VOLUME_SYSTEM

public static final java.lang.String VOLUME_VOICE

public static final java.lang.String WAIT_FOR_DEBUGGER

public static final java.lang.String WALLPAPER_ACTIVITY

public static final java.lang.String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON

public static final java.lang.String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY

public static final java.lang.String WIFI_NUM_OPEN_NETWORKS_KEPT

public static final java.lang.String WIFI_ON

public static final java.lang.String WIFI_STATIC_DNS1

public static final java.lang.String WIFI_STATIC_DNS2

public static final java.lang.String WIFI_STATIC_GATEWAY

public static final java.lang.String WIFI_STATIC_IP

public static final java.lang.String WIFI_STATIC_NETMASK

public static final java.lang.String WIFI_USE_STATIC_IP

public static final java.lang.String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE

public static final java.lang.String WIFI_WATCHDOG_AP_COUNT

public static final java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS

public static final java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED

public static final java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS

public static final java.lang.String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT

public static final java.lang.String WIFI_WATCHDOG_MAX_AP_CHECKS

public static final java.lang.String WIFI_WATCHDOG_ON

public static final java.lang.String WIFI_WATCHDOG_PING_COUNT

public static final java.lang.String WIFI_WATCHDOG_PING_DELAY_MS

public static final java.lang.String WIFI_WATCHDOG_PING_TIMEOUT_MS

public static final java.lang.String WINDOW_ANIMATION_SCALE

private static volatile android.provider.Settings$NameValueCache mNameValueCache
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static void getConfiguration(
android.content.ContentResolver
android.content.res.Configuration)
@dalvik.annotation.Throws (value =Landroid/provider/Settings$SettingNotFoundException; )
public static float getFloat(
android.content.ContentResolver
java.lang.String)

public static float getFloat(
android.content.ContentResolver
java.lang.String
float)
@dalvik.annotation.Throws (value =Landroid/provider/Settings$SettingNotFoundException; )
public static int getInt(
android.content.ContentResolver
java.lang.String)

public static int getInt(
android.content.ContentResolver
java.lang.String
int)

public static boolean getShowGTalkServiceStatus(
android.content.ContentResolver)

public static java.lang.String getString(
android.content.ContentResolver
java.lang.String)

public static android.net.Uri getUriFor(
java.lang.String)

public static boolean putConfiguration(
android.content.ContentResolver
android.content.res.Configuration)

public static boolean putFloat(
android.content.ContentResolver
java.lang.String
float)

public static boolean putInt(
android.content.ContentResolver
java.lang.String
int)

public static boolean putString(
android.content.ContentResolver
java.lang.String
java.lang.String)

public static void setShowGTalkServiceStatus(
android.content.ContentResolver
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Settings$Bookmarks;Landroid/provider/Settings$Gservices;Landroid/provider/Settings$System;Landroid/provider/Settings$NameValueCache;Landroid/provider/Settings$NameValueTable;Landroid/provider/Settings$SettingNotFoundException; )
public final class android.provider.Settings extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACTION_APN_SETTINGS

public static final java.lang.String ACTION_APPLICATION_SETTINGS

public static final java.lang.String ACTION_BLUETOOTH_SETTINGS

public static final java.lang.String ACTION_DATE_SETTINGS

public static final java.lang.String ACTION_DISPLAY_SETTINGS

public static final java.lang.String ACTION_LOCALE_SETTINGS

public static final java.lang.String ACTION_LOCATION_SOURCE_SETTINGS

public static final java.lang.String ACTION_SECURITY_SETTINGS

public static final java.lang.String ACTION_SETTINGS

public static final java.lang.String ACTION_SOUND_SETTINGS

public static final java.lang.String ACTION_WIFI_SETTINGS

public static final java.lang.String ACTION_WIRELESS_SETTINGS

public static final java.lang.String AUTHORITY

private static final java.lang.String JID_RESOURCE_PREFIX

private static final java.lang.String TAG

private static java.lang.String sJidResource
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static java.lang.String getGTalkDeviceId(
long)

public static java.lang.String getJidResource()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =AccountColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/SubscribedFeeds; )
public abstract interface class android.provider.SubscribedFeeds$AccountColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String _SYNC_ACCOUNT
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Accounts )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/SubscribedFeeds; )
public final class android.provider.SubscribedFeeds$Accounts extends java.lang.Object implements android.provider.BaseColumns, android.provider.SubscribedFeeds$AccountColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static android.database.Cursor query(
android.content.ContentResolver
java.lang.String[])

public static android.database.Cursor query(
android.content.ContentResolver
java.lang.String[]
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/SubscribedFeeds; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =FeedColumns )
public abstract interface class android.provider.SubscribedFeeds$FeedColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String AUTHORITY

public static final java.lang.String FEED

public static final java.lang.String SERVICE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Feeds )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/SubscribedFeeds; )
public final class android.provider.SubscribedFeeds$Feeds extends java.lang.Object implements android.provider.BaseColumns, android.provider.SyncConstValue, android.provider.SubscribedFeeds$FeedColumns

----------------FIELDS----------------

public static final java.lang.String CONTENT_ITEM_TYPE

public static final java.lang.String CONTENT_TYPE

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

public static final android.net.Uri DELETED_CONTENT_URI
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static android.database.Cursor query(
android.content.ContentResolver
java.lang.String[])

public static android.database.Cursor query(
android.content.ContentResolver
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/SubscribedFeeds$Accounts;Landroid/provider/SubscribedFeeds$AccountColumns;Landroid/provider/SubscribedFeeds$Feeds;Landroid/provider/SubscribedFeeds$FeedColumns; )
public class android.provider.SubscribedFeeds extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

public static android.net.Uri addFeed(
android.content.ContentResolver
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

public static int deleteFeed(
android.content.ContentResolver
java.lang.String
java.lang.String
java.lang.String)

public static int deleteFeeds(
android.content.ContentResolver
java.lang.String
java.lang.String)

public static java.lang.String gtalkServiceRoutingInfoFromAccountAndResource(
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Sync; )
 class android.provider.Sync$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =QueryMap )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Sync$Active; )
public class android.provider.Sync$Active$QueryMap extends android.content.ContentQueryMap

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.content.ContentResolver
boolean
android.os.Handler)

public android.content.ContentValues getActiveSyncInfo()

public long getSyncStartTime()

public java.lang.String getSyncingAccount()

public java.lang.String getSyncingAuthority()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =StatsColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Sync; )
public abstract interface class android.provider.Sync$StatsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACCOUNT

public static final java.lang.String AUTHORITY
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Sync; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ActiveColumns )
public abstract interface class android.provider.Sync$ActiveColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String START_TIME
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Active )
@dalvik.annotation.MemberClasses (value =Landroid/provider/Sync$Active$QueryMap; )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Sync; )
public final class android.provider.Sync$Active extends java.lang.Object implements android.provider.BaseColumns, android.provider.Sync$StatsColumns, android.provider.Sync$ActiveColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Sync; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =HistoryColumns )
public abstract interface class android.provider.Sync$HistoryColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String DOWNSTREAM_ACTIVITY

public static final java.lang.String ELAPSED_TIME

public static final java.lang.String EVENT

public static final java.lang.String EVENT_TIME

public static final java.lang.String MESG

public static final java.lang.String SOURCE

public static final java.lang.String STATS_ID

public static final java.lang.String UPSTREAM_ACTIVITY
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Sync; )
@dalvik.annotation.InnerClass (accessFlags =9 name =History )
public class android.provider.Sync$History extends java.lang.Object implements android.provider.BaseColumns, android.provider.Sync$StatsColumns, android.provider.Sync$HistoryColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final int ERROR_AUTHENTICATION

public static final int ERROR_CONFLICT

public static final int ERROR_IO

public static final int ERROR_PARSE

public static final int ERROR_SYNC_ALREADY_IN_PROGRESS

public static final int ERROR_TOO_MANY_DELETIONS

public static final int ERROR_TOO_MANY_RETRIES

public static final java.lang.String[] EVENTS

public static final int EVENT_START

public static final int EVENT_STOP

private static final java.lang.String FINISHED_SINCE_WHERE_CLAUSE

public static final java.lang.String MESG_CANCELED

public static final java.lang.String MESG_SUCCESS

public static final java.lang.String[] SOURCES

public static final int SOURCE_LOCAL

public static final int SOURCE_POLL

public static final int SOURCE_SERVER

public static final int SOURCE_USER
----------------METHODS----------------

static void <clinit>()

private void <init>()

 void <init>(
android.provider.Sync$1)

public static boolean hasNewerSyncFinished(
android.content.ContentResolver
java.lang.String
java.lang.String
long)

public static java.lang.String mesgToString(
java.lang.String)

public static android.database.Cursor query(
android.content.ContentResolver)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Sync$Pending; )
@dalvik.annotation.InnerClass (accessFlags =9 name =QueryMap )
public class android.provider.Sync$Pending$QueryMap extends android.content.ContentQueryMap

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.content.ContentResolver
boolean
android.os.Handler)

public boolean isPending(
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Pending )
@dalvik.annotation.MemberClasses (value =Landroid/provider/Sync$Pending$QueryMap; )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Sync; )
public final class android.provider.Sync$Pending extends java.lang.Object implements android.provider.BaseColumns, android.provider.Sync$StatsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =QueryMap )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Sync$Settings; )
public class android.provider.Sync$Settings$QueryMap extends android.content.ContentQueryMap

----------------FIELDS----------------

private android.content.ContentResolver mContentResolver
----------------METHODS----------------

public void <init>(
android.content.ContentResolver
boolean
android.os.Handler)

private boolean getBoolean(
java.lang.String
boolean)

public boolean getListenForNetworkTickles()

public boolean getSyncProviderAutomatically(
java.lang.String)

public void setListenForNetworkTickles(
boolean)

public void setSyncProviderAutomatically(
java.lang.String
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =SettingsColumns )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Sync; )
public abstract interface class android.provider.Sync$SettingsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String KEY

public static final java.lang.String VALUE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Sync$Settings$QueryMap; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Settings )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Sync; )
public final class android.provider.Sync$Settings extends java.lang.Object implements android.provider.BaseColumns, android.provider.Sync$SettingsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String SETTING_LISTEN_FOR_TICKLES

public static final java.lang.String SETTING_SYNC_PROVIDER_PREFIX
----------------METHODS----------------

static void <clinit>()

public void <init>()

private static void putBoolean(
android.content.ContentResolver
java.lang.String
boolean)

public static void setListenForNetworkTickles(
android.content.ContentResolver
boolean)

public static void setSyncProviderAutomatically(
android.content.ContentResolver
java.lang.String
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Stats )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Sync; )
public final class android.provider.Sync$Stats extends java.lang.Object implements android.provider.BaseColumns, android.provider.Sync$StatsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String[] SYNC_STATS_PROJECTION
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =QueryMap )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Sync$Status; )
public class android.provider.Sync$Status$QueryMap extends android.content.ContentQueryMap

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.content.ContentResolver
boolean
android.os.Handler)

public android.content.ContentValues get(
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Sync; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =StatusColumns )
public abstract interface class android.provider.Sync$StatusColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String LAST_FAILURE_MESG

public static final java.lang.String LAST_FAILURE_SOURCE

public static final java.lang.String LAST_FAILURE_TIME

public static final java.lang.String LAST_SUCCESS_SOURCE

public static final java.lang.String LAST_SUCCESS_TIME

public static final java.lang.String NUM_SOURCE_LOCAL

public static final java.lang.String NUM_SOURCE_POLL

public static final java.lang.String NUM_SOURCE_SERVER

public static final java.lang.String NUM_SOURCE_USER

public static final java.lang.String NUM_SYNCS

public static final java.lang.String PENDING

public static final java.lang.String TOTAL_ELAPSED_TIME
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Sync$Status$QueryMap; )
@dalvik.annotation.InnerClass (accessFlags =9 name =Status )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Sync; )
public class android.provider.Sync$Status extends android.provider.Sync$History implements android.provider.Sync$StatusColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static android.database.Cursor query(
android.content.ContentResolver)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Sync$1;Landroid/provider/Sync$Settings;Landroid/provider/Sync$SettingsColumns;Landroid/provider/Sync$Active;Landroid/provider/Sync$ActiveColumns;Landroid/provider/Sync$Pending;Landroid/provider/Sync$Status;Landroid/provider/Sync$History;Landroid/provider/Sync$StatusColumns;Landroid/provider/Sync$HistoryColumns;Landroid/provider/Sync$Stats;Landroid/provider/Sync$StatsColumns; )
public final class android.provider.Sync extends java.lang.Object

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =BaseMmsColumns )
public abstract interface class android.provider.Telephony$BaseMmsColumns extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String ADAPTATION_ALLOWED

public static final java.lang.String APPLIC_ID

public static final java.lang.String AUX_APPLIC_ID

public static final java.lang.String BCC

public static final java.lang.String CANCEL_ID

public static final java.lang.String CANCEL_STATUS

public static final java.lang.String CC

public static final java.lang.String CONTENT_CLASS

public static final java.lang.String CONTENT_LOCATION

public static final java.lang.String CONTENT_TYPE

public static final java.lang.String DATE

public static final java.lang.String DELIVERY_REPORT

public static final java.lang.String DELIVERY_TIME

public static final java.lang.String DELIVERY_TIME_TOKEN

public static final java.lang.String DISTRIBUTION_INDICATOR

public static final java.lang.String DRM_CONTENT

public static final java.lang.String ELEMENT_DESCRIPTOR

public static final java.lang.String EXPIRY

public static final java.lang.String FROM

public static final java.lang.String LIMIT

public static final java.lang.String MBOX_QUOTAS

public static final java.lang.String MBOX_QUOTAS_TOKEN

public static final java.lang.String MBOX_TOTALS

public static final java.lang.String MBOX_TOTALS_TOKEN

public static final java.lang.String MESSAGE_BOX

public static final int MESSAGE_BOX_ALL

public static final int MESSAGE_BOX_DRAFTS

public static final int MESSAGE_BOX_INBOX

public static final int MESSAGE_BOX_OUTBOX

public static final int MESSAGE_BOX_SENT

public static final java.lang.String MESSAGE_CLASS

public static final java.lang.String MESSAGE_COUNT

public static final java.lang.String MESSAGE_ID

public static final java.lang.String MESSAGE_SIZE

public static final java.lang.String MESSAGE_TYPE

public static final java.lang.String MMS_VERSION

public static final java.lang.String MM_FLAGS

public static final java.lang.String MM_FLAGS_TOKEN

public static final java.lang.String MM_STATE

public static final java.lang.String PREVIOUSLY_SENT_BY

public static final java.lang.String PREVIOUSLY_SENT_DATE

public static final java.lang.String PRIORITY

public static final java.lang.String QUOTAS

public static final java.lang.String READ

public static final java.lang.String READ_REPORT

public static final java.lang.String READ_STATUS

public static final java.lang.String RECOMMENDED_RETRIEVAL_MODE

public static final java.lang.String RECOMMENDED_RETRIEVAL_MODE_TEXT

public static final java.lang.String REPLACE_ID

public static final java.lang.String REPLY_APPLIC_ID

public static final java.lang.String REPLY_CHARGING

public static final java.lang.String REPLY_CHARGING_DEADLINE

public static final java.lang.String REPLY_CHARGING_DEADLINE_TOKEN

public static final java.lang.String REPLY_CHARGING_ID

public static final java.lang.String REPLY_CHARGING_SIZE

public static final java.lang.String REPORT_ALLOWED

public static final java.lang.String RESPONSE_STATUS

public static final java.lang.String RESPONSE_TEXT

public static final java.lang.String RETRIEVE_STATUS

public static final java.lang.String RETRIEVE_TEXT

public static final java.lang.String RETRIEVE_TEXT_CHARSET

public static final java.lang.String SENDER_VISIBILITY

public static final java.lang.String START

public static final java.lang.String STATUS

public static final java.lang.String STATUS_TEXT

public static final java.lang.String STORE

public static final java.lang.String STORED

public static final java.lang.String STORE_STATUS

public static final java.lang.String STORE_STATUS_TEXT

public static final java.lang.String SUBJECT

public static final java.lang.String SUBJECT_CHARSET

public static final java.lang.String THREAD_ID

public static final java.lang.String TO

public static final java.lang.String TOTALS

public static final java.lang.String TRANSACTION_ID
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =CanonicalAddressesColumns )
public abstract interface class android.provider.Telephony$CanonicalAddressesColumns extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String ADDRESS
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Carriers )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony; )
public final class android.provider.Telephony$Carriers extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String APN

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String MCC

public static final java.lang.String MMSC

public static final java.lang.String MMSPORT

public static final java.lang.String MMSPROXY

public static final java.lang.String MNC

public static final java.lang.String NAME

public static final java.lang.String NUMERIC

public static final java.lang.String PASSWORD

public static final java.lang.String PORT

public static final java.lang.String PROXY

public static final java.lang.String SERVER

public static final java.lang.String TYPE

public static final java.lang.String USER
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Intents )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony; )
public final class android.provider.Telephony$Intents extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String EXTRA_PLMN

public static final java.lang.String EXTRA_SHOW_PLMN

public static final java.lang.String EXTRA_SHOW_SPN

public static final java.lang.String EXTRA_SPN

public static final java.lang.String SECRET_CODE_ACTION

public static final java.lang.String SPN_STRINGS_UPDATED_ACTION
----------------METHODS----------------

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Addr )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony$Mms; )
public final class android.provider.Telephony$Mms$Addr extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String ADDRESS

public static final java.lang.String CHARSET

public static final java.lang.String CONTACT_ID

public static final java.lang.String MSG_ID

public static final java.lang.String TYPE
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Draft )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony$Mms; )
public final class android.provider.Telephony$Mms$Draft extends java.lang.Object implements android.provider.Telephony$BaseMmsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony$Mms; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Inbox )
public final class android.provider.Telephony$Mms$Inbox extends java.lang.Object implements android.provider.Telephony$BaseMmsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Intents )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony$Mms; )
public final class android.provider.Telephony$Mms$Intents extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String CONTENT_CHANGED_ACTION

public static final java.lang.String DELETED_CONTENTS

public static final java.lang.String EXTRA_BCC

public static final java.lang.String EXTRA_CC

public static final java.lang.String EXTRA_CONTENTS

public static final java.lang.String EXTRA_SUBJECT

public static final java.lang.String EXTRA_TYPES
----------------METHODS----------------

private void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony$Mms; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Outbox )
public final class android.provider.Telephony$Mms$Outbox extends java.lang.Object implements android.provider.Telephony$BaseMmsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Part )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony$Mms; )
public final class android.provider.Telephony$Mms$Part extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String CHARSET

public static final java.lang.String CONTENT_DISPOSITION

public static final java.lang.String CONTENT_ID

public static final java.lang.String CONTENT_LOCATION

public static final java.lang.String CONTENT_TYPE

public static final java.lang.String CT_START

public static final java.lang.String CT_TYPE

public static final java.lang.String FILENAME

public static final java.lang.String MSG_ID

public static final java.lang.String NAME

public static final java.lang.String SEQ

public static final java.lang.String _DATA
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony$Mms; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Rate )
public final class android.provider.Telephony$Mms$Rate extends java.lang.Object

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String SENT_TIME
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony$Mms; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Sent )
public final class android.provider.Telephony$Mms$Sent extends java.lang.Object implements android.provider.Telephony$BaseMmsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Telephony$Mms$Intents;Landroid/provider/Telephony$Mms$Rate;Landroid/provider/Telephony$Mms$Part;Landroid/provider/Telephony$Mms$Addr;Landroid/provider/Telephony$Mms$Outbox;Landroid/provider/Telephony$Mms$Draft;Landroid/provider/Telephony$Mms$Sent;Landroid/provider/Telephony$Mms$Inbox; )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Mms )
public final class android.provider.Telephony$Mms extends java.lang.Object implements android.provider.Telephony$BaseMmsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.util.regex.Pattern NAME_ADDR_EMAIL_PATTERN

public static final java.util.regex.Pattern QUOTED_STRING_PATTERN

public static final android.net.Uri REPORT_REQUEST_URI

public static final android.net.Uri REPORT_STATUS_URI
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static java.lang.String extractAddrSpec(
java.lang.String)

public static final java.lang.String getMessageBoxName(
int)

public static boolean isEmailAddress(
java.lang.String)

public static final android.database.Cursor query(
android.content.ContentResolver
java.lang.String[])

public static final android.database.Cursor query(
android.content.ContentResolver
java.lang.String[]
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony$MmsSms; )
@dalvik.annotation.InnerClass (accessFlags =25 name =PendingMessages )
public final class android.provider.Telephony$MmsSms$PendingMessages extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DUE_TIME

public static final java.lang.String ERROR_CODE

public static final java.lang.String ERROR_TYPE

public static final java.lang.String LAST_TRY

public static final java.lang.String MSG_ID

public static final java.lang.String MSG_TYPE

public static final java.lang.String PROTO_TYPE

public static final java.lang.String RETRY_INDEX
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Telephony$MmsSms$PendingMessages; )
@dalvik.annotation.InnerClass (accessFlags =25 name =MmsSms )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony; )
public final class android.provider.Telephony$MmsSms extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_CONVERSATIONS_URI

public static final android.net.Uri CONTENT_DRAFT_URI

public static final android.net.Uri CONTENT_FILTER_BYPHONE_URI

public static final android.net.Uri CONTENT_UNDELIVERED_URI

public static final android.net.Uri CONTENT_URI

public static final int ERR_TYPE_GENERIC

public static final int ERR_TYPE_GENERIC_PERMANENT

public static final int ERR_TYPE_MMS_PROTO_PERMANENT

public static final int ERR_TYPE_MMS_PROTO_TRANSIENT

public static final int ERR_TYPE_SMS_PROTO_PERMANENT

public static final int ERR_TYPE_SMS_PROTO_TRANSIENT

public static final int ERR_TYPE_TRANSPORT_FAILURE

public static final int MMS_PROTO

public static final int NO_ERROR

public static final int SMS_PROTO

public static final java.lang.String TYPE_DISCRIMINATOR_COLUMN
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =TextBasedSmsColumns )
public abstract interface class android.provider.Telephony$TextBasedSmsColumns extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ADDRESS

public static final java.lang.String BODY

public static final java.lang.String DATE

public static final int MESSAGE_TYPE_ALL

public static final int MESSAGE_TYPE_DRAFT

public static final int MESSAGE_TYPE_FAILED

public static final int MESSAGE_TYPE_INBOX

public static final int MESSAGE_TYPE_OUTBOX

public static final int MESSAGE_TYPE_QUEUED

public static final int MESSAGE_TYPE_SENT

public static final java.lang.String PERSON

public static final java.lang.String PERSON_ID

public static final java.lang.String PROTOCOL

public static final java.lang.String READ

public static final java.lang.String REPLY_PATH_PRESENT

public static final java.lang.String SERVICE_CENTER

public static final java.lang.String STATUS

public static final int STATUS_COMPLETE

public static final int STATUS_FAILED

public static final int STATUS_NONE

public static final int STATUS_PENDING

public static final java.lang.String SUBJECT

public static final java.lang.String THREAD_ID

public static final java.lang.String TYPE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Conversations )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony$Sms; )
public final class android.provider.Telephony$Sms$Conversations extends java.lang.Object implements android.provider.BaseColumns, android.provider.Telephony$TextBasedSmsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER

public static final java.lang.String MESSAGE_COUNT

public static final java.lang.String SNIPPET
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Draft )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony$Sms; )
public final class android.provider.Telephony$Sms$Draft extends java.lang.Object implements android.provider.BaseColumns, android.provider.Telephony$TextBasedSmsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.net.Uri addMessage(
android.content.ContentResolver
java.lang.String
java.lang.String
java.lang.String
java.lang.Long)

public static boolean saveMessage(
android.content.ContentResolver
android.net.Uri
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Inbox )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony$Sms; )
public final class android.provider.Telephony$Sms$Inbox extends java.lang.Object implements android.provider.BaseColumns, android.provider.Telephony$TextBasedSmsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.net.Uri addMessage(
android.content.ContentResolver
java.lang.String
java.lang.String
java.lang.String
java.lang.Long
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony$Sms; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Intents )
public final class android.provider.Telephony$Sms$Intents extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String DATA_SMS_RECEIVED_ACTION

public static final java.lang.String SIM_FULL_ACTION

public static final java.lang.String SMS_RECEIVED_ACTION

public static final java.lang.String WAP_PUSH_RECEIVED_ACTION
----------------METHODS----------------

public void <init>()

public static final android.telephony.gsm.SmsMessage[] getMessagesFromIntent(
android.content.Intent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony$Sms; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Outbox )
public final class android.provider.Telephony$Sms$Outbox extends java.lang.Object implements android.provider.BaseColumns, android.provider.Telephony$TextBasedSmsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.net.Uri addMessage(
android.content.ContentResolver
java.lang.String
java.lang.String
java.lang.String
java.lang.Long
boolean
long)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Sent )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony$Sms; )
public final class android.provider.Telephony$Sms$Sent extends java.lang.Object implements android.provider.BaseColumns, android.provider.Telephony$TextBasedSmsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.net.Uri addMessage(
android.content.ContentResolver
java.lang.String
java.lang.String
java.lang.String
java.lang.Long)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Telephony$Sms$Intents;Landroid/provider/Telephony$Sms$Conversations;Landroid/provider/Telephony$Sms$Outbox;Landroid/provider/Telephony$Sms$Draft;Landroid/provider/Telephony$Sms$Sent;Landroid/provider/Telephony$Sms$Inbox; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Sms )
@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony; )
public final class android.provider.Telephony$Sms extends java.lang.Object implements android.provider.BaseColumns, android.provider.Telephony$TextBasedSmsColumns

----------------FIELDS----------------

public static final android.net.Uri CONTENT_URI

public static final java.lang.String DEFAULT_SORT_ORDER
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.net.Uri addMessageToUri(
android.content.ContentResolver
android.net.Uri
java.lang.String
java.lang.String
java.lang.String
java.lang.Long
boolean
boolean)

public static android.net.Uri addMessageToUri(
android.content.ContentResolver
android.net.Uri
java.lang.String
java.lang.String
java.lang.String
java.lang.Long
boolean
boolean
long)

public static boolean isOutgoingFolder(
int)

public static boolean moveMessageToFolder(
android.content.Context
android.net.Uri
int)

public static final android.database.Cursor query(
android.content.ContentResolver
java.lang.String[])

public static final android.database.Cursor query(
android.content.ContentResolver
java.lang.String[]
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ThreadsColumns )
public abstract interface class android.provider.Telephony$ThreadsColumns extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String DATE

public static final java.lang.String ERROR

public static final java.lang.String MESSAGE_COUNT

public static final java.lang.String READ

public static final java.lang.String RECIPIENT_IDS

public static final java.lang.String SNIPPET

public static final java.lang.String SNIPPET_CHARSET

public static final java.lang.String TYPE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/provider/Telephony; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Threads )
public final class android.provider.Telephony$Threads extends java.lang.Object implements android.provider.Telephony$ThreadsColumns

----------------FIELDS----------------

public static final int BROADCAST_THREAD

public static final int COMMON_THREAD

public static final android.net.Uri CONTENT_URI

private static final java.lang.String[] ID_PROJECTION

public static final android.net.Uri OBSOLETE_THREADS_URI

private static final java.lang.String STANDARD_ENCODING

private static final android.net.Uri THREAD_ID_CONTENT_URI
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static long getOrCreateThreadId(
android.content.Context
java.lang.String)
@dalvik.annotation.Signature (value =(Landroid/content/Context;Ljava/util/Set<Ljava/lang/String;>;)J )
public static long getOrCreateThreadId(
android.content.Context
java.util.Set)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/provider/Telephony$Intents;Landroid/provider/Telephony$Carriers;Landroid/provider/Telephony$MmsSms;Landroid/provider/Telephony$Mms;Landroid/provider/Telephony$Threads;Landroid/provider/Telephony$ThreadsColumns;Landroid/provider/Telephony$CanonicalAddressesColumns;Landroid/provider/Telephony$BaseMmsColumns;Landroid/provider/Telephony$Sms;Landroid/provider/Telephony$TextBasedSmsColumns; )
public final class android.provider.Telephony extends java.lang.Object

----------------FIELDS----------------

private static final boolean DEBUG

private static final boolean LOCAL_LOGV

private static final java.lang.String TAG
----------------METHODS----------------

public void <init>()

________________CLASS________________


 class android.sax.BadXmlException extends org.xml.sax.SAXParseException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String
org.xml.sax.Locator)

public java.lang.String getMessage()

________________CLASS________________


public class android.sax.Element extends java.lang.Object

----------------FIELDS----------------

 android.sax.Children children

final int depth

 android.sax.EndElementListener endElementListener

 android.sax.EndTextElementListener endTextElementListener

final java.lang.String localName

final android.sax.Element parent
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/sax/Element;>; )
 java.util.ArrayList requiredChilden

 android.sax.StartElementListener startElementListener

final java.lang.String uri

 boolean visited
----------------METHODS----------------

 void <init>(
android.sax.Element
java.lang.String
java.lang.String
int)

static java.lang.String toString(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXParseException; )
 void checkRequiredChildren(
org.xml.sax.Locator)

public android.sax.Element getChild(
java.lang.String)

public android.sax.Element getChild(
java.lang.String
java.lang.String)

public android.sax.Element requireChild(
java.lang.String)

public android.sax.Element requireChild(
java.lang.String
java.lang.String)

 void resetRequiredChildren()

public void setElementListener(
android.sax.ElementListener)

public void setEndElementListener(
android.sax.EndElementListener)

public void setEndTextElementListener(
android.sax.EndTextElementListener)

public void setStartElementListener(
android.sax.StartElementListener)

public void setTextElementListener(
android.sax.TextElementListener)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =Child )
@dalvik.annotation.EnclosingClass (value =Landroid/sax/Children; )
 class android.sax.Children$Child extends android.sax.Element

----------------FIELDS----------------

final int hash

 android.sax.Children$Child next
----------------METHODS----------------

 void <init>(
android.sax.Element
java.lang.String
java.lang.String
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/sax/Children$Child; )
 class android.sax.Children extends java.lang.Object

----------------FIELDS----------------

 android.sax.Children$Child[] children
----------------METHODS----------------

 void <init>()

 android.sax.Element get(
java.lang.String
java.lang.String)

 android.sax.Element getOrCreate(
android.sax.Element
java.lang.String
java.lang.String)

________________CLASS________________


public abstract interface class android.sax.EndTextElementListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void end(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =Handler )
@dalvik.annotation.EnclosingClass (value =Landroid/sax/RootElement; )
 class android.sax.RootElement$Handler extends org.xml.sax.helpers.DefaultHandler

----------------FIELDS----------------

 java.lang.StringBuilder bodyBuilder

 android.sax.Element current

 int depth

 org.xml.sax.Locator locator

final android.sax.RootElement this$0
----------------METHODS----------------

 void <init>(
android.sax.RootElement)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void characters(
char[]
int
int)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void endElement(
java.lang.String
java.lang.String
java.lang.String)

public void setDocumentLocator(
org.xml.sax.Locator)

 void start(
android.sax.Element
org.xml.sax.Attributes)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void startElement(
java.lang.String
java.lang.String
java.lang.String
org.xml.sax.Attributes)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
 void startRoot(
java.lang.String
java.lang.String
org.xml.sax.Attributes)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/sax/RootElement$Handler; )
public class android.sax.RootElement extends android.sax.Element

----------------FIELDS----------------

final android.sax.RootElement$Handler handler
----------------METHODS----------------

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.String)

public org.xml.sax.ContentHandler getContentHandler()

________________CLASS________________


public abstract interface class android.sax.TextElementListener extends java.lang.Object implements android.sax.StartElementListener, android.sax.EndTextElementListener

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________


public abstract class android.security.MessageDigest extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Ljava/security/NoSuchAlgorithmException; )
public static android.security.MessageDigest getInstance(
java.lang.String)

public abstract byte[] digest()

public abstract byte[] digest(
byte[])

public abstract void update(
byte[])

________________CLASS________________


public class android.security.Md5MessageDigest extends android.security.MessageDigest

----------------FIELDS----------------

private int mNativeMd5Context
----------------METHODS----------------

public void <init>()

private native void init()

public native byte[] digest()

public byte[] digest(
byte[])

public native void reset()

public native void update(
byte[])

________________CLASS________________


public class android.security.Sha1MessageDigest extends android.security.MessageDigest

----------------FIELDS----------------

private int mNativeSha1Context
----------------METHODS----------------

public void <init>()

private native void init()

public native byte[] digest()

public byte[] digest(
byte[])

public native void reset()

public native void update(
byte[])

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/server/BluetoothDeviceService; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.server.BluetoothDeviceService$1 extends android.os.Handler

----------------FIELDS----------------

final android.server.BluetoothDeviceService this$0
----------------METHODS----------------

 void <init>(
android.server.BluetoothDeviceService)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/server/BluetoothDeviceService; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.server.BluetoothDeviceService$2 extends android.content.BroadcastReceiver

----------------FIELDS----------------

final android.server.BluetoothDeviceService this$0
----------------METHODS----------------

 void <init>(
android.server.BluetoothDeviceService)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =EnableThread )
@dalvik.annotation.EnclosingClass (value =Landroid/server/BluetoothDeviceService; )
 class android.server.BluetoothDeviceService$EnableThread extends java.lang.Thread

----------------FIELDS----------------

private final android.bluetooth.IBluetoothDeviceCallback mEnableCallback

final android.server.BluetoothDeviceService this$0
----------------METHODS----------------

public void <init>(
android.server.BluetoothDeviceService
android.bluetooth.IBluetoothDeviceCallback)

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/server/BluetoothDeviceService$EnableThread; )
public class android.server.BluetoothDeviceService extends android.bluetooth.IBluetoothDevice$Stub

----------------FIELDS----------------

private static final java.lang.String BLUETOOTH

private static final java.lang.String BLUETOOTH_ADMIN

private static final java.lang.String DISABLE_ESCO_PATH

private static final int MAX_OUTSTANDING_ASYNC

private static final int REGISTER_SDP_RECORDS

private static final java.lang.String TAG

private android.content.Context mContext

private android.server.BluetoothDeviceService$EnableThread mEnableThread

private android.server.BluetoothEventLoop mEventLoop

private final android.os.Handler mHandler

private android.content.IntentFilter mIntentFilter

private boolean mIsAirplaneSensitive

private boolean mIsDiscovering

private volatile boolean mIsEnabled

private int mNativeData

private final android.content.BroadcastReceiver mReceiver
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

static int access$000(
android.server.BluetoothDeviceService)

static android.server.BluetoothEventLoop access$100(
android.server.BluetoothDeviceService)

static boolean access$202(
android.server.BluetoothDeviceService
boolean)

static boolean access$302(
android.server.BluetoothDeviceService
boolean)

static android.content.Context access$400(
android.server.BluetoothDeviceService)

static android.os.Handler access$500(
android.server.BluetoothDeviceService)

static android.server.BluetoothDeviceService$EnableThread access$602(
android.server.BluetoothDeviceService
android.server.BluetoothDeviceService$EnableThread)

static boolean access$700(
android.server.BluetoothDeviceService)

private native boolean cancelBondingProcessNative(
java.lang.String)

private native boolean cancelDiscoveryNative()

private native boolean cancelPinNative(
java.lang.String
int)

private void checkPermissionBluetooth()

private void checkPermissionBluetoothAdmin()

private static native void classInitNative()

private native void cleanupNativeDataNative()

private native boolean clearRemoteAliasNative(
java.lang.String)

private native boolean createBondingNative(
java.lang.String
int)

private static void disableEsco()

private native int disableNative()

private native boolean disconnectRemoteDeviceNative(
java.lang.String)

private native int enableNative()

private native java.lang.String getAddressNative()

private native java.lang.String getCompanyNative()

private native int getDiscoverableTimeoutNative()

private native java.lang.String getMajorClassNative()

private native java.lang.String getManufacturerNative()

private native java.lang.String getMinorClassNative()

private native java.lang.String getModeNative()

private native java.lang.String getNameNative()

private native java.lang.String getRemoteAliasNative(
java.lang.String)

private native int getRemoteClassNative(
java.lang.String)

private native java.lang.String getRemoteCompanyNative(
java.lang.String)

private native byte[] getRemoteFeaturesNative(
java.lang.String)

private native java.lang.String getRemoteMajorClassNative(
java.lang.String)

private native java.lang.String getRemoteManufacturerNative(
java.lang.String)

private native java.lang.String getRemoteMinorClassNative(
java.lang.String)

private native java.lang.String getRemoteNameNative(
java.lang.String)

private native java.lang.String getRemoteRevisionNative(
java.lang.String)

private native boolean getRemoteServiceChannelNative(
java.lang.String
short)

private native java.lang.String[] getRemoteServiceClassesNative(
java.lang.String)

private native int[] getRemoteServiceHandlesNative(
java.lang.String
java.lang.String)

private native byte[] getRemoteServiceRecordNative(
java.lang.String
int)

private native java.lang.String getRemoteVersionNative(
java.lang.String)

private native java.lang.String getRevisionNative()

private native java.lang.String getVersionNative()

private native boolean hasBondingNative(
java.lang.String)

private native void initializeNativeDataNative()

private final boolean isAirplaneModeOn()

private native boolean isConnectableNative()

private native boolean isConnectedNative(
java.lang.String)

private native boolean isDiscoverableNative()

private native int isEnabledNative()

private native boolean isPeriodicDiscoveryNative()

private native java.lang.String lastSeenNative(
java.lang.String)

private native java.lang.String lastUsedNative(
java.lang.String)

private native java.lang.String[] listBondingsNative()

private native java.lang.String[] listConnectionsNative()

private native java.lang.String[] listRemoteDevicesNative()

private void registerForAirplaneMode()

private native boolean removeBondingNative(
java.lang.String)

private native boolean setDiscoverableTimeoutNative(
int)

private native boolean setModeNative(
java.lang.String)

private native boolean setNameNative(
java.lang.String)

private native boolean setPinNative(
java.lang.String
java.lang.String
int)

private native boolean setRemoteAliasNative(
java.lang.String
java.lang.String)

private native boolean startDiscoveryNative(
boolean)

private native boolean startPeriodicDiscoveryNative()

private native boolean stopPeriodicDiscoveryNative()

public boolean cancelBondingProcess(
java.lang.String)

public boolean cancelDiscovery()

public boolean cancelPin(
java.lang.String)

public boolean clearRemoteAlias(
java.lang.String)

public boolean createBonding(
java.lang.String
android.bluetooth.IBluetoothDeviceCallback)

public boolean disable()

public boolean disconnectRemoteDeviceAcl(
java.lang.String)

protected void dump(
java.io.FileDescriptor
java.io.PrintWriter
java.lang.String[])

public boolean enable(
android.bluetooth.IBluetoothDeviceCallback)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

native java.lang.String getAdapterPathNative()

public java.lang.String getAddress()

public java.lang.String getCompany()

public int getDiscoverableTimeout()

public java.lang.String getMajorClass()

public java.lang.String getManufacturer()

public java.lang.String getMinorClass()

public int getMode()

public java.lang.String getName()

public java.lang.String getRemoteAlias(
java.lang.String)

public int getRemoteClass(
java.lang.String)

public java.lang.String getRemoteCompany(
java.lang.String)

public byte[] getRemoteFeatures(
java.lang.String)

public java.lang.String getRemoteMajorClass(
java.lang.String)

public java.lang.String getRemoteManufacturer(
java.lang.String)

public java.lang.String getRemoteMinorClass(
java.lang.String)

public java.lang.String getRemoteName(
java.lang.String)

public java.lang.String getRemoteRevision(
java.lang.String)

public boolean getRemoteServiceChannel(
java.lang.String
int
android.bluetooth.IBluetoothDeviceCallback)

public java.lang.String[] getRemoteServiceClasses(
java.lang.String)

public int[] getRemoteServiceHandles(
java.lang.String
java.lang.String)

public byte[] getRemoteServiceRecord(
java.lang.String
int)

public java.lang.String getRemoteVersion(
java.lang.String)

public java.lang.String getRevision()

public java.lang.String getVersion()

public boolean hasBonding(
java.lang.String)

public void init()

public boolean isAclConnected(
java.lang.String)

public boolean isConnectable()

public boolean isDiscoverable()

public boolean isDiscovering()

public boolean isEnabled()

public boolean isPeriodicDiscovery()

public java.lang.String lastSeen(
java.lang.String)

public java.lang.String lastUsed(
java.lang.String)

public java.lang.String[] listAclConnections()

public java.lang.String[] listBondings()

public java.lang.String[] listRemoteDevices()

public boolean removeBonding(
java.lang.String)

public boolean setDiscoverableTimeout(
int)

 void setIsDiscovering(
boolean)

public boolean setMode(
int)

public boolean setName(
java.lang.String)

public boolean setPin(
java.lang.String
byte[])

public boolean setRemoteAlias(
java.lang.String
java.lang.String)

public boolean startDiscovery(
boolean)

public boolean startPeriodicDiscovery()

public boolean stopPeriodicDiscovery()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.server.BluetoothEventLoop$1 extends java.lang.Thread

----------------FIELDS----------------

final android.server.BluetoothEventLoop this$0
----------------METHODS----------------

 void <init>(
android.server.BluetoothEventLoop
java.lang.String)

public void run()

________________CLASS________________


 class android.server.BluetoothEventLoop extends java.lang.Object

----------------FIELDS----------------

private static final boolean DBG

private static final java.lang.String TAG

private android.server.BluetoothDeviceService mBluetoothService

private android.content.Context mContext
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Landroid/bluetooth/IBluetoothDeviceCallback;>; )
private java.util.HashMap mCreateBondingCallbacks
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Landroid/bluetooth/IBluetoothDeviceCallback;>; )
private java.util.HashMap mGetRemoteServiceChannelCallbacks

private boolean mInterrupted

private int mNativeData
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/Integer;>; )
private java.util.HashMap mPasskeyAgentRequestData

private java.lang.Thread mThread
----------------METHODS----------------

static void <clinit>()

 void <init>(
android.content.Context
android.server.BluetoothDeviceService)

static boolean access$000(
android.server.BluetoothEventLoop)

static boolean access$100(
android.server.BluetoothEventLoop)

static boolean access$200(
android.server.BluetoothEventLoop
int)

static void access$300(
android.server.BluetoothEventLoop)

private static native void classInitNative()

private native void cleanupNativeDataNative()

private native void initializeNativeDataNative()

private static void log(
java.lang.String)

private void onCreateBondingResult(
java.lang.String
boolean)

private void onGetRemoteServiceChannelResult(
java.lang.String
int)

private native boolean setUpEventLoopNative()

private native void tearDownEventLoopNative()

private boolean waitForAndDispatchEvent(
int)

private native boolean waitForAndDispatchEventNative(
int)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()
@dalvik.annotation.Signature (value =()Ljava/util/HashMap<Ljava/lang/String;Landroid/bluetooth/IBluetoothDeviceCallback;>; )
 java.util.HashMap getCreateBondingCallbacks()
@dalvik.annotation.Signature (value =()Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/Integer;>; )
 java.util.HashMap getPasskeyAgentRequestData()
@dalvik.annotation.Signature (value =()Ljava/util/HashMap<Ljava/lang/String;Landroid/bluetooth/IBluetoothDeviceCallback;>; )
 java.util.HashMap getRemoteServiceChannelCallbacks()

public boolean isEventLoopRunning()

public void onBondingCreated(
java.lang.String)

public void onBondingRemoved(
java.lang.String)

public void onDiscoveryCompleted()

public void onDiscoveryStarted()

public void onModeChanged(
java.lang.String)

public void onNameChanged(
java.lang.String)

public void onPairingCancel()

public void onPairingRequest()

public void onPasskeyAgentCancel(
java.lang.String)

public void onPasskeyAgentRequest(
java.lang.String
int)

public void onRemoteAliasChanged(
java.lang.String
java.lang.String)

public void onRemoteAliasCleared(
java.lang.String)

public void onRemoteClassUpdated(
java.lang.String
int)

public void onRemoteDeviceConnected(
java.lang.String)

public void onRemoteDeviceDisappeared(
java.lang.String)

public void onRemoteDeviceDisconnectRequested(
java.lang.String)

public void onRemoteDeviceDisconnected(
java.lang.String)

public void onRemoteDeviceFound(
java.lang.String
int
short)

public void onRemoteNameChanged(
java.lang.String
java.lang.String)

public void onRemoteNameFailed(
java.lang.String)

public void onRemoteNameUpdated(
java.lang.String
java.lang.String)

 void start()

public void stop()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/server/checkin/CheckinProtocol; )
 class android.server.checkin.CheckinProtocol$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$android$provider$Checkin$Properties$Tag
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/server/checkin/CheckinProtocol$1; )
public class android.server.checkin.CheckinProtocol extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/json/JSONException; )
public static org.json.JSONObject formatRequest(
long
long
java.lang.String
java.util.Locale
android.database.Cursor
android.database.Cursor
android.database.Cursor
int
int)
@dalvik.annotation.Throws (value =Lorg/json/JSONException; )
public static android.content.Intent[] getReplyIntents(
org.json.JSONObject)
@dalvik.annotation.Throws (value =Lorg/json/JSONException; )
@dalvik.annotation.Signature (value =(Lorg/json/JSONObject;)Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>; )
public static java.util.Map getReplySettings(
org.json.JSONObject)
@dalvik.annotation.Throws (value =Lorg/json/JSONException; )
public static long getReplyTime(
org.json.JSONObject)
@dalvik.annotation.Throws (value =Lorg/json/JSONException; )
public static boolean isMarketReplyOk(
org.json.JSONObject)
@dalvik.annotation.Throws (value =Lorg/json/JSONException; )
public static boolean isReplyOk(
org.json.JSONObject)

public static long sentEventDate(
org.json.JSONObject)

public static android.content.ContentValues[] sentStats(
org.json.JSONObject)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =OpenHelper )
@dalvik.annotation.EnclosingClass (value =Landroid/server/checkin/CheckinProvider; )
 class android.server.checkin.CheckinProvider$OpenHelper extends android.database.sqlite.SQLiteOpenHelper

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.content.Context)

public void onCreate(
android.database.sqlite.SQLiteDatabase)

public void onUpgrade(
android.database.sqlite.SQLiteDatabase
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/server/checkin/CheckinProvider$OpenHelper; )
public class android.server.checkin.CheckinProvider extends android.content.ContentProvider

----------------FIELDS----------------

private static final int CRASH_LIMIT

private static final int CRASH_SIZE

private static final java.lang.String DATABASE_FILENAME

private static final int DATABASE_VERSION

private static final int EVENT_LIMIT

private static final int EVENT_SIZE

private static final java.lang.String PROPERTIES_PERMISSION

private static final java.lang.String TAG

private android.database.sqlite.SQLiteOpenHelper mOpenHelper

private final java.lang.Object mStatsLock
----------------METHODS----------------

public void <init>()

private void checkPermissions(
android.net.Uri)

private long insertCrash(
android.content.ContentValues)

private long insertEvent(
android.content.ContentValues)

private long insertStats(
android.content.ContentValues)

public int delete(
android.net.Uri
java.lang.String
java.lang.String[])

public java.lang.String getType(
android.net.Uri)

public android.net.Uri insert(
android.net.Uri
android.content.ContentValues)

public boolean onCreate()

public android.database.Cursor query(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)

public int update(
android.net.Uri
android.content.ContentValues
java.lang.String
java.lang.String[])

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.server.checkin.CheckinService$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.server.checkin.CheckinService this$0

final byte[] val$data

final int val$uid
----------------METHODS----------------

 void <init>(
android.server.checkin.CheckinService
int
byte[])

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/server/checkin/CheckinService; )
@dalvik.annotation.InnerClass (accessFlags =2 name =CheckinReceiver )
 class android.server.checkin.CheckinService$CheckinReceiver extends android.content.BroadcastReceiver implements java.lang.Runnable

----------------FIELDS----------------

final android.server.checkin.CheckinService this$0
----------------METHODS----------------

private void <init>(
android.server.checkin.CheckinService)

 void <init>(
android.server.checkin.CheckinService
android.server.checkin.CheckinService$1)

public void onReceive(
android.content.Context
android.content.Intent)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/server/checkin/CheckinService; )
@dalvik.annotation.InnerClass (accessFlags =2 name =ConnectivityReceiver )
 class android.server.checkin.CheckinService$ConnectivityReceiver extends android.content.BroadcastReceiver

----------------FIELDS----------------

final android.server.checkin.CheckinService this$0
----------------METHODS----------------

private void <init>(
android.server.checkin.CheckinService)

 void <init>(
android.server.checkin.CheckinService
android.server.checkin.CheckinService$1)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =ParentalControlRunnable )
@dalvik.annotation.EnclosingClass (value =Landroid/server/checkin/CheckinService; )
 class android.server.checkin.CheckinService$ParentalControlRunnable extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

private android.os.IParentalControlCallback mCallback

final android.server.checkin.CheckinService this$0
----------------METHODS----------------

public void <init>(
android.server.checkin.CheckinService
android.os.IParentalControlCallback)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/server/checkin/CheckinService; )
@dalvik.annotation.InnerClass (accessFlags =2 name =TimeChangedReceiver )
 class android.server.checkin.CheckinService$TimeChangedReceiver extends android.content.BroadcastReceiver

----------------FIELDS----------------

final android.server.checkin.CheckinService this$0
----------------METHODS----------------

private void <init>(
android.server.checkin.CheckinService)

 void <init>(
android.server.checkin.CheckinService
android.server.checkin.CheckinService$1)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/server/checkin/CheckinService$ConnectivityReceiver;Landroid/server/checkin/CheckinService$TimeChangedReceiver;Landroid/server/checkin/CheckinService$CheckinReceiver;Landroid/server/checkin/CheckinService$ParentalControlRunnable; )
public class android.server.checkin.CheckinService extends android.os.ICheckinService$Stub

----------------FIELDS----------------

private static final long CHECKIN_INTERVAL

private static final long CHECKIN_INTERVAL_MAX

private static final java.lang.String CHECKIN_URL

private static final java.lang.String CRASH_URL

private static final int EVENT_LOG_SENTINEL

private static final java.lang.String[] GSERVICES_QUERY_PROJECTION

private static final int KERNEL_VERSION_MAX

private static final java.io.File KERNEL_VERSION_PATH

private static final int LAST_KMSG_MAX_LENGTH

private static final java.io.File LAST_KMSG_PATH

private static final boolean LOCAL_LOGV

private static final int MAX_EVENTDATA

private static final int MAX_EVENTS

private static final int MAX_REQUESTS

private static final long MIN_TIME_DIFF

private static final long MIN_TIME_SET

private static final java.lang.String RUNTIME_STARTED_PROPERTY

private static final java.lang.String TAG

private static final java.lang.String TIME_FETCH_URL

private static final int TOMBSTONES_MAX_LENGTH

private static final java.io.File TOMBSTONES_PATH

private static final java.lang.String USER_AGENT

private final android.app.AlarmManager mAlarmManager

private final android.content.ContentResolver mContentResolver

private final android.content.Context mContext

private final android.util.EventLogTags mEventTags

private final android.os.Handler mHandler

private final com.google.android.net.GoogleHttpClient mHttpClient

private long mLastRealtime

private long mLastUptime

private boolean mNetworkConnected
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

static void access$1000(
android.server.checkin.CheckinService)

static boolean access$1100(
android.server.checkin.CheckinService)

static boolean access$1102(
android.server.checkin.CheckinService
boolean)

static void access$300(
android.server.checkin.CheckinService
int
byte[])

static android.content.ContentResolver access$400(
android.server.checkin.CheckinService)

static void access$500(
android.server.checkin.CheckinService)

static android.content.Context access$600(
android.server.checkin.CheckinService)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/json/JSONException; )
static void access$700(
android.server.checkin.CheckinService)

static void access$800(
android.server.checkin.CheckinService
java.lang.Throwable)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/HttpException; )
static void access$900(
android.server.checkin.CheckinService)

private void addBootEvents()

private void addKernelEvents()

private void addTombstoneEvents()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/json/JSONException; )
private void doCheckin()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/json/JSONException; )
private boolean doFetchTime()
@dalvik.annotation.Throws (value =Lorg/json/JSONException; )
private void formatKernelEvent(
java.lang.Object
java.lang.StringBuilder)

private long getAndroidId()

private long getLastSuccessTime()

private long getLoggingId()

private java.lang.String getProvisioningDigest()
@dalvik.annotation.Throws (value =Lorg/json/JSONException; )
private void handleReply(
org.json.JSONObject
org.json.JSONObject)
@dalvik.annotation.Throws (value =Lorg/json/JSONException; )
private org.json.JSONObject makeRequest()
@dalvik.annotation.Throws (value =Lorg/json/JSONException; )
private boolean maybeSetTime(
org.json.JSONObject)

private void reportCrashInternal(
int
byte[])

private void reportFailure(
java.lang.Throwable)

private void scheduleCheckin()

private void updateClockStats()
@dalvik.annotation.Signature (value =(Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;)V )
private void updateGservices(
java.util.Map)

private void updateParentalControlStatus()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/HttpException; )
private void uploadCrashes()

protected void dump(
java.io.FileDescriptor
java.io.PrintWriter
java.lang.String[])

public void getParentalControlState(
android.os.IParentalControlCallback)

public void masterClear()

public void reportCrashAsync(
byte[])

public void reportCrashSync(
byte[])

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/server/checkin/DumpStateReceiver; )
@dalvik.annotation.InnerClass (accessFlags =10 name =CrashReportObserver )
 class android.server.checkin.DumpStateReceiver$CrashReportObserver extends android.database.ContentObserver implements java.lang.Runnable

----------------FIELDS----------------

private android.content.ContentResolver mContentResolver

private long mHighestId
----------------METHODS----------------

public void <init>(
android.content.Context)

public void onChange(
boolean)

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/server/checkin/DumpStateReceiver$CrashReportObserver; )
 class android.server.checkin.DumpStateReceiver extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String DUMPCRASH

private static final java.lang.String DUMPSTATE

private static final java.lang.String TAG
----------------METHODS----------------

public void <init>(
android.content.Context)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public static void dumpStateTo(
java.io.OutputStream
boolean)

________________CLASS________________


public class android.server.checkin.RecoverySystem extends java.lang.Object

----------------FIELDS----------------

private static java.io.File COMMAND_FILE

private static java.io.File INTENT_FILE

private static int INTENT_FILE_MAX_LENGTH

private static java.io.File LOG_FILE

private static int LOG_FILE_MAX_LENGTH

public static final java.lang.String RECOVERY_COMPLETED_ACTION

private static java.io.File RECOVERY_DIR

private static final java.lang.String TAG
----------------METHODS----------------

static void <clinit>()

public void <init>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;)V )
private static void bootCommand(
java.lang.String
java.util.Map)

public static void handleAftermath(
android.content.Context)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
@dalvik.annotation.Signature (value =(Ljava/io/File;Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;)V )
public static void rebootAndUpdate(
java.io.File
java.util.Map)
@dalvik.annotation.Signature (value =(Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;)V )
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public static void rebootAndWipe(
java.util.Map)

________________CLASS________________


public class android.server.checkin.SecretCodeReceiver extends android.content.BroadcastReceiver

----------------FIELDS----------------

private static final java.lang.String TAG
----------------METHODS----------------

public void <init>()

private static void setDesiredBuild(
android.content.Context
java.lang.String)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/server/checkin/UpdateReceiver; )
 class android.server.checkin.UpdateReceiver$1 extends android.content.BroadcastReceiver

----------------FIELDS----------------

final android.server.checkin.UpdateReceiver this$0
----------------METHODS----------------

 void <init>(
android.server.checkin.UpdateReceiver)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/server/checkin/UpdateReceiver; )
 class android.server.checkin.UpdateReceiver$2 extends android.content.BroadcastReceiver

----------------FIELDS----------------

final android.server.checkin.UpdateReceiver this$0
----------------METHODS----------------

 void <init>(
android.server.checkin.UpdateReceiver)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/server/checkin/UpdateReceiver; )
 class android.server.checkin.UpdateReceiver$3 extends android.content.BroadcastReceiver

----------------FIELDS----------------

final android.server.checkin.UpdateReceiver this$0
----------------METHODS----------------

 void <init>(
android.server.checkin.UpdateReceiver)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =DownloadCompletedBroadcastReceiver )
@dalvik.annotation.EnclosingClass (value =Landroid/server/checkin/UpdateReceiver; )
public class android.server.checkin.UpdateReceiver$DownloadCompletedBroadcastReceiver extends android.content.BroadcastReceiver

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/server/checkin/UpdateReceiver; )
@dalvik.annotation.InnerClass (accessFlags =10 name =VerifierRunner )
 class android.server.checkin.UpdateReceiver$VerifierRunner extends java.lang.Thread

----------------FIELDS----------------

private final android.content.Context mContext

private final android.content.Intent mIntent

private final java.io.File mUpdate
----------------METHODS----------------

 void <init>(
android.content.Context
android.content.Intent
java.lang.String)

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/server/checkin/UpdateReceiver$VerifierRunner;Landroid/server/checkin/UpdateReceiver$DownloadCompletedBroadcastReceiver; )
public class android.server.checkin.UpdateReceiver extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String CANCEL_ACTION

private static final java.lang.String DM_NOTIFICATION_CLASS

private static final java.lang.String DM_NOTIFICATION_PACKAGE

public static final java.lang.String INSTALL_ACTION

public static final java.lang.String PERMISSION

private static final java.lang.String[] QUERY_PROJECTION

private static final java.lang.String[] QUERY_WHERE_ARGS

private static final java.lang.String QUERY_WHERE_CLAUSE

public static final java.lang.String READY_ACTION

private static final long REDOWNLOAD_MSEC

private static final long REVERIFY_MSEC

private static final java.lang.String SETTINGS_PACKAGE_NAME

private static final java.lang.String TAG

public static final java.lang.String UPDATE_ACTION

private static android.content.Intent mUpdateIntent

private static long mVerificationStarted

private final android.app.AlarmManager mAlarmManager

private android.content.BroadcastReceiver mCancelReceiver

private final android.content.Context mContext

private android.content.BroadcastReceiver mInstallReceiver

private android.content.BroadcastReceiver mUpdateReceiver
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

static android.content.Intent access$000()

static android.content.Intent access$002(
android.content.Intent)

static long access$100()

static long access$102(
long)

static java.lang.String[] access$200()

static android.content.Context access$300(
android.server.checkin.UpdateReceiver)

static void access$400(
android.content.Context)

static java.lang.String access$500()

static void access$600(
android.content.Context
java.io.File)

private static void installUpdate(
android.content.Context
java.io.File)

private static void removeAllDownloads(
android.content.Context)

________________CLASS________________


public class android.server.checkin.UpdateVerifier extends java.lang.Object

----------------FIELDS----------------

private static final java.io.File KEYSTORE

private static final java.lang.String TAG
----------------METHODS----------------

static void <clinit>()

public void <init>()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/security/GeneralSecurityException; )
public static void verifyPackage(
java.io.File)

________________CLASS________________


public class android.server.data.BuildData extends java.lang.Object

----------------FIELDS----------------

private static final int VERSION

private final java.lang.String fingerprint

private final java.lang.String incrementalVersion

private final long time
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
 void <init>(
java.io.DataInput)

public void <init>(
java.lang.String
java.lang.String
long)

public java.lang.String getFingerprint()

public java.lang.String getIncrementalVersion()

public long getTime()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
 void write(
java.io.DataOutput)

________________CLASS________________


public class android.server.data.CrashData extends java.lang.Object

----------------FIELDS----------------

final java.lang.String activity

final android.server.data.BuildData buildData

final java.lang.String id

final byte[] state

final android.server.data.ThrowableData throwableData

final long time
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void <init>(
java.io.DataInput)

public void <init>(
java.lang.String
java.lang.String
android.server.data.BuildData
android.server.data.ThrowableData)

public void <init>(
java.lang.String
java.lang.String
android.server.data.BuildData
android.server.data.ThrowableData
byte[])

public void <init>(
java.lang.String
java.lang.Throwable)

public java.lang.String getActivity()

public android.server.data.BuildData getBuildData()

public java.lang.String getId()

public byte[] getState()

public android.server.data.ThrowableData getThrowableData()

public long getTime()

public java.lang.String toString()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
java.io.DataOutput)

________________CLASS________________


public class android.server.data.StackTraceElementData extends java.lang.Object

----------------FIELDS----------------

final java.lang.String className

final java.lang.String fileName

final int lineNumber

final java.lang.String methodName
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void <init>(
java.io.DataInput)

public void <init>(
java.lang.StackTraceElement)

public java.lang.String getClassName()

public java.lang.String getFileName()

public int getLineNumber()

public java.lang.String getMethodName()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
 void write(
java.io.DataOutput)

________________CLASS________________


public class android.server.data.ThrowableData extends java.lang.Object

----------------FIELDS----------------

final android.server.data.ThrowableData cause

final java.lang.String message

final android.server.data.StackTraceElementData[] stackTrace

final java.lang.String type
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void <init>(
java.io.DataInput)

public void <init>(
java.lang.Throwable)

private static void append(
java.lang.String
java.lang.StringBuilder
android.server.data.ThrowableData)

public android.server.data.ThrowableData getCause()

public java.lang.String getMessage()

public android.server.data.StackTraceElementData[] getStackTrace()

public java.lang.String getType()

public java.lang.String toString()

public java.lang.String toString(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
java.io.DataOutput)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/server/search/SearchManagerService; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.server.search.SearchManagerService$1 extends android.content.BroadcastReceiver

----------------FIELDS----------------

final android.server.search.SearchManagerService this$0
----------------METHODS----------------

 void <init>(
android.server.search.SearchManagerService)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/server/search/SearchManagerService; )
 class android.server.search.SearchManagerService$2 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.server.search.SearchManagerService this$0
----------------METHODS----------------

 void <init>(
android.server.search.SearchManagerService)

public void run()

________________CLASS________________


public class android.server.search.SearchManagerService extends android.app.ISearchManager$Stub

----------------FIELDS----------------

private static final boolean DEBUG

private static final boolean IMMEDIATE_SEARCHABLES_UPDATE

private static final java.lang.String TAG

private static final boolean localLOGV

private final android.content.Context mContext

private final android.os.Handler mHandler

private android.content.BroadcastReceiver mIntentReceiver

private java.lang.Runnable mRunUpdateSearchable

private boolean mSearchablesDirty
----------------METHODS----------------

public void <init>(
android.content.Context)

static boolean access$000(
android.server.search.SearchManagerService)

static boolean access$002(
android.server.search.SearchManagerService
boolean)

static java.lang.Runnable access$100(
android.server.search.SearchManagerService)

static android.os.Handler access$200(
android.server.search.SearchManagerService)

static void access$300(
android.server.search.SearchManagerService)

private void updateSearchables()

public android.server.search.SearchableInfo getSearchableInfo(
android.content.ComponentName
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/server/search/SearchableInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/server/search/SearchableInfo;>; )
final class android.server.search.SearchableInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.server.search.SearchableInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.server.search.SearchableInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1 name =ActionKeyInfo )
@dalvik.annotation.EnclosingClass (value =Landroid/server/search/SearchableInfo; )
public class android.server.search.SearchableInfo$ActionKeyInfo extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------

public int mKeyCode

private android.server.search.SearchableInfo$ActionKeyInfo mNext

public java.lang.String mQueryActionMsg

public java.lang.String mSuggestActionMsg

public java.lang.String mSuggestActionMsgColumn

final android.server.search.SearchableInfo this$0
----------------METHODS----------------

public void <init>(
android.server.search.SearchableInfo
android.content.Context
android.util.AttributeSet
android.server.search.SearchableInfo$ActionKeyInfo)

public void <init>(
android.server.search.SearchableInfo
android.os.Parcel
android.server.search.SearchableInfo$ActionKeyInfo)

static android.server.search.SearchableInfo$ActionKeyInfo access$100(
android.server.search.SearchableInfo$ActionKeyInfo)

public int describeContents()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/server/search/SearchableInfo$ActionKeyInfo; )
public final class android.server.search.SearchableInfo extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/server/search/SearchableInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

static final int DBG_INHIBIT_SUGGESTIONS

static final java.lang.String LOG_TAG

private static final java.lang.String MD_LABEL_DEFAULT_SEARCHABLE

private static final java.lang.String MD_LABEL_SEARCHABLE

private static final java.lang.String MD_SEARCHABLE_SYSTEM_SEARCH

private static final java.lang.String MD_XML_ELEMENT_SEARCHABLE

private static final java.lang.String MD_XML_ELEMENT_SEARCHABLE_ACTION_KEY

private static android.server.search.SearchableInfo sDefaultSearchable
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/server/search/SearchableInfo;>; )
private static java.util.ArrayList sSearchablesList
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/content/ComponentName;Landroid/server/search/SearchableInfo;>; )
private static java.util.HashMap sSearchablesMap

private android.server.search.SearchableInfo$ActionKeyInfo mActionKeyList

public boolean mBadgeIcon

public boolean mBadgeLabel

private android.content.Context mCacheActivityContext

private int mHintId

private int mIconId

private int mLabelId

public boolean mQueryRewriteFromData

public boolean mQueryRewriteFromText

public android.content.ComponentName mSearchActivity

private int mSearchButtonText

private int mSearchMode

public boolean mSearchable

private java.lang.String mSuggestAuthority

private java.lang.String mSuggestIntentAction

private java.lang.String mSuggestIntentData

private java.lang.String mSuggestPath

private java.lang.String mSuggestProviderPackage

private java.lang.String mSuggestSelection
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.content.Context
android.util.AttributeSet
android.content.ComponentName)

public void <init>(
android.os.Parcel)

static android.content.Context access$000(
android.server.search.SearchableInfo)

public static void buildSearchableList(
android.content.Context)

private static android.server.search.SearchableInfo getActivityMetaData(
android.content.Context
org.xmlpull.v1.XmlPullParser
android.content.ComponentName)

public static android.server.search.SearchableInfo getDefaultSearchable()

public static android.server.search.SearchableInfo getSearchableInfo(
android.content.Context
android.content.ComponentName)
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Landroid/server/search/SearchableInfo;>; )
public static java.util.ArrayList getSearchablesList()

public static void setDefaultSearchable(
android.content.Context
android.content.ComponentName)

private void setSearchModeFlags()

public int describeContents()

public android.server.search.SearchableInfo$ActionKeyInfo findActionKey(
int)

public android.content.Context getActivityContext(
android.content.Context)

public int getHintId()

public int getIconId()

public int getLabelId()

public android.content.Context getProviderContext(
android.content.Context
android.content.Context)

public int getSearchButtonText()

public java.lang.String getSuggestAuthority()

public java.lang.String getSuggestIntentAction()

public java.lang.String getSuggestIntentData()

public java.lang.String getSuggestPath()

public java.lang.String getSuggestSelection()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public abstract interface class android.speech.recognition.GrammarListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onError(
java.lang.Exception)

public abstract void onLoaded()

public abstract void onUnloaded()

________________CLASS________________


public abstract interface class android.speech.recognition.EmbeddedGrammarListener extends java.lang.Object implements android.speech.recognition.GrammarListener

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onCompileAllSlots()

public abstract void onError(
java.lang.Exception)

public abstract void onResetAllSlots()

public abstract void onSaved(
java.lang.String)

________________CLASS________________


public abstract class android.speech.recognition.AbstractEmbeddedGrammarListener extends java.lang.Object implements android.speech.recognition.EmbeddedGrammarListener

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void onCompileAllSlots()

public void onError(
java.lang.Exception)

public void onLoaded()

public void onResetAllSlots()

public void onSaved(
java.lang.String)

public void onUnloaded()

________________CLASS________________


public abstract class android.speech.recognition.AbstractGrammarListener extends java.lang.Object implements android.speech.recognition.GrammarListener

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void onError(
java.lang.Exception)

public void onLoaded()

public void onUnloaded()

________________CLASS________________


public abstract interface class android.speech.recognition.ParametersListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;)V )
public abstract void onParametersGet(
java.util.Hashtable)
@dalvik.annotation.Signature (value =(Ljava/util/Vector<Ljava/lang/String;>;Ljava/lang/Exception;)V )
public abstract void onParametersGetError(
java.util.Vector
java.lang.Exception)
@dalvik.annotation.Signature (value =(Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;)V )
public abstract void onParametersSet(
java.util.Hashtable)
@dalvik.annotation.Signature (value =(Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;Ljava/lang/Exception;)V )
public abstract void onParametersSetError(
java.util.Hashtable
java.lang.Exception)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/speech/recognition/RecognizerListener$FailureReason; )
public abstract interface class android.speech.recognition.RecognizerListener extends java.lang.Object implements android.speech.recognition.ParametersListener

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onAcousticStateReset()

public abstract void onBeginningOfSpeech()

public abstract void onEndOfSpeech()

public abstract void onError(
java.lang.Exception)

public abstract void onRecognitionFailure(
android.speech.recognition.RecognizerListener$FailureReason)

public abstract void onRecognitionSuccess(
android.speech.recognition.RecognitionResult)

public abstract void onStartOfSpeechTimeout()

public abstract void onStarted()

public abstract void onStopped()

________________CLASS________________


public abstract class android.speech.recognition.AbstractRecognizerListener extends java.lang.Object implements android.speech.recognition.RecognizerListener

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void onAcousticStateReset()

public void onBeginningOfSpeech()

public void onEndOfSpeech()

public void onError(
java.lang.Exception)
@dalvik.annotation.Signature (value =(Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;)V )
public void onParametersGet(
java.util.Hashtable)
@dalvik.annotation.Signature (value =(Ljava/util/Vector<Ljava/lang/String;>;Ljava/lang/Exception;)V )
public void onParametersGetError(
java.util.Vector
java.lang.Exception)
@dalvik.annotation.Signature (value =(Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;)V )
public void onParametersSet(
java.util.Hashtable)
@dalvik.annotation.Signature (value =(Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;Ljava/lang/Exception;)V )
public void onParametersSetError(
java.util.Hashtable
java.lang.Exception)

public void onRecognitionFailure(
android.speech.recognition.RecognizerListener$FailureReason)

public void onRecognitionSuccess(
android.speech.recognition.RecognitionResult)

public void onStartOfSpeechTimeout()

public void onStarted()

public void onStopped()

________________CLASS________________


public abstract interface class android.speech.recognition.SrecGrammarListener extends java.lang.Object implements android.speech.recognition.EmbeddedGrammarListener

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onAddItemList()

public abstract void onAddItemListFailure(
int
java.lang.Exception)

public abstract void onError(
java.lang.Exception)

________________CLASS________________


public abstract class android.speech.recognition.AbstractSrecGrammarListener extends java.lang.Object implements android.speech.recognition.SrecGrammarListener

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void onAddItemList()

public void onAddItemListFailure(
int
java.lang.Exception)

public void onCompileAllSlots()

public void onError(
java.lang.Exception)

public void onLoaded()

public void onResetAllSlots()

public void onSaved(
java.lang.String)

public void onUnloaded()

________________CLASS________________


public class android.speech.recognition.AudioAlreadyInUseException extends java.lang.IllegalArgumentException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________


public class android.speech.recognition.AudioDriverErrorException extends java.lang.Exception

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________


public abstract interface class android.speech.recognition.AudioSource extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.speech.recognition.AudioStream createAudio()

public abstract void start()

public abstract void stop()

________________CLASS________________


public abstract interface class android.speech.recognition.AudioSourceListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onError(
java.lang.Exception)

public abstract void onStarted()

public abstract void onStopped()

________________CLASS________________


public abstract interface class android.speech.recognition.AudioStream extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@java.lang.Deprecated
public abstract void dispose()

________________CLASS________________


public abstract class android.speech.recognition.Codec extends java.lang.Object

----------------FIELDS----------------

public static final android.speech.recognition.Codec PCM_16BIT_11K

public static final android.speech.recognition.Codec PCM_16BIT_22K

public static final android.speech.recognition.Codec PCM_16BIT_8K

public static final android.speech.recognition.Codec ULAW_8BIT_8K

private final java.lang.String message
----------------METHODS----------------

static void <clinit>()

private void <init>(
java.lang.String)

 void <init>(
java.lang.String
android.speech.recognition.Codec$1)

public abstract byte getBitsPerSample()

public abstract int getSampleRate()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/speech/recognition/Codec; )
final class android.speech.recognition.Codec$1 extends android.speech.recognition.Codec

----------------FIELDS----------------
----------------METHODS----------------

 void <init>(
java.lang.String)

public byte getBitsPerSample()

public int getSampleRate()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/speech/recognition/Codec; )
final class android.speech.recognition.Codec$2 extends android.speech.recognition.Codec

----------------FIELDS----------------
----------------METHODS----------------

 void <init>(
java.lang.String)

public byte getBitsPerSample()

public int getSampleRate()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/speech/recognition/Codec; )
final class android.speech.recognition.Codec$3 extends android.speech.recognition.Codec

----------------FIELDS----------------
----------------METHODS----------------

 void <init>(
java.lang.String)

public byte getBitsPerSample()

public int getSampleRate()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/speech/recognition/Codec; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.speech.recognition.Codec$4 extends android.speech.recognition.Codec

----------------FIELDS----------------
----------------METHODS----------------

 void <init>(
java.lang.String)

public byte getBitsPerSample()

public int getSampleRate()

________________CLASS________________


public abstract class android.speech.recognition.DeviceSpeaker extends java.lang.Object

----------------FIELDS----------------

private static android.speech.recognition.DeviceSpeaker instance
----------------METHODS----------------

public void <init>()

public static android.speech.recognition.DeviceSpeaker getInstance()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException;Ljava/lang/IllegalArgumentException; )
public abstract void setCodec(
android.speech.recognition.Codec)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public abstract void setListener(
android.speech.recognition.DeviceSpeakerListener)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException;Ljava/lang/IllegalArgumentException; )
public abstract void start(
android.speech.recognition.AudioStream)

public abstract void stop()

________________CLASS________________


public abstract interface class android.speech.recognition.DeviceSpeakerListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onError(
java.lang.Exception)

public abstract void onStarted()

public abstract void onStopped()

________________CLASS________________


public abstract interface class android.speech.recognition.Grammar extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void dispose()

public abstract void load()

public abstract void unload()

________________CLASS________________


public abstract interface class android.speech.recognition.EmbeddedGrammar extends java.lang.Object implements android.speech.recognition.Grammar

----------------FIELDS----------------
----------------METHODS----------------

public abstract void compileAllSlots()

public abstract void resetAllSlots()

public abstract void save(
java.lang.String)

________________CLASS________________


public abstract interface class android.speech.recognition.Recognizer extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public abstract android.speech.recognition.Grammar createGrammar(
java.lang.String
android.speech.recognition.GrammarListener)
@dalvik.annotation.Signature (value =(Ljava/util/Vector<Ljava/lang/String;>;)V )
public abstract void getParameters(
java.util.Vector)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException;Ljava/lang/IllegalArgumentException; )
public abstract void recognize(
android.speech.recognition.AudioStream
android.speech.recognition.Grammar)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException;Ljava/lang/IllegalArgumentException;Ljava/lang/UnsupportedOperationException; )
@dalvik.annotation.Signature (value =(Landroid/speech/recognition/AudioStream;Ljava/util/Vector<Landroid/speech/recognition/Grammar;>;)V )
public abstract void recognize(
android.speech.recognition.AudioStream
java.util.Vector)

public abstract void setListener(
android.speech.recognition.RecognizerListener)
@dalvik.annotation.Signature (value =(Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;)V )
public abstract void setParameters(
java.util.Hashtable)

public abstract void stop()

________________CLASS________________


public abstract class android.speech.recognition.EmbeddedRecognizer extends java.lang.Object implements android.speech.recognition.Recognizer

----------------FIELDS----------------

private static android.speech.recognition.EmbeddedRecognizer instance
----------------METHODS----------------

public void <init>()

public static android.speech.recognition.EmbeddedRecognizer getInstance()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException;Ljava/io/FileNotFoundException;Ljava/io/IOException;Ljava/lang/UnsatisfiedLinkError;Ljava/lang/ClassNotFoundException; )
public abstract void configure(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public abstract void resetAcousticState()

________________CLASS________________


public class android.speech.recognition.GrammarErrorException extends java.lang.Exception

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________


public class android.speech.recognition.GrammarOverflowException extends java.lang.Exception

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________


public class android.speech.recognition.InvalidURLException extends java.lang.Exception

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =LogLevel )
@dalvik.annotation.EnclosingClass (value =Landroid/speech/recognition/Logger; )
public class android.speech.recognition.Logger$LogLevel extends java.lang.Object

----------------FIELDS----------------

public static android.speech.recognition.Logger$LogLevel LEVEL_ERROR

public static android.speech.recognition.Logger$LogLevel LEVEL_INFO

public static android.speech.recognition.Logger$LogLevel LEVEL_NONE

public static android.speech.recognition.Logger$LogLevel LEVEL_TRACE

public static android.speech.recognition.Logger$LogLevel LEVEL_WARN

private java.lang.String message
----------------METHODS----------------

static void <clinit>()

private void <init>(
java.lang.String)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/speech/recognition/Logger$LogLevel; )
public abstract class android.speech.recognition.Logger extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static android.speech.recognition.Logger getInstance()

public abstract void error(
java.lang.String)

public abstract void info(
java.lang.String)

public abstract void setLoggingLevel(
android.speech.recognition.Logger$LogLevel)

public abstract void setPath(
java.lang.String)

public abstract void trace(
java.lang.String)

public abstract void warn(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Mode )
@dalvik.annotation.EnclosingClass (value =Landroid/speech/recognition/MediaFileReader; )
public class android.speech.recognition.MediaFileReader$Mode extends java.lang.Object

----------------FIELDS----------------

public static android.speech.recognition.MediaFileReader$Mode ALL_AT_ONCE

public static android.speech.recognition.MediaFileReader$Mode REAL_TIME

private java.lang.String message
----------------METHODS----------------

static void <clinit>()

private void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/speech/recognition/MediaFileReader$Mode; )
public abstract class android.speech.recognition.MediaFileReader extends java.lang.Object implements android.speech.recognition.AudioSource

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public static android.speech.recognition.MediaFileReader create(
java.lang.String
android.speech.recognition.AudioSourceListener)

public abstract android.speech.recognition.AudioStream createAudio()

public abstract void setMode(
android.speech.recognition.MediaFileReader$Mode)

public abstract void start()

public abstract void stop()

________________CLASS________________


public abstract interface class android.speech.recognition.MediaFileReaderListener extends java.lang.Object implements android.speech.recognition.AudioSourceListener

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________


public abstract class android.speech.recognition.MediaFileWriter extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static android.speech.recognition.MediaFileWriter create(
android.speech.recognition.MediaFileWriterListener)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public abstract void save(
android.speech.recognition.AudioStream
java.lang.String)

________________CLASS________________


public abstract interface class android.speech.recognition.MediaFileWriterListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onError(
java.lang.Exception)

public abstract void onStopped()

________________CLASS________________


public abstract class android.speech.recognition.Microphone extends java.lang.Object implements android.speech.recognition.AudioSource

----------------FIELDS----------------

private static android.speech.recognition.Microphone instance
----------------METHODS----------------

public void <init>()

public static android.speech.recognition.Microphone getInstance()

public abstract android.speech.recognition.AudioStream createAudio()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException;Ljava/lang/IllegalArgumentException; )
public abstract void setCodec(
android.speech.recognition.Codec)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public abstract void setListener(
android.speech.recognition.AudioSourceListener)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public abstract void start()

public abstract void stop()

________________CLASS________________


public abstract interface class android.speech.recognition.MicrophoneListener extends java.lang.Object implements android.speech.recognition.AudioSourceListener

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/speech/recognition/NBestRecognitionResult; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =Entry )
public abstract interface class android.speech.recognition.NBestRecognitionResult$Entry extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.lang.String get(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public abstract byte getConfidenceScore()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public abstract java.lang.String getLiteralMeaning()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public abstract java.lang.String getSemanticMeaning()

public abstract java.util.Enumeration keys()

________________CLASS________________


public abstract interface class android.speech.recognition.RecognitionResult extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/speech/recognition/NBestRecognitionResult$Entry; )
public abstract interface class android.speech.recognition.NBestRecognitionResult extends java.lang.Object implements android.speech.recognition.RecognitionResult

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public abstract android.speech.recognition.VoicetagItem createVoicetagItem(
java.lang.String
android.speech.recognition.VoicetagItemListener)
@dalvik.annotation.Throws (value =Ljava/lang/ArrayIndexOutOfBoundsException; )
public abstract android.speech.recognition.NBestRecognitionResult$Entry getEntry(
int)

public abstract int getSize()

________________CLASS________________


public class android.speech.recognition.ParameterErrorException extends java.lang.Exception

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________


public class android.speech.recognition.ParseErrorException extends java.lang.Exception

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =FailureReason )
@dalvik.annotation.EnclosingClass (value =Landroid/speech/recognition/RecognizerListener; )
public class android.speech.recognition.RecognizerListener$FailureReason extends java.lang.Object

----------------FIELDS----------------

public static android.speech.recognition.RecognizerListener$FailureReason BEGINNING_OF_SPEECH_TIMEOUT

public static android.speech.recognition.RecognizerListener$FailureReason NO_MATCH

public static android.speech.recognition.RecognizerListener$FailureReason RECOGNITION_TIMEOUT

public static android.speech.recognition.RecognizerListener$FailureReason SPOKE_TOO_SOON

public static android.speech.recognition.RecognizerListener$FailureReason TOO_MUCH_SPEECH

public static android.speech.recognition.RecognizerListener$FailureReason UNKNOWN

private final java.lang.String message
----------------METHODS----------------

static void <clinit>()

private void <init>(
java.lang.String)

public java.lang.String toString()

________________CLASS________________


public abstract interface class android.speech.recognition.SlotItem extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Item )
@dalvik.annotation.EnclosingClass (value =Landroid/speech/recognition/SrecGrammar; )
public class android.speech.recognition.SrecGrammar$Item extends java.lang.Object

----------------FIELDS----------------

public android.speech.recognition.SlotItem _item

public java.lang.String _semanticMeaning

public int _weight
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public void <init>(
android.speech.recognition.SlotItem
int
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/speech/recognition/SrecGrammar$Item; )
public abstract interface class android.speech.recognition.SrecGrammar extends java.lang.Object implements android.speech.recognition.EmbeddedGrammar

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public abstract void addItem(
java.lang.String
android.speech.recognition.SlotItem
int
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/Vector<Landroid/speech/recognition/SrecGrammar$Item;>;)V )
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public abstract void addItemList(
java.lang.String
java.util.Vector)

________________CLASS________________


public abstract class android.speech.recognition.VoicetagItem extends java.lang.Object implements android.speech.recognition.SlotItem

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException;Ljava/io/FileNotFoundException;Ljava/io/IOException; )
public static android.speech.recognition.VoicetagItem create(
java.lang.String
android.speech.recognition.VoicetagItemListener)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public abstract byte[] getAudio()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public abstract void load()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public abstract void save(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public abstract void setAudio(
byte[])

________________CLASS________________


public abstract interface class android.speech.recognition.VoicetagItemListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onError(
java.lang.Exception)

public abstract void onLoaded()

public abstract void onSaved(
java.lang.String)

________________CLASS________________


public abstract class android.speech.recognition.WordItem extends java.lang.Object implements android.speech.recognition.SlotItem

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public static android.speech.recognition.WordItem valueOf(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public static android.speech.recognition.WordItem valueOf(
java.lang.String
java.lang.String[])

________________CLASS________________


public class android.speech.recognition.impl.AudioStreamImpl extends java.lang.Object implements android.speech.recognition.AudioStream, java.lang.Runnable

----------------FIELDS----------------

private long nativeObject
----------------METHODS----------------

public void <init>(
long)

private native void deleteNativeObject(
long)

public void dispose()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public long getNativeObject()

public void run()

________________CLASS________________


public class android.speech.recognition.impl.DeviceSpeakerImpl extends android.speech.recognition.DeviceSpeaker implements java.lang.Runnable

----------------FIELDS----------------

private static android.speech.recognition.impl.DeviceSpeakerImpl instance

private android.speech.recognition.DeviceSpeakerListener locallistener

private long nativeObject
----------------METHODS----------------

private void <init>()

private native void deleteNativeObject(
long)

private void dispose()

public static android.speech.recognition.impl.DeviceSpeakerImpl getInstance()

private native long initNativeObject()

private native void setCodecProxy(
long
android.speech.recognition.Codec)

private native void setListenerProxy(
long
android.speech.recognition.DeviceSpeakerListener)

private native void startProxy(
long
long)

private native void stopProxy(
long)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public void run()

public void setCodec(
android.speech.recognition.Codec)

public void setListener(
android.speech.recognition.DeviceSpeakerListener)

public void start(
android.speech.recognition.AudioStream)

public void stop()

________________CLASS________________


public class android.speech.recognition.impl.GrammarImpl extends java.lang.Object implements android.speech.recognition.Grammar, java.lang.Runnable

----------------FIELDS----------------

protected long nativeObject
----------------METHODS----------------

public void <init>(
long)

private native void deleteNativeObject(
long)

private native void loadProxy(
long)

private native void unloadProxy(
long)

public void dispose()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public long getNativeObject()

public void load()

public void run()

public void unload()

________________CLASS________________


public class android.speech.recognition.impl.EmbeddedGrammarImpl extends android.speech.recognition.impl.GrammarImpl implements android.speech.recognition.EmbeddedGrammar

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
long)

private native void compileAllSlotsProxy(
long)

private native void resetAllSlotsProxy(
long)

private native void saveProxy(
long
java.lang.String)

public void compileAllSlots()

public void resetAllSlots()

public void save(
java.lang.String)

________________CLASS________________


public class android.speech.recognition.impl.EmbeddedRecognizerImpl extends android.speech.recognition.EmbeddedRecognizer implements java.lang.Runnable

----------------FIELDS----------------

private static android.speech.recognition.impl.EmbeddedRecognizerImpl instance

private long nativeObject
----------------METHODS----------------

 void <init>()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException;Ljava/io/FileNotFoundException;Ljava/io/IOException;Ljava/lang/UnsatisfiedLinkError;Ljava/lang/ClassNotFoundException; )
private native void configureProxy(
long
java.lang.String)

private native long createEmbeddedGrammarProxy(
long
java.lang.String
android.speech.recognition.GrammarListener)

private native void deleteNativeObject(
long)

private void dispose()

public static android.speech.recognition.impl.EmbeddedRecognizerImpl getInstance()

private native long getInstanceProxy()
@dalvik.annotation.Signature (value =(JLjava/util/Vector<Ljava/lang/String;>;)V )
private native void getParametersProxy(
long
java.util.Vector)

private native void recognizeProxy(
long
long
long[])

private native void resetAcousticStateProxy(
long)

private native void setListenerProxy(
long
android.speech.recognition.RecognizerListener)
@dalvik.annotation.Signature (value =(JLjava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;)V )
private native void setParametersProxy(
long
java.util.Hashtable)

private native void stopProxy(
long)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException;Ljava/io/FileNotFoundException;Ljava/io/IOException;Ljava/lang/UnsatisfiedLinkError;Ljava/lang/ClassNotFoundException; )
public void configure(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public android.speech.recognition.Grammar createGrammar(
java.lang.String
android.speech.recognition.GrammarListener)
@dalvik.annotation.Signature (value =(Ljava/util/Vector<Ljava/lang/String;>;)V )
public void getParameters(
java.util.Vector)

public void recognize(
android.speech.recognition.AudioStream
android.speech.recognition.Grammar)
@dalvik.annotation.Signature (value =(Landroid/speech/recognition/AudioStream;Ljava/util/Vector<Landroid/speech/recognition/Grammar;>;)V )
public void recognize(
android.speech.recognition.AudioStream
java.util.Vector)

public void resetAcousticState()

public void run()

public void setListener(
android.speech.recognition.RecognizerListener)
@dalvik.annotation.Signature (value =(Ljava/util/Hashtable<Ljava/lang/String;Ljava/lang/String;>;)V )
public void setParameters(
java.util.Hashtable)

public void stop()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.speech.recognition.impl.EntryImpl$1 extends java.lang.Object implements java.util.Enumeration

----------------FIELDS----------------

private int indexOfNextRead

private java.lang.String[] keys

final android.speech.recognition.impl.EntryImpl this$0
----------------METHODS----------------

 void <init>(
android.speech.recognition.impl.EntryImpl)

public boolean hasMoreElements()

public java.lang.Object nextElement()

________________CLASS________________


public class android.speech.recognition.impl.EntryImpl extends java.lang.Object implements android.speech.recognition.NBestRecognitionResult$Entry, java.lang.Runnable

----------------FIELDS----------------

private long nativeObject
----------------METHODS----------------

public void <init>(
long)

static long access$000(
android.speech.recognition.impl.EntryImpl)

static java.lang.String[] access$100(
android.speech.recognition.impl.EntryImpl
long)

private native void deleteNativeObject(
long)

private void dispose()

private native byte getConfidenceScoreProxy(
long)

private native java.lang.String getLiteralMeaningProxy(
long)

private native java.lang.String getProxy(
long
java.lang.String)

private native java.lang.String getSemanticMeaningProxy(
long)

private native java.lang.String[] keysProxy(
long)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public java.lang.String get(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public byte getConfidenceScore()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public java.lang.String getLiteralMeaning()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public java.lang.String getSemanticMeaning()

public java.util.Enumeration keys()

public void run()

________________CLASS________________


public class android.speech.recognition.impl.LoggerImpl extends android.speech.recognition.Logger implements java.lang.Runnable

----------------FIELDS----------------

private static android.speech.recognition.impl.LoggerImpl instance

private long nativeObject
----------------METHODS----------------

private void <init>()

private native void deleteNativeObject(
long)

private void dispose()

private native void errorProxy(
long
java.lang.String)

public static android.speech.recognition.impl.LoggerImpl getInstance()

private native void infoProxy(
long
java.lang.String)

private native long initNativeObject()

private native void setLoggingLevelProxy(
long
android.speech.recognition.Logger$LogLevel)

private native void setPathProxy(
long
java.lang.String)

private native void traceProxy(
long
java.lang.String)

private native void warnProxy(
long
java.lang.String)

public void error(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public void info(
java.lang.String)

public void run()

public void setLoggingLevel(
android.speech.recognition.Logger$LogLevel)

public void setPath(
java.lang.String)

public void trace(
java.lang.String)

public void warn(
java.lang.String)

________________CLASS________________


public class android.speech.recognition.impl.MediaFileReaderImpl extends android.speech.recognition.MediaFileReader implements java.lang.Runnable

----------------FIELDS----------------

private long nativeObject
----------------METHODS----------------

public void <init>(
java.lang.String
android.speech.recognition.AudioSourceListener)

private native long createAudioProxy(
long)

private native long createMediaFileReaderProxy(
java.lang.String
android.speech.recognition.AudioSourceListener)

private native void deleteNativeObject(
long)

private native void setModeProxy(
long
android.speech.recognition.MediaFileReader$Mode)

private native void startProxy(
long)

private native void stopProxy(
long)

public android.speech.recognition.AudioStream createAudio()

public void dispose()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public void run()

public void setMode(
android.speech.recognition.MediaFileReader$Mode)

public void start()

public void stop()

________________CLASS________________


public class android.speech.recognition.impl.MediaFileWriterImpl extends android.speech.recognition.MediaFileWriter implements java.lang.Runnable

----------------FIELDS----------------

private long nativeObject
----------------METHODS----------------

public void <init>(
android.speech.recognition.MediaFileWriterListener)

private native long createMediaFileWriterProxy(
android.speech.recognition.MediaFileWriterListener)

private native void deleteNativeObject(
long)

private native void saveProxy(
long
long
java.lang.String)

public void dispose()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public void run()

public void save(
android.speech.recognition.AudioStream
java.lang.String)

________________CLASS________________


public class android.speech.recognition.impl.MicrophoneImpl extends android.speech.recognition.Microphone implements java.lang.Runnable

----------------FIELDS----------------

private static android.speech.recognition.impl.MicrophoneImpl instance

private long nativeObject
----------------METHODS----------------

private void <init>()

private native long createAudioProxy(
long)

private native void deleteNativeObject(
long)

private void dispose()

public static android.speech.recognition.impl.MicrophoneImpl getInstance()

private native long initNativeObject()

private native void setCodecProxy(
long
android.speech.recognition.Codec)

private native void setListenerProxy(
long
android.speech.recognition.AudioSourceListener)

private native void startProxy(
long)

private native void stopProxy(
long)

public android.speech.recognition.AudioStream createAudio()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public void run()

public void setCodec(
android.speech.recognition.Codec)

public void setListener(
android.speech.recognition.AudioSourceListener)

public void start()

public void stop()

________________CLASS________________


public class android.speech.recognition.impl.NBestRecognitionResultImpl extends java.lang.Object implements android.speech.recognition.NBestRecognitionResult

----------------FIELDS----------------

private long nativeObject
----------------METHODS----------------

public void <init>(
long)

private native long createVoicetagItemProxy(
long
java.lang.String
android.speech.recognition.VoicetagItemListener)

private void dispose()

private native long getEntryProxy(
long
int)

private native int getSizeProxy(
long)

public android.speech.recognition.VoicetagItem createVoicetagItem(
java.lang.String
android.speech.recognition.VoicetagItemListener)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public android.speech.recognition.NBestRecognitionResult$Entry getEntry(
int)

public int getSize()

________________CLASS________________


public class android.speech.recognition.impl.SrecGrammarImpl extends android.speech.recognition.impl.EmbeddedGrammarImpl implements android.speech.recognition.SrecGrammar

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
long)

private native void addItemListProxy(
long
java.lang.String
long[]
int[]
java.lang.String[])

private native void addItemProxy(
long
java.lang.String
long
int
java.lang.String)

public void addItem(
java.lang.String
android.speech.recognition.SlotItem
int
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/Vector<Landroid/speech/recognition/SrecGrammar$Item;>;)V )
public void addItemList(
java.lang.String
java.util.Vector)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.speech.recognition.impl.System$1 extends java.lang.Thread

----------------FIELDS----------------

final android.speech.recognition.impl.System this$0
----------------METHODS----------------

 void <init>(
android.speech.recognition.impl.System)

public void run()

________________CLASS________________


public class android.speech.recognition.impl.System extends java.lang.Object

----------------FIELDS----------------

private static android.speech.recognition.impl.System instance

private static boolean libraryLoaded
@dalvik.annotation.Signature (value =Ljava/util/WeakHashMap<Ljava/lang/Object;Ljava/lang/ref/WeakReference;>; )
private static java.util.WeakHashMap registerMap

private long nativeObject

private boolean shutdownRequested
----------------METHODS----------------

private void <init>()

private static native void disposeProxy()

public static native java.lang.String getAPIVersion()

public static android.speech.recognition.impl.System getInstance()

private void initLibrary()

private static native long initNativeObject()
@dalvik.annotation.Throws (value =Ljava/util/concurrent/TimeoutException;Ljava/lang/IllegalThreadStateException; )
public void dispose()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public void register(
java.lang.Runnable)

public void unregister(
java.lang.Runnable)

________________CLASS________________


public class android.speech.recognition.impl.VoicetagItemImpl extends android.speech.recognition.VoicetagItem implements java.lang.Runnable

----------------FIELDS----------------

private long nativeObject

private boolean needToBeLoaded
----------------METHODS----------------

public void <init>(
long
boolean)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException;Ljava/io/FileNotFoundException;Ljava/io/IOException; )
public static android.speech.recognition.VoicetagItem create(
java.lang.String
android.speech.recognition.VoicetagItemListener)

private static native long createVoicetagProxy(
java.lang.String
android.speech.recognition.VoicetagItemListener)

private native void deleteNativeObject(
long)

private void dispose()

private native byte[] getAudioProxy(
long)

private native void loadVoicetagProxy(
long)

private native void saveVoicetagProxy(
long
java.lang.String)

private native void setAudioProxy(
long
byte[])
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public byte[] getAudio()

public long getNativeObject()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public void load()

public void run()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public void save(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public void setAudio(
byte[])

________________CLASS________________


public class android.speech.recognition.impl.WordItemImpl extends android.speech.recognition.WordItem implements java.lang.Runnable

----------------FIELDS----------------

private static final java.lang.String[] guessPronunciations

private long nativeObject
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
private void <init>(
java.lang.String
java.lang.String[])

private native void deleteNativeObject(
long)

private void dispose()

private native void initNativeObject(
java.lang.String
java.lang.String[])
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public static android.speech.recognition.impl.WordItemImpl valueOf(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public static android.speech.recognition.impl.WordItemImpl valueOf(
java.lang.String
java.lang.String[])
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public long getNativeObject()

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/speech/srec/Srec; )
@dalvik.annotation.InnerClass (accessFlags =1 name =Grammar )
public class android.speech.srec.Srec$Grammar extends java.lang.Object

----------------FIELDS----------------

private int mId

final android.speech.srec.Srec this$0
----------------METHODS----------------

public void <init>(
android.speech.srec.Srec)

public void addToSlot(
java.lang.String
java.lang.String
java.lang.String
int
java.lang.String)

public void compileSlots()

public void resetAllSlots()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void save(
java.lang.String)

public void unload()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/speech/srec/Srec$Grammar; )
public class android.speech.srec.Srec extends java.lang.Object

----------------FIELDS----------------

private int mNative
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
 void <init>(
java.lang.String)

public void dispose()

protected void finalize()

public java.lang.String getResult(
int
java.lang.String)

public int getResultCount()

public java.lang.String[] getResultKeys(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public android.speech.srec.Srec$Grammar loadGrammar(
java.lang.String)

public boolean process()

public void reset()

public void start()

________________CLASS________________


public class android.syncml.pim.PropertyNode extends java.lang.Object

----------------FIELDS----------------

public android.content.ContentValues paraMap
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/lang/String;>; )
public java.util.ArrayList paraMap_TYPE

public java.lang.String propName

public java.lang.String propValue

public byte[] propValue_byts
@dalvik.annotation.Signature (value =Ljava/util/Collection<Ljava/lang/String;>; )
public java.util.Collection propValue_vector
----------------METHODS----------------

public void <init>()

________________CLASS________________


public abstract interface class android.syncml.pim.VBuilder extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void end()

public abstract void endProperty()

public abstract void endRecord()

public abstract void propertyName(
java.lang.String)

public abstract void propertyParamType(
java.lang.String)

public abstract void propertyParamValue(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/util/Collection<Ljava/lang/String;>;)V )
public abstract void propertyValues(
java.util.Collection)

public abstract void start()

public abstract void startProperty()

public abstract void startRecord(
java.lang.String)

________________CLASS________________


public class android.syncml.pim.VDataBuilder extends java.lang.Object implements android.syncml.pim.VBuilder

----------------FIELDS----------------

 java.lang.String curParamType

 android.syncml.pim.PropertyNode curPropNode

 android.syncml.pim.VNode curVNode

 int nodeListPos
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/syncml/pim/VNode;>; )
public java.util.ArrayList vNodeList
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Signature (value =(Ljava/util/Collection<Ljava/lang/String;>;)Ljava/lang/String; )
private java.lang.String listToString(
java.util.Collection)

public void end()

public void endProperty()

public void endRecord()

public java.lang.String getResult()

public void propertyName(
java.lang.String)

public void propertyParamType(
java.lang.String)

public void propertyParamValue(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/util/Collection<Ljava/lang/String;>;)V )
public void propertyValues(
java.util.Collection)

public void start()

public void startProperty()

public void startRecord(
java.lang.String)

________________CLASS________________


public class android.syncml.pim.VNode extends java.lang.Object

----------------FIELDS----------------

public java.lang.String VName

public int parseStatus
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/syncml/pim/PropertyNode;>; )
public java.util.ArrayList propList
----------------METHODS----------------

public void <init>()

________________CLASS________________


public abstract class android.syncml.pim.VParser extends java.lang.Object

----------------FIELDS----------------

protected final int PARSE_ERROR

protected java.lang.String mBuffer

protected android.syncml.pim.VBuilder mBuilder

protected final java.lang.String mDefaultEncoding

protected java.lang.String mEncoding
----------------METHODS----------------

public void <init>()

protected java.lang.String getWord(
int)

protected boolean isLetter(
char)

protected boolean isLetterOrDigit(
char)

protected boolean isPrintable(
char)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean parse(
java.io.InputStream
java.lang.String
android.syncml.pim.VBuilder)

protected int parse8bit(
int)

protected int parseBase64(
int)

protected int parseCharsetVal(
int)

protected int parseCrlf(
int)

protected int parseLangVal(
int)

protected int parseOctet(
int)

protected int parsePEncodingVal(
int)

protected int parsePValueVal(
int)

protected int parsePtext(
int)

protected int parseQuotedPrintable(
int)

protected int parseString(
int
java.lang.String
boolean)

protected int parseTag(
int)

protected abstract int parseVFile(
int)

protected int parseValue(
int)

protected int parseWord(
int)

protected int parseWsls(
int)

protected int parseXWord(
int)

protected int removeWs(
int)
@dalvik.annotation.Throws (value =Ljava/io/UnsupportedEncodingException; )
protected void setInputStream(
java.io.InputStream
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/syncml/pim/vcalendar/CalendarStruct; )
@dalvik.annotation.InnerClass (accessFlags =9 name =EventStruct )
public class android.syncml.pim.vcalendar.CalendarStruct$EventStruct extends java.lang.Object

----------------FIELDS----------------

public java.lang.String description

public java.lang.String dtend

public java.lang.String dtstart

public java.lang.String duration

public java.lang.String event_location

public java.lang.String has_alarm

public java.lang.String last_date
@dalvik.annotation.Signature (value =Ljava/util/List<Ljava/lang/String;>; )
public java.util.List reminderList

public java.lang.String rrule

public java.lang.String status

public java.lang.String title

public java.lang.String uid
----------------METHODS----------------

public void <init>()

public void addReminderList(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/syncml/pim/vcalendar/CalendarStruct$EventStruct; )
public class android.syncml.pim.vcalendar.CalendarStruct extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/syncml/pim/vcalendar/CalendarStruct$EventStruct;>; )
public java.util.List eventList

public java.lang.String timezone
----------------METHODS----------------

public void <init>()

public void addEventList(
android.syncml.pim.vcalendar.CalendarStruct$EventStruct)

________________CLASS________________


public class android.syncml.pim.vcalendar.VCalComposer extends java.lang.Object

----------------FIELDS----------------

public static final int VERSION_VCAL10_INT

public static final int VERSION_VCAL20_INT

public static final java.lang.String VERSION_VCALENDAR10

public static final java.lang.String VERSION_VCALENDAR20

private static java.lang.String mNewLine

private java.lang.String mVersion
----------------METHODS----------------

static void <clinit>()

public void <init>()

private java.lang.String buildEventStr(
android.syncml.pim.vcalendar.CalendarStruct$EventStruct)

private java.lang.String foldingString(
java.lang.String)

private boolean isNull(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/syncml/pim/vcalendar/VCalException; )
public java.lang.String createVCal(
android.syncml.pim.vcalendar.CalendarStruct
int)

________________CLASS________________


public class android.syncml.pim.vcalendar.VCalException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public class android.syncml.pim.vcalendar.VCalParser extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG

public static final java.lang.String VERSION_VCALENDAR10

public static final java.lang.String VERSION_VCALENDAR20

private android.syncml.pim.VParser mParser

private java.lang.String mVersion
----------------METHODS----------------

public void <init>()

private void judgeVersion(
java.lang.String)

private java.lang.String verifyVCal(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/syncml/pim/vcalendar/VCalException; )
public boolean parse(
java.lang.String
android.syncml.pim.VDataBuilder)

________________CLASS________________


public class android.syncml.pim.vcalendar.VCalParser_V10 extends android.syncml.pim.VParser

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private static final java.util.HashSet mEscAllowedProps
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private static final java.util.HashSet mEvtPropNameGroup1
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private static final java.util.HashSet mEvtPropNameGroup2
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/util/HashSet<Ljava/lang/String;>;>; )
private static final java.util.HashMap mSpecialValueSetMap
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private static final java.util.HashSet mValueCAT
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private static final java.util.HashSet mValueCLASS
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private static final java.util.HashSet mValueRES
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private static final java.util.HashSet mValueSTAT
----------------METHODS----------------

static void <clinit>()

public void <init>()

private java.lang.String exportEntpropValue(
java.lang.String
java.lang.String)

private int parseCalentities(
int)

private int parseCalentity(
int)

private int parseCalprop(
int)

private int parseCalprop0(
int
java.lang.String)

private int parseCalprop1(
int)

private int parseCalprops(
int)

private int parseEntprop(
int)

private int parseEntprop0(
int)

private int parseEntprop1(
int)

private int parseEntprops(
int)

private int parseEvententity(
int)

private int parseKnownType(
int)

private int parseParam(
int)

private int parseParam0(
int)

private int parseParam1(
int)

private int parseParam2(
int)

private int parseParam3(
int)

private int parseParam4(
int)

private int parseParam5(
int)

private int parseParam6(
int)

private int parseParam7(
int)

private int parseParamlist(
int)

private int parseParams(
int)

private int parsePtypeval(
int)

private int parseRoleVal(
int)

private int parseStatuVal(
int)

private int parseTodoentity(
int)

private int parseVCal(
int)

private int parseVCalFile(
int)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;)I )
private int valueFilter(
java.lang.String
java.util.ArrayList)

protected int parseVFile(
int)

________________CLASS________________


public class android.syncml.pim.vcalendar.VCalParser_V20 extends android.syncml.pim.vcalendar.VCalParser_V10

----------------FIELDS----------------

private static final java.lang.String V10LINEBREAKER
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private static final java.util.HashSet acceptableComponents
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private static final java.util.HashSet acceptableV20Props

private boolean hasTZ

private int index

private java.lang.String[] lines
----------------METHODS----------------

static void <clinit>()

public void <init>()

private boolean parseV20Calbody(
java.lang.String[]
java.lang.StringBuilder)
@dalvik.annotation.Throws (value =Ljava/lang/ArrayIndexOutOfBoundsException; )
private boolean parseV20Component(
java.lang.String
java.lang.StringBuilder)

private java.lang.String[] splitProperty(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean parse(
java.io.InputStream
java.lang.String
android.syncml.pim.VBuilder)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =ContactMethod )
@dalvik.annotation.EnclosingClass (value =Landroid/syncml/pim/vcard/ContactStruct; )
public class android.syncml.pim.vcard.ContactStruct$ContactMethod extends java.lang.Object

----------------FIELDS----------------

public java.lang.String data

public java.lang.String kind

public java.lang.String label

public java.lang.String type
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/syncml/pim/vcard/ContactStruct; )
@dalvik.annotation.InnerClass (accessFlags =9 name =PhoneData )
public class android.syncml.pim.vcard.ContactStruct$PhoneData extends java.lang.Object

----------------FIELDS----------------

public java.lang.String data

public java.lang.String label

public java.lang.String type
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/syncml/pim/vcard/ContactStruct$ContactMethod;Landroid/syncml/pim/vcard/ContactStruct$PhoneData; )
public class android.syncml.pim.vcard.ContactStruct extends java.lang.Object

----------------FIELDS----------------

public java.lang.String company
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/syncml/pim/vcard/ContactStruct$ContactMethod;>; )
public java.util.List contactmethodList

public java.lang.String name

public java.lang.String notes
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/syncml/pim/vcard/ContactStruct$PhoneData;>; )
public java.util.List phoneList

public byte[] photoBytes

public java.lang.String photoType

public java.lang.String title
----------------METHODS----------------

public void <init>()

public void addContactmethod(
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

public void addPhone(
java.lang.String
java.lang.String
java.lang.String)

________________CLASS________________


public class android.syncml.pim.vcard.VCardComposer extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG

public static final int VERSION_VCARD21_INT

public static final int VERSION_VCARD30_INT
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/String;>; )
private static final java.util.HashMap emailTypeMap
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private static final java.util.HashSet emailTypes
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/String;>; )
private static final java.util.HashMap phoneTypeMap
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private static final java.util.HashSet phoneTypes

private java.lang.String mNewline

private java.lang.StringBuilder mResult
----------------METHODS----------------

static void <clinit>()

public void <init>()
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/syncml/pim/vcard/ContactStruct$ContactMethod;>;I)V )
private void appendContactMethodStr(
java.util.List
int)

private void appendNameStr(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/syncml/pim/vcard/ContactStruct$PhoneData;>;I)V )
private void appendPhoneStr(
java.util.List
int)
@dalvik.annotation.Throws (value =Landroid/syncml/pim/vcard/VCardException; )
private void appendPhotoStr(
byte[]
java.lang.String
int)

private java.lang.String foldingString(
java.lang.String
int)

private java.lang.String getPhoneTypeStr(
android.syncml.pim.vcard.ContactStruct$PhoneData)

private boolean isNull(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/syncml/pim/vcard/VCardException; )
public java.lang.String createVCard(
android.syncml.pim.vcard.ContactStruct
int)

________________CLASS________________


public class android.syncml.pim.vcard.VCardException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public class android.syncml.pim.vcard.VCardParser extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG

public static final java.lang.String VERSION_VCARD21

public static final int VERSION_VCARD21_INT

public static final java.lang.String VERSION_VCARD30

public static final int VERSION_VCARD30_INT

 android.syncml.pim.VParser mParser

 java.lang.String mVersion
----------------METHODS----------------

public void <init>()

private void judgeVersion(
java.lang.String)

private void setVersion(
java.lang.String)

private java.lang.String verifyVCard(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/syncml/pim/vcard/VCardException;Ljava/io/IOException; )
public boolean parse(
java.lang.String
android.syncml.pim.VDataBuilder)

________________CLASS________________


public class android.syncml.pim.vcard.VCardParser_V21 extends android.syncml.pim.VParser

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private static final java.util.HashSet mKnownTypeSet
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private static final java.util.HashSet mName
----------------METHODS----------------

static void <clinit>()

public void <init>()

private java.lang.String escapeTranslator(
java.lang.String)

private int parseGroups(
int)

private int parseGroupsWithDot(
int)

private int parseItem(
int)

private int parseItem0(
int)

private int parseItem1(
int)

private int parseItem2(
int)

private int parseItems(
int)

private int parseKnownType(
int)

private int parseName(
int)

private int parsePTypeVal(
int)

private int parseParam(
int)

private int parseParam0(
int)

private int parseParam1(
int)

private int parseParam2(
int)

private int parseParam3(
int)

private int parseParam4(
int)

private int parseParam5(
int)

private int parseParamList(
int)

private int parseParams(
int)

private int parseVCard(
int)

 int parseVCardFile(
int)

protected int parseVFile(
int)

________________CLASS________________


public class android.syncml.pim.vcard.VCardParser_V30 extends android.syncml.pim.vcard.VCardParser_V21

----------------FIELDS----------------

private static final java.lang.String V21LINEBREAKER
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private static final java.util.HashSet acceptablePropsWithParam
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private static final java.util.HashSet acceptablePropsWithoutParam
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>; )
private static final java.util.HashMap propV30ToV21Map
----------------METHODS----------------

static void <clinit>()

public void <init>()

private java.lang.String mapContentlineV30ToV21(
java.lang.String
java.lang.String
java.lang.String)

private java.lang.String[] splitProperty(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean parse(
java.io.InputStream
java.lang.String
android.syncml.pim.VBuilder)

________________CLASS________________


public abstract class android.telephony.CellLocation extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static android.telephony.CellLocation getEmpty()

public static android.telephony.CellLocation newFromBundle(
android.os.Bundle)

public static void requestLocationUpdate()

public abstract void fillInNotifierBundle(
android.os.Bundle)

________________CLASS________________


public class android.telephony.PhoneNumberFormattingTextWatcher extends java.lang.Object implements android.text.TextWatcher

----------------FIELDS----------------

private static java.util.Locale sCachedLocale

private static int sFormatType

private boolean mDeletingBackward

private boolean mDeletingHyphen

private boolean mFormatting

private int mHyphenStart
----------------METHODS----------------

public void <init>()

public void afterTextChanged(
android.text.Editable)

public void beforeTextChanged(
java.lang.CharSequence
int
int
int)

public void onTextChanged(
java.lang.CharSequence
int
int
int)

________________CLASS________________


public class android.telephony.PhoneNumberUtils extends java.lang.Object

----------------FIELDS----------------

public static final int FORMAT_NANP

public static final int FORMAT_UNKNOWN

private static final java.util.regex.Pattern GLOBAL_PHONE_NUMBER_PATTERN

private static final android.util.SparseIntArray KEYPAD_MAP

static final int MIN_MATCH

private static final java.lang.String[] NANP_COUNTRIES

private static final int NANP_STATE_DASH

private static final int NANP_STATE_DIGIT

private static final int NANP_STATE_ONE

private static final int NANP_STATE_PLUS

public static final char PAUSE

public static final int TOA_International

public static final int TOA_Unknown

public static final char WAIT

public static final char WILD
----------------METHODS----------------

static void <clinit>()

public void <init>()

private static char bcdToChar(
byte)

public static java.lang.String calledPartyBCDFragmentToString(
byte[]
int
int)

public static java.lang.String calledPartyBCDToString(
byte[]
int
int)

private static int charToBCD(
char)

public static boolean compare(
java.lang.String
java.lang.String)

public static java.lang.String convertKeypadLettersToDigits(
java.lang.String)

public static java.lang.String extractNetworkPortion(
java.lang.String)

public static java.lang.String extractPostDialPortion(
java.lang.String)

public static void formatNanpNumber(
android.text.Editable)

public static java.lang.String formatNumber(
java.lang.String)

public static void formatNumber(
android.text.Editable
int)

public static int getFormatTypeForLocale(
java.util.Locale)

public static java.lang.String getNumberFromIntent(
android.content.Intent
android.content.Context)

public static java.lang.String getStrippedReversed(
java.lang.String)

private static int indexOfLastNetworkChar(
java.lang.String)

private static void internalCalledPartyBCDFragmentToString(
java.lang.StringBuilder
byte[]
int
int)

private static java.lang.String internalGetStrippedReversed(
java.lang.String
int)

public static final boolean is12Key(
char)

public static final boolean isDialable(
char)

private static boolean isDialable(
java.lang.String)

public static boolean isEmergencyNumber(
java.lang.String)

public static boolean isGlobalPhoneNumber(
java.lang.String)

public static boolean isISODigit(
char)

public static final boolean isNonSeparator(
char)

public static final boolean isReallyDialable(
char)

public static final boolean isStartsPostDial(
char)

public static boolean isWellFormedSmsAddress(
java.lang.String)

private static boolean matchIntlPrefix(
java.lang.String
int)

private static boolean matchIntlPrefixAndCC(
java.lang.String
int)

private static boolean matchTrunkPrefix(
java.lang.String
int)

private static int minPositive(
int
int)

public static byte[] networkPortionToCalledPartyBCD(
java.lang.String)

public static byte[] networkPortionToCalledPartyBCDWithLength(
java.lang.String)

public static byte[] numberToCalledPartyBCD(
java.lang.String)

private static byte[] numberToCalledPartyBCDHelper(
byte[]
int
java.lang.String)

private static byte[] numberToCalledPartyBCDWithLength(
java.lang.String)

public static java.lang.String stringFromStringAndTOA(
java.lang.String
int)

public static java.lang.String stripSeparators(
java.lang.String)

public static java.lang.String toCallerIDMinMatch(
java.lang.String)

public static int toaFromString(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/IPhoneStateListener$Stub; )
public abstract interface class com.android.internal.telephony.IPhoneStateListener extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onCallForwardingIndicatorChanged(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onCallStateChanged(
int
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onCellLocationChanged(
android.os.Bundle)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onDataActivity(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onDataConnectionStateChanged(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onMessageWaitingIndicatorChanged(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onServiceStateChanged(
android.telephony.ServiceState)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void onSignalStrengthChanged(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/IPhoneStateListener; )
@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy; )
public abstract class com.android.internal.telephony.IPhoneStateListener$Stub extends android.os.Binder implements com.android.internal.telephony.IPhoneStateListener

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_onCallForwardingIndicatorChanged

static final int TRANSACTION_onCallStateChanged

static final int TRANSACTION_onCellLocationChanged

static final int TRANSACTION_onDataActivity

static final int TRANSACTION_onDataConnectionStateChanged

static final int TRANSACTION_onMessageWaitingIndicatorChanged

static final int TRANSACTION_onServiceStateChanged

static final int TRANSACTION_onSignalStrengthChanged
----------------METHODS----------------

public void <init>()

public static com.android.internal.telephony.IPhoneStateListener asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/telephony/PhoneStateListener; )
 class android.telephony.PhoneStateListener$1 extends com.android.internal.telephony.IPhoneStateListener$Stub

----------------FIELDS----------------

final android.telephony.PhoneStateListener this$0
----------------METHODS----------------

 void <init>(
android.telephony.PhoneStateListener)

public void onCallForwardingIndicatorChanged(
boolean)

public void onCallStateChanged(
int
java.lang.String)

public void onCellLocationChanged(
android.os.Bundle)

public void onDataActivity(
int)

public void onDataConnectionStateChanged(
int)

public void onMessageWaitingIndicatorChanged(
boolean)

public void onServiceStateChanged(
android.telephony.ServiceState)

public void onSignalStrengthChanged(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/telephony/PhoneStateListener; )
 class android.telephony.PhoneStateListener$2 extends android.os.Handler

----------------FIELDS----------------

final android.telephony.PhoneStateListener this$0
----------------METHODS----------------

 void <init>(
android.telephony.PhoneStateListener)

public void handleMessage(
android.os.Message)

________________CLASS________________


public class android.telephony.PhoneStateListener extends java.lang.Object

----------------FIELDS----------------

public static final int LISTEN_CALL_FORWARDING_INDICATOR

public static final int LISTEN_CALL_STATE

public static final int LISTEN_CELL_LOCATION

public static final int LISTEN_DATA_ACTIVITY

public static final int LISTEN_DATA_CONNECTION_STATE

public static final int LISTEN_MESSAGE_WAITING_INDICATOR

public static final int LISTEN_NONE

public static final int LISTEN_SERVICE_STATE

public static final int LISTEN_SIGNAL_STRENGTH

 com.android.internal.telephony.IPhoneStateListener callback

 android.os.Handler mHandler
----------------METHODS----------------

public void <init>()

public void onCallForwardingIndicatorChanged(
boolean)

public void onCallStateChanged(
int
java.lang.String)

public void onCellLocationChanged(
android.telephony.CellLocation)

public void onDataActivity(
int)

public void onDataConnectionStateChanged(
int)

public void onMessageWaitingIndicatorChanged(
boolean)

public void onServiceStateChanged(
android.telephony.ServiceState)

public void onSignalStrengthChanged(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/telephony/ServiceState; )
final class android.telephony.ServiceState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.telephony.ServiceState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.telephony.ServiceState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class android.telephony.ServiceState extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/telephony/ServiceState;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final int STATE_EMERGENCY_ONLY

public static final int STATE_IN_SERVICE

public static final int STATE_OUT_OF_SERVICE

public static final int STATE_POWER_OFF

private boolean mIsManualNetworkSelection

private java.lang.String mOperatorAlphaLong

private java.lang.String mOperatorAlphaShort

private java.lang.String mOperatorNumeric

private boolean mRoaming

private int mState
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
android.os.Parcel)

public void <init>(
android.telephony.ServiceState)

private static boolean equalsHandlesNulls(
java.lang.Object
java.lang.Object)

public static android.telephony.ServiceState newFromBundle(
android.os.Bundle)

private void setFromNotifierBundle(
android.os.Bundle)

protected void copyFrom(
android.telephony.ServiceState)

public int describeContents()

public boolean equals(
java.lang.Object)

public void fillInNotifierBundle(
android.os.Bundle)

public boolean getIsManualSelection()

public java.lang.String getOperatorAlphaLong()

public java.lang.String getOperatorAlphaShort()

public java.lang.String getOperatorNumeric()

public boolean getRoaming()

public int getState()

public int hashCode()

public void setIsManualSelection(
boolean)

public void setOperatorName(
java.lang.String
java.lang.String
java.lang.String)

public void setRoaming(
boolean)

public void setState(
int)

public void setStateOff()

public void setStateOutOfService()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public class android.telephony.TelephonyManager extends java.lang.Object

----------------FIELDS----------------

public static final int CALL_STATE_IDLE

public static final int CALL_STATE_OFFHOOK

public static final int CALL_STATE_RINGING

public static final int DATA_ACTIVITY_IN

public static final int DATA_ACTIVITY_INOUT

public static final int DATA_ACTIVITY_NONE

public static final int DATA_ACTIVITY_OUT

public static final int DATA_CONNECTED

public static final int DATA_CONNECTING

public static final int DATA_DISCONNECTED

public static final int DATA_SUSPENDED

public static final int NETWORK_TYPE_EDGE

public static final int NETWORK_TYPE_GPRS

public static final int NETWORK_TYPE_UMTS

public static final int NETWORK_TYPE_UNKNOWN

public static final int PHONE_TYPE_GSM

public static final int PHONE_TYPE_NONE

public static final int SIM_STATE_ABSENT

public static final int SIM_STATE_NETWORK_LOCKED

public static final int SIM_STATE_PIN_REQUIRED

public static final int SIM_STATE_PUK_REQUIRED

public static final int SIM_STATE_READY

public static final int SIM_STATE_UNKNOWN

private static final java.lang.String TAG

private static android.telephony.TelephonyManager sInstance

private android.content.Context mContext

private com.android.internal.telephony.ITelephonyRegistry mRegistry
----------------METHODS----------------

static void <clinit>()

private void <init>()

public void <init>(
android.content.Context)

public static android.telephony.TelephonyManager getDefault()

private com.android.internal.telephony.ITelephony getITelephony()

private com.android.internal.telephony.IPhoneSubInfo getSubscriberInfo()

public void disableLocationUpdates()

public void enableLocationUpdates()

public int getCallState()

public android.telephony.CellLocation getCellLocation()

public int getDataActivity()

public int getDataState()

public java.lang.String getDeviceId()

public java.lang.String getDeviceSoftwareVersion()

public java.lang.String getLine1AlphaTag()

public java.lang.String getLine1Number()

public java.lang.String getNetworkCountryIso()

public java.lang.String getNetworkOperator()

public java.lang.String getNetworkOperatorName()

public int getNetworkType()

public int getPhoneType()

public java.lang.String getSimCountryIso()

public java.lang.String getSimOperator()

public java.lang.String getSimOperatorName()

public java.lang.String getSimSerialNumber()

public int getSimState()

public java.lang.String getSubscriberId()

public java.lang.String getVoiceMailAlphaTag()

public java.lang.String getVoiceMailNumber()

public boolean isNetworkRoaming()

public void listen(
android.telephony.PhoneStateListener
int)

________________CLASS________________


public class android.telephony.gsm.GsmCellLocation extends android.telephony.CellLocation

----------------FIELDS----------------

private int mCid

private int mLac
----------------METHODS----------------

public void <init>()

public void <init>(
android.os.Bundle)

private static boolean equalsHandlesNulls(
java.lang.Object
java.lang.Object)

public boolean equals(
java.lang.Object)

public void fillInNotifierBundle(
android.os.Bundle)

public int getCid()

public int getLac()

public int hashCode()

public void setLacAndCid(
int
int)

public void setStateInvalid()

public java.lang.String toString()

________________CLASS________________


 class android.telephony.gsm.SmsAddress extends java.lang.Object

----------------FIELDS----------------

static final int OFFSET_ADDRESS_LENGTH

static final int OFFSET_ADDRESS_VALUE

static final int OFFSET_TOA

static final int TON_ALPHANUMERIC

static final int TON_APPREVIATED

static final int TON_INTERNATIONAL

static final int TON_NATIONAL

static final int TON_NETWORK

static final int TON_SUBSCRIBER

static final int TON_UNKNOWN

 java.lang.String address

 byte[] origBytes

 int ton
----------------METHODS----------------

 void <init>(
byte[]
int
int)

public boolean couldBeEmailGateway()

public java.lang.String getAddressString()

public boolean isAlphanumeric()

public boolean isCphsVoiceMessageClear()

public boolean isCphsVoiceMessageIndicatorAddress()

public boolean isCphsVoiceMessageSet()

public boolean isNetworkSpecific()

________________CLASS________________


public final class android.telephony.gsm.SmsManager extends java.lang.Object

----------------FIELDS----------------

public static final int RESULT_ERROR_GENERIC_FAILURE

public static final int RESULT_ERROR_NO_SERVICE

public static final int RESULT_ERROR_NULL_PDU

public static final int RESULT_ERROR_RADIO_OFF

public static final int STATUS_ON_SIM_FREE

public static final int STATUS_ON_SIM_READ

public static final int STATUS_ON_SIM_SENT

public static final int STATUS_ON_SIM_UNREAD

public static final int STATUS_ON_SIM_UNSENT

private static android.telephony.gsm.SmsManager sInstance
----------------METHODS----------------

private void <init>()
@dalvik.annotation.Signature (value =(Ljava/util/List;)Ljava/util/ArrayList<Landroid/telephony/gsm/SmsMessage;>; )
private java.util.ArrayList createMessageListFromRawRecords(
java.util.List)

public static android.telephony.gsm.SmsManager getDefault()

private void sendRawPdu(
byte[]
byte[]
android.app.PendingIntent
android.app.PendingIntent)

public boolean copyMessageToSim(
byte[]
byte[]
int)

public boolean deleteMessageFromSim(
int)
@dalvik.annotation.Signature (value =(Ljava/lang/String;)Ljava/util/ArrayList<Ljava/lang/String;>; )
public java.util.ArrayList divideMessage(
java.lang.String)
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Landroid/telephony/gsm/SmsMessage;>; )
public java.util.ArrayList getAllMessagesFromSim()

public void sendDataMessage(
java.lang.String
java.lang.String
short
byte[]
android.app.PendingIntent
android.app.PendingIntent)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;Ljava/util/ArrayList<Landroid/app/PendingIntent;>;Ljava/util/ArrayList<Landroid/app/PendingIntent;>;)V )
public void sendMultipartTextMessage(
java.lang.String
java.lang.String
java.util.ArrayList
java.util.ArrayList
java.util.ArrayList)

public void sendTextMessage(
java.lang.String
java.lang.String
java.lang.String
android.app.PendingIntent
android.app.PendingIntent)

public boolean updateMessageOnSim(
int
int
byte[])

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/telephony/gsm/SmsMessage; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =MessageClass )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/telephony/gsm/SmsMessage$MessageClass;>; )
public final class android.telephony.gsm.SmsMessage$MessageClass extends java.lang.Enum

----------------FIELDS----------------

private static final android.telephony.gsm.SmsMessage$MessageClass[] $VALUES

public static final android.telephony.gsm.SmsMessage$MessageClass CLASS_0

public static final android.telephony.gsm.SmsMessage$MessageClass CLASS_1

public static final android.telephony.gsm.SmsMessage$MessageClass CLASS_2

public static final android.telephony.gsm.SmsMessage$MessageClass CLASS_3

public static final android.telephony.gsm.SmsMessage$MessageClass UNKNOWN
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.telephony.gsm.SmsMessage$MessageClass valueOf(
java.lang.String)

public static android.telephony.gsm.SmsMessage$MessageClass[] values()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =PduParser )
@dalvik.annotation.EnclosingClass (value =Landroid/telephony/gsm/SmsMessage; )
 class android.telephony.gsm.SmsMessage$PduParser extends java.lang.Object

----------------FIELDS----------------

 int cur

 int mUserDataSeptetPadding

 int mUserDataSize

 byte[] pdu

 byte[] userData

 com.android.internal.telephony.gsm.SmsHeader userDataHeader
----------------METHODS----------------

 void <init>(
java.lang.String)

 void <init>(
byte[])

 int constructUserData(
boolean
boolean)

 android.telephony.gsm.SmsAddress getAddress()

 int getByte()

 java.lang.String getSCAddress()

 long getSCTimestampMillis()

 byte[] getUserData()

 java.lang.String getUserDataGSM7Bit(
int)

 com.android.internal.telephony.gsm.SmsHeader getUserDataHeader()

 int getUserDataSeptetPadding()

 java.lang.String getUserDataUCS2(
int)

 boolean moreDataPresent()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/telephony/gsm/SmsMessage; )
@dalvik.annotation.InnerClass (accessFlags =9 name =SubmitPdu )
public class android.telephony.gsm.SmsMessage$SubmitPdu extends java.lang.Object

----------------FIELDS----------------

public byte[] encodedMessage

public byte[] encodedScAddress
----------------METHODS----------------

public void <init>()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/telephony/gsm/SmsMessage$PduParser;Landroid/telephony/gsm/SmsMessage$SubmitPdu;Landroid/telephony/gsm/SmsMessage$MessageClass; )
public class android.telephony.gsm.SmsMessage extends java.lang.Object

----------------FIELDS----------------

public static final int ENCODING_16BIT

public static final int ENCODING_7BIT

public static final int ENCODING_8BIT

public static final int ENCODING_UNKNOWN

static final java.lang.String LOG_TAG

public static final int MAX_USER_DATA_BYTES

private static final int MAX_USER_DATA_BYTES_WITH_HEADER

public static final int MAX_USER_DATA_SEPTETS

public static final int MAX_USER_DATA_SEPTETS_WITH_HEADER

 boolean automaticDeletion

 int dataCodingScheme

 long dischargeTimeMillis

 java.lang.String emailBody

 java.lang.String emailFrom

 boolean forSubmit

 int indexOnSim

 boolean isEmail

private boolean isMwi

 boolean isStatusReportMessage

 byte[] mPdu

 java.lang.String messageBody

 android.telephony.gsm.SmsMessage$MessageClass messageClass

public int messageRef

 int mti

private boolean mwiDontStore

private boolean mwiSense

 android.telephony.gsm.SmsAddress originatingAddress

 int protocolIdentifier

 java.lang.String pseudoSubject

 android.telephony.gsm.SmsAddress recipientAddress

 boolean replyPathPresent

 java.lang.String scAddress

 long scTimeMillis

 int status

 int statusOnSim

 byte[] userData

 com.android.internal.telephony.gsm.SmsHeader userDataHeader
----------------METHODS----------------

public void <init>()

public static int[] calculateLength(
java.lang.String
boolean)

public static android.telephony.gsm.SmsMessage createFromEfRecord(
int
byte[])

public static android.telephony.gsm.SmsMessage createFromPdu(
byte[])

private void extractEmailAddressFromMessageBody()

public static android.telephony.gsm.SmsMessage$SubmitPdu getSubmitPdu(
java.lang.String
java.lang.String
java.lang.String
boolean)

public static android.telephony.gsm.SmsMessage$SubmitPdu getSubmitPdu(
java.lang.String
java.lang.String
java.lang.String
boolean
byte[])

public static android.telephony.gsm.SmsMessage$SubmitPdu getSubmitPdu(
java.lang.String
java.lang.String
short
byte[]
boolean)

private static java.io.ByteArrayOutputStream getSubmitPduHead(
java.lang.String
java.lang.String
byte
boolean
android.telephony.gsm.SmsMessage$SubmitPdu)

public static int getTPLayerLengthForPDU(
java.lang.String)

public static android.telephony.gsm.SmsMessage newFromCDS(
java.lang.String)

public static android.telephony.gsm.SmsMessage newFromCMT(
java.lang.String[])

static android.telephony.gsm.SmsMessage newFromCMTI(
java.lang.String)

private void parseMessageBody()

private void parsePdu(
byte[])

private void parseSmsDeliver(
android.telephony.gsm.SmsMessage$PduParser
int)

private void parseSmsStatusReport(
android.telephony.gsm.SmsMessage$PduParser
int)

private void parseUserData(
android.telephony.gsm.SmsMessage$PduParser
boolean)

public java.lang.String getDisplayMessageBody()

public java.lang.String getDisplayOriginatingAddress()

public java.lang.String getEmailBody()

public java.lang.String getEmailFrom()

public int getIndexOnSim()

public java.lang.String getMessageBody()

public android.telephony.gsm.SmsMessage$MessageClass getMessageClass()

public java.lang.String getOriginatingAddress()

public byte[] getPdu()

public int getProtocolIdentifier()

public java.lang.String getPseudoSubject()

public java.lang.String getServiceCenterAddress()

public int getStatus()

public int getStatusOnSim()

public long getTimestampMillis()

public byte[] getUserData()

public com.android.internal.telephony.gsm.SmsHeader getUserDataHeader()

public boolean isCphsMwiMessage()

public boolean isEmail()

public boolean isMWIClearMessage()

public boolean isMWISetMessage()

public boolean isMwiDontStore()

public boolean isReplace()

public boolean isReplyPathPresent()

public boolean isStatusReportMessage()

________________CLASS________________


public class android.test.AndroidTestCase extends junit.framework.TestCase

----------------FIELDS----------------

protected android.content.Context mContext
----------------METHODS----------------

public void <init>()

public android.content.Context getContext()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalAccessException; )
@dalvik.annotation.Signature (value =(Ljava/lang/Class<*>;)V )
protected void scrubClass(
java.lang.Class)

public void setContext(
android.content.Context)
@dalvik.annotation.Throws (value =Ljava/lang/Exception; )
protected void setUp()
@dalvik.annotation.Throws (value =Ljava/lang/Exception; )
protected void tearDown()

public void testAndroidTestCaseSetupProperly()

________________CLASS________________

@java.lang.annotation.Target (value =Ljava/lang/annotation/ElementType;!METHOD )
@java.lang.annotation.Retention (value =Ljava/lang/annotation/RetentionPolicy;!RUNTIME )
@dalvik.annotation.AnnotationDefault (value =Landroid/test/FlakyTest;:[tolerance =1] )
public abstract interface class android.test.FlakyTest extends java.lang.Object implements java.lang.annotation.Annotation

----------------FIELDS----------------
----------------METHODS----------------

public abstract int tolerance()

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.test.InstrumentationTestCase$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.test.InstrumentationTestCase this$0

final java.lang.Throwable[] val$exceptions

final java.lang.reflect.Method val$testMethod

final int val$tolerance
----------------METHODS----------------

 void <init>(
android.test.InstrumentationTestCase
java.lang.reflect.Method
int
java.lang.Throwable[])

public void run()

________________CLASS________________


public class android.test.InstrumentationTestCase extends junit.framework.TestCase

----------------FIELDS----------------

private android.app.Instrumentation mInstrumentation
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
static void access$000(
android.test.InstrumentationTestCase
java.lang.reflect.Method
int)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
private void runMethod(
java.lang.reflect.Method
int)

public android.app.Instrumentation getInstrumentation()

public void injectInsrumentation(
android.app.Instrumentation)
@dalvik.annotation.Signature (value =<T:Landroid/app/Activity;>(Ljava/lang/String;Ljava/lang/Class<TT;>;Landroid/os/Bundle;)TT; )
public final android.app.Activity launchActivity(
java.lang.String
java.lang.Class
android.os.Bundle)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void runTest()

public void sendKeys(
java.lang.String)

public transient void sendKeys(
int[])

public transient void sendRepeatedKeys(
int[])
@dalvik.annotation.Throws (value =Ljava/lang/Exception; )
protected void tearDown()

________________CLASS________________


public class android.test.InstrumentationTestSuite extends junit.framework.TestSuite

----------------FIELDS----------------

private final android.app.Instrumentation mInstrumentation
----------------METHODS----------------

public void <init>(
android.app.Instrumentation)

public void <init>(
java.lang.Class
android.app.Instrumentation)

public void <init>(
java.lang.String
android.app.Instrumentation)

public void addTestSuite(
java.lang.Class)

public void runTest(
junit.framework.Test
junit.framework.TestResult)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/test/PerformanceTestCase; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =Intermediates )
public abstract interface class android.test.PerformanceTestCase$Intermediates extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void addIntermediate(
java.lang.String)

public abstract void addIntermediate(
java.lang.String
long)

public abstract void finishTiming(
boolean)

public abstract void setInternalIterations(
int)

public abstract void startTiming(
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/test/PerformanceTestCase$Intermediates; )
public abstract interface class android.test.PerformanceTestCase extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean isPerformanceOnly()

public abstract int startPerformance(
android.test.PerformanceTestCase$Intermediates)

________________CLASS________________

@java.lang.annotation.Retention (value =Ljava/lang/annotation/RetentionPolicy;!RUNTIME )
@java.lang.annotation.Target (value =Ljava/lang/annotation/ElementType;!METHOD )
public abstract interface class android.test.UiThreadTest extends java.lang.Object implements java.lang.annotation.Annotation

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@java.lang.annotation.Retention (value =Ljava/lang/annotation/RetentionPolicy;!RUNTIME )
@java.lang.annotation.Target (value =Ljava/lang/annotation/ElementType;!METHODLjava/lang/annotation/ElementType;!TYPE )
public abstract interface class android.test.suitebuilder.annotation.Smoke extends java.lang.Object implements java.lang.annotation.Annotation

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@java.lang.annotation.Target (value =Ljava/lang/annotation/ElementType;!METHODLjava/lang/annotation/ElementType;!TYPE )
@java.lang.annotation.Retention (value =Ljava/lang/annotation/RetentionPolicy;!RUNTIME )
public abstract interface class android.test.suitebuilder.annotation.Suppress extends java.lang.Object implements java.lang.annotation.Annotation

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/text/AlteredCharSequence; )
 class android.text.AlteredCharSequence$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________


public abstract interface class android.text.GetChars extends java.lang.Object implements java.lang.CharSequence

----------------FIELDS----------------
----------------METHODS----------------

public abstract void getChars(
int
int
char[]
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/AlteredCharSequence$1;Landroid/text/AlteredCharSequence$AlteredSpanned; )
public class android.text.AlteredCharSequence extends java.lang.Object implements java.lang.CharSequence, android.text.GetChars

----------------FIELDS----------------

private char[] mChars

private int mEnd

private java.lang.CharSequence mSource

private int mStart
----------------METHODS----------------

private void <init>(
java.lang.CharSequence
char[]
int
int)

 void <init>(
java.lang.CharSequence
char[]
int
int
android.text.AlteredCharSequence$1)

public static android.text.AlteredCharSequence make(
java.lang.CharSequence
char[]
int
int)

public char charAt(
int)

public void getChars(
int
int
char[]
int)

public int length()

public java.lang.CharSequence subSequence(
int
int)

public java.lang.String toString()

 void update(
char[]
int
int)

________________CLASS________________


public abstract interface class android.text.Spanned extends java.lang.Object implements java.lang.CharSequence

----------------FIELDS----------------

public static final int SPAN_EXCLUSIVE_EXCLUSIVE

public static final int SPAN_EXCLUSIVE_INCLUSIVE

public static final int SPAN_INCLUSIVE_EXCLUSIVE

public static final int SPAN_INCLUSIVE_INCLUSIVE

public static final int SPAN_MARK_MARK

public static final int SPAN_MARK_POINT

public static final int SPAN_PARAGRAPH

public static final int SPAN_POINT_MARK

public static final int SPAN_POINT_POINT

public static final int SPAN_PRIORITY

public static final int SPAN_PRIORITY_SHIFT

public static final int SPAN_USER

public static final int SPAN_USER_SHIFT
----------------METHODS----------------

public abstract int getSpanEnd(
java.lang.Object)

public abstract int getSpanFlags(
java.lang.Object)

public abstract int getSpanStart(
java.lang.Object)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(IILjava/lang/Class<TT;>;)[TT; )
public abstract java.lang.Object[] getSpans(
int
int
java.lang.Class)

public abstract int nextSpanTransition(
int
int
java.lang.Class)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =AlteredSpanned )
@dalvik.annotation.EnclosingClass (value =Landroid/text/AlteredCharSequence; )
 class android.text.AlteredCharSequence$AlteredSpanned extends android.text.AlteredCharSequence implements android.text.Spanned

----------------FIELDS----------------

private android.text.Spanned mSpanned
----------------METHODS----------------

private void <init>(
java.lang.CharSequence
char[]
int
int)

 void <init>(
java.lang.CharSequence
char[]
int
int
android.text.AlteredCharSequence$1)

public int getSpanEnd(
java.lang.Object)

public int getSpanFlags(
java.lang.Object)

public int getSpanStart(
java.lang.Object)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(IILjava/lang/Class<TT;>;)[TT; )
public java.lang.Object[] getSpans(
int
int
java.lang.Class)

public int nextSpanTransition(
int
int
java.lang.Class)

________________CLASS________________


public class android.text.AndroidCharacter extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static native void getDirectionalities(
char[]
byte[]
int)

public static native char getMirror(
char)

public static native boolean mirror(
char[]
int
int)

________________CLASS________________


public class android.text.Annotation extends java.lang.Object

----------------FIELDS----------------

private java.lang.String mKey

private java.lang.String mValue
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String)

public java.lang.String getKey()

public java.lang.String getValue()

________________CLASS________________


public class android.text.AutoText extends java.lang.Object

----------------FIELDS----------------

private static final int DEFAULT

private static final int INCREMENT

private static final int RIGHT

private static final int TRIE_C

private static final int TRIE_CHILD

private static final int TRIE_NEXT

private static final char TRIE_NULL

private static final int TRIE_OFF

private static final int TRIE_ROOT

private static final int TRIE_SIZEOF

private static android.text.AutoText sInstance

private static java.lang.Object sLock

private java.util.Locale mLocale

private java.lang.String mText

private char[] mTrie

private char mTrieUsed
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.content.res.Resources)

private void add(
java.lang.String
char)

public static java.lang.String get(
java.lang.CharSequence
int
int
android.view.View)

private void init(
android.content.res.Resources)

private java.lang.String lookup(
java.lang.CharSequence
int
int)

private char newTrieNode()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/BoringLayout; )
@dalvik.annotation.InnerClass (accessFlags =9 name =Metrics )
public class android.text.BoringLayout$Metrics extends android.graphics.Paint$FontMetricsInt

----------------FIELDS----------------

public int width
----------------METHODS----------------

public void <init>()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/Layout$Alignment;Landroid/text/Layout$SpannedEllipsizer;Landroid/text/Layout$Ellipsizer;Landroid/text/Layout$Directions; )
public abstract class android.text.Layout extends java.lang.Object

----------------FIELDS----------------

static final android.text.Layout$Directions DIRS_ALL_LEFT_TO_RIGHT

static final android.text.Layout$Directions DIRS_ALL_RIGHT_TO_LEFT

public static final int DIR_LEFT_TO_RIGHT

public static final int DIR_RIGHT_TO_LEFT

private static final int TAB_INCREMENT

private static android.graphics.Rect sTempRect

private android.text.Layout$Alignment mAlignment

private android.text.TextPaint mPaint

private float mSpacingAdd

private float mSpacingMult

private boolean mSpannedText

private java.lang.CharSequence mText

private int mWidth

 android.text.TextPaint mWorkPaint
----------------METHODS----------------

static void <clinit>()

protected void <init>(
java.lang.CharSequence
android.text.TextPaint
int
android.text.Layout$Alignment
float
float)

static void access$100(
android.text.Layout
int
int
int
char[]
int)

private void addSelection(
int
int
int
int
int
android.graphics.Path)

private static void drawText(
android.graphics.Canvas
java.lang.CharSequence
int
int
int
android.text.Layout$Directions
float
int
int
int
android.text.TextPaint
android.text.TextPaint
boolean
java.lang.Object[])

private void ellipsize(
int
int
int
char[]
int)

public static float getDesiredWidth(
java.lang.CharSequence
int
int
android.text.TextPaint)

public static float getDesiredWidth(
java.lang.CharSequence
android.text.TextPaint)

private float getHorizontal(
int
boolean
boolean)

private float getHorizontal(
int
boolean
boolean
int)

private float getLineMax(
int
java.lang.Object[]
boolean)

private int getLineVisibleEnd(
int
int
int)

private int getOffsetAtStartOf(
int)

private static float measureText(
android.text.TextPaint
android.text.TextPaint
java.lang.CharSequence
int
int
int
int
android.text.Layout$Directions
boolean
boolean
boolean
java.lang.Object[])

static float measureText(
android.text.TextPaint
android.text.TextPaint
java.lang.CharSequence
int
int
android.graphics.Paint$FontMetricsInt
boolean
java.lang.Object[])

static float nextTab(
java.lang.CharSequence
int
int
float
java.lang.Object[])

public void draw(
android.graphics.Canvas)

public void draw(
android.graphics.Canvas
android.graphics.Path
android.graphics.Paint
int)

public final android.text.Layout$Alignment getAlignment()

public abstract int getBottomPadding()

public void getCursorPath(
int
android.graphics.Path
java.lang.CharSequence)

public abstract int getEllipsisCount(
int)

public abstract int getEllipsisStart(
int)

public int getEllipsizedWidth()

public int getHeight()

public final int getLineAscent(
int)

public final int getLineBaseline(
int)

public final int getLineBottom(
int)

public int getLineBounds(
int
android.graphics.Rect)

public abstract boolean getLineContainsTab(
int)

public abstract int getLineCount()

public abstract int getLineDescent(
int)

public abstract android.text.Layout$Directions getLineDirections(
int)

public final int getLineEnd(
int)

public int getLineForOffset(
int)

public int getLineForVertical(
int)

public float getLineLeft(
int)

public float getLineMax(
int)

public float getLineRight(
int)

public abstract int getLineStart(
int)

public abstract int getLineTop(
int)

public int getLineVisibleEnd(
int)

public float getLineWidth(
int)

public int getOffsetForHorizontal(
int
float)

public int getOffsetToLeftOf(
int)

public int getOffsetToRightOf(
int)

public final android.text.TextPaint getPaint()

public final android.text.Layout$Alignment getParagraphAlignment(
int)

public abstract int getParagraphDirection(
int)

public final int getParagraphLeft(
int)

public final int getParagraphRight(
int)

public float getPrimaryHorizontal(
int)

public float getSecondaryHorizontal(
int)

public void getSelectionPath(
int
int
android.graphics.Path)

public final float getSpacingAdd()

public final float getSpacingMultiplier()

public final java.lang.CharSequence getText()

public abstract int getTopPadding()

public final int getWidth()

public final void increaseWidthTo(
int)

protected final boolean isSpanned()

 void replaceWith(
java.lang.CharSequence
android.text.TextPaint
int
android.text.Layout$Alignment
float
float)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/TextUtils; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =EllipsizeCallback )
public abstract interface class android.text.TextUtils$EllipsizeCallback extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void ellipsized(
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/BoringLayout$Metrics; )
public class android.text.BoringLayout extends android.text.Layout implements android.text.TextUtils$EllipsizeCallback

----------------FIELDS----------------

private static final char FIRST_RIGHT_TO_LEFT

private static final android.text.TextPaint sTemp

 int mBottom

private int mBottomPadding

 int mDesc

private java.lang.String mDirect

private int mEllipsizedCount

private int mEllipsizedStart

private int mEllipsizedWidth

private float mMax

private android.graphics.Paint mPaint

private int mTopPadding
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.CharSequence
android.text.TextPaint
int
android.text.Layout$Alignment
float
float
android.text.BoringLayout$Metrics
boolean)

public void <init>(
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 android.text.BoringLayout$Metrics isBoring(
java.lang.CharSequence
android.text.TextPaint)

public static android.text.BoringLayout$Metrics isBoring(
java.lang.CharSequence
android.text.TextPaint
android.text.BoringLayout$Metrics)

public static android.text.BoringLayout make(
java.lang.CharSequence
android.text.TextPaint
int
android.text.Layout$Alignment
float
float
android.text.BoringLayout$Metrics
boolean)

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)

public void draw(
android.graphics.Canvas
android.graphics.Path
android.graphics.Paint
int)

public void ellipsized(
int
int)

public int getBottomPadding()

public int getEllipsisCount(
int)

public int getEllipsisStart(
int)

public int getEllipsizedWidth()

public int getHeight()

public boolean getLineContainsTab(
int)

public int getLineCount()

public int getLineDescent(
int)

public final android.text.Layout$Directions getLineDirections(
int)

public float getLineMax(
int)

public int getLineStart(
int)

public int getLineTop(
int)

public int getParagraphDirection(
int)

public int getTopPadding()

 void init(
java.lang.CharSequence
android.text.TextPaint
int
android.text.Layout$Alignment
float
float
android.text.BoringLayout$Metrics
boolean
boolean)

public android.text.BoringLayout replaceOrMake(
java.lang.CharSequence
android.text.TextPaint
int
android.text.Layout$Alignment
float
float
android.text.BoringLayout$Metrics
boolean)

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)

________________CLASS________________


public class android.text.ClipboardManager extends java.lang.Object

----------------FIELDS----------------

private static android.text.IClipboard sService

private android.content.Context mContext
----------------METHODS----------------

public void <init>(
android.content.Context
android.os.Handler)

private static android.text.IClipboard getService()

public java.lang.CharSequence getText()

public boolean hasText()

public void setText(
java.lang.CharSequence)

________________CLASS________________


public abstract interface class android.text.SpanWatcher extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onSpanAdded(
android.text.Spannable
java.lang.Object
int
int)

public abstract void onSpanChanged(
android.text.Spannable
java.lang.Object
int
int
int
int)

public abstract void onSpanRemoved(
android.text.Spannable
java.lang.Object
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/DynamicLayout; )
@dalvik.annotation.InnerClass (accessFlags =10 name =ChangeWatcher )
 class android.text.DynamicLayout$ChangeWatcher extends java.lang.Object implements android.text.TextWatcher, android.text.SpanWatcher

----------------FIELDS----------------

private java.lang.ref.WeakReference mLayout
----------------METHODS----------------

public void <init>(
android.text.DynamicLayout)

private void reflow(
java.lang.CharSequence
int
int
int)

public void afterTextChanged(
android.text.Editable)

public void beforeTextChanged(
java.lang.CharSequence
int
int
int)

public void onSpanAdded(
android.text.Spannable
java.lang.Object
int
int)

public void onSpanChanged(
android.text.Spannable
java.lang.Object
int
int
int
int)

public void onSpanRemoved(
android.text.Spannable
java.lang.Object
int
int)

public void onTextChanged(
java.lang.CharSequence
int
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/DynamicLayout$ChangeWatcher; )
public class android.text.DynamicLayout extends android.text.Layout

----------------FIELDS----------------

private static final int COLUMNS_ELLIPSIZE

private static final int COLUMNS_NORMAL

private static final int DESCENT

private static final int DIR

private static final int DIR_MASK

private static final int DIR_SHIFT

private static final int ELLIPSIS_COUNT

private static final int ELLIPSIS_START

private static final int ELLIPSIS_UNDEFINED

private static final int PRIORITY

private static final int START

private static final int START_MASK

private static final int TAB

private static final int TAB_MASK

private static final int TOP

private static java.lang.Object sLock

private static android.text.StaticLayout sStaticLayout

private java.lang.CharSequence mBase

private int mBottomPadding

private java.lang.CharSequence mDisplay

private boolean mEllipsize

private android.text.TextUtils$TruncateAt mEllipsizeAt

private int mEllipsizedWidth

private boolean mIncludePad

private android.text.PackedIntVector mInts
@dalvik.annotation.Signature (value =Landroid/text/PackedObjectVector<Landroid/text/Layout$Directions;>; )
private android.text.PackedObjectVector mObjects

private int mTopPadding

private android.text.DynamicLayout$ChangeWatcher mWatcher
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.CharSequence
android.text.TextPaint
int
android.text.Layout$Alignment
float
float
boolean)

public void <init>(
java.lang.CharSequence
java.lang.CharSequence
android.text.TextPaint
int
android.text.Layout$Alignment
float
float
boolean)

public void <init>(
java.lang.CharSequence
java.lang.CharSequence
android.text.TextPaint
int
android.text.Layout$Alignment
float
float
boolean
android.text.TextUtils$TruncateAt
int)

static void access$000(
android.text.DynamicLayout
java.lang.CharSequence
int
int
int)

private void dump(
boolean)

private void reflow(
java.lang.CharSequence
int
int
int)

public int getBottomPadding()

public int getEllipsisCount(
int)

public int getEllipsisStart(
int)

public int getEllipsizedWidth()

public boolean getLineContainsTab(
int)

public int getLineCount()

public int getLineDescent(
int)

public final android.text.Layout$Directions getLineDirections(
int)

public int getLineStart(
int)

public int getLineTop(
int)

public int getParagraphDirection(
int)

public int getTopPadding()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Factory )
@dalvik.annotation.EnclosingClass (value =Landroid/text/Editable; )
public class android.text.Editable$Factory extends java.lang.Object

----------------FIELDS----------------

private static android.text.Editable$Factory sInstance
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.text.Editable$Factory getInstance()

public android.text.Editable newEditable(
java.lang.CharSequence)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/Spannable$Factory; )
public abstract interface class android.text.Spannable extends java.lang.Object implements android.text.Spanned

----------------FIELDS----------------
----------------METHODS----------------

public abstract void removeSpan(
java.lang.Object)

public abstract void setSpan(
java.lang.Object
int
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/Editable$Factory; )
public abstract interface class android.text.Editable extends java.lang.Object implements java.lang.CharSequence, android.text.GetChars, android.text.Spannable, java.lang.Appendable

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.text.Editable append(
char)

public abstract android.text.Editable append(
java.lang.CharSequence)

public abstract android.text.Editable append(
java.lang.CharSequence
int
int)

public abstract void clear()

public abstract void clearSpans()

public abstract android.text.Editable delete(
int
int)

public abstract android.text.InputFilter[] getFilters()

public abstract android.text.Editable insert(
int
java.lang.CharSequence)

public abstract android.text.Editable insert(
int
java.lang.CharSequence
int
int)

public abstract android.text.Editable replace(
int
int
java.lang.CharSequence)

public abstract android.text.Editable replace(
int
int
java.lang.CharSequence
int
int)

public abstract void setFilters(
android.text.InputFilter[])

________________CLASS________________


public abstract interface class android.text.GraphicsOperations extends java.lang.Object implements java.lang.CharSequence

----------------FIELDS----------------
----------------METHODS----------------

public abstract void drawText(
android.graphics.Canvas
int
int
float
float
android.graphics.Paint)

public abstract int getTextWidths(
int
int
float[]
android.graphics.Paint)

public abstract float measureText(
int
int
android.graphics.Paint)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =HtmlParser )
@dalvik.annotation.EnclosingClass (value =Landroid/text/Html; )
 class android.text.Html$HtmlParser extends java.lang.Object

----------------FIELDS----------------

private static final org.ccil.cowan.tagsoup.HTMLSchema schema
----------------METHODS----------------

static void <clinit>()

private void <init>()

static org.ccil.cowan.tagsoup.HTMLSchema access$000()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/Html; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ImageGetter )
public abstract interface class android.text.Html$ImageGetter extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.graphics.drawable.Drawable getDrawable(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/Html; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =TagHandler )
public abstract interface class android.text.Html$TagHandler extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void handleTag(
boolean
java.lang.String
android.text.Editable
org.xml.sax.XMLReader)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/Html$HtmlParser;Landroid/text/Html$TagHandler;Landroid/text/Html$ImageGetter; )
public class android.text.Html extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

public static android.text.Spanned fromHtml(
java.lang.String)

public static android.text.Spanned fromHtml(
java.lang.String
android.text.Html$ImageGetter
android.text.Html$TagHandler)

public static java.lang.String toHtml(
android.text.Spanned)

private static void withinBlockquote(
java.lang.StringBuilder
android.text.Spanned
int
int)

private static void withinParagraph(
java.lang.StringBuilder
android.text.Spanned
int
int
int
boolean)

private static void withinStyle(
java.lang.StringBuilder
android.text.Spanned
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/HtmlToSpannedConverter; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.text.HtmlToSpannedConverter$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/HtmlToSpannedConverter; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Big )
 class android.text.HtmlToSpannedConverter$Big extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

 void <init>(
android.text.HtmlToSpannedConverter$1)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/HtmlToSpannedConverter; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Blockquote )
 class android.text.HtmlToSpannedConverter$Blockquote extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

 void <init>(
android.text.HtmlToSpannedConverter$1)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/HtmlToSpannedConverter; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Bold )
 class android.text.HtmlToSpannedConverter$Bold extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

 void <init>(
android.text.HtmlToSpannedConverter$1)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Font )
@dalvik.annotation.EnclosingClass (value =Landroid/text/HtmlToSpannedConverter; )
 class android.text.HtmlToSpannedConverter$Font extends java.lang.Object

----------------FIELDS----------------

public java.lang.String mColor

public java.lang.String mFace
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/HtmlToSpannedConverter; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Header )
 class android.text.HtmlToSpannedConverter$Header extends java.lang.Object

----------------FIELDS----------------

private int mLevel
----------------METHODS----------------

public void <init>(
int)

static int access$900(
android.text.HtmlToSpannedConverter$Header)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/HtmlToSpannedConverter; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Href )
 class android.text.HtmlToSpannedConverter$Href extends java.lang.Object

----------------FIELDS----------------

public java.lang.String mHref
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/HtmlToSpannedConverter; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Italic )
 class android.text.HtmlToSpannedConverter$Italic extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

 void <init>(
android.text.HtmlToSpannedConverter$1)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/HtmlToSpannedConverter; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Monospace )
 class android.text.HtmlToSpannedConverter$Monospace extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

 void <init>(
android.text.HtmlToSpannedConverter$1)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Small )
@dalvik.annotation.EnclosingClass (value =Landroid/text/HtmlToSpannedConverter; )
 class android.text.HtmlToSpannedConverter$Small extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

 void <init>(
android.text.HtmlToSpannedConverter$1)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Sub )
@dalvik.annotation.EnclosingClass (value =Landroid/text/HtmlToSpannedConverter; )
 class android.text.HtmlToSpannedConverter$Sub extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

 void <init>(
android.text.HtmlToSpannedConverter$1)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/HtmlToSpannedConverter; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Super )
 class android.text.HtmlToSpannedConverter$Super extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

 void <init>(
android.text.HtmlToSpannedConverter$1)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Underline )
@dalvik.annotation.EnclosingClass (value =Landroid/text/HtmlToSpannedConverter; )
 class android.text.HtmlToSpannedConverter$Underline extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

 void <init>(
android.text.HtmlToSpannedConverter$1)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/HtmlToSpannedConverter$1;Landroid/text/HtmlToSpannedConverter$Header;Landroid/text/HtmlToSpannedConverter$Href;Landroid/text/HtmlToSpannedConverter$Font;Landroid/text/HtmlToSpannedConverter$Sub;Landroid/text/HtmlToSpannedConverter$Super;Landroid/text/HtmlToSpannedConverter$Blockquote;Landroid/text/HtmlToSpannedConverter$Monospace;Landroid/text/HtmlToSpannedConverter$Small;Landroid/text/HtmlToSpannedConverter$Big;Landroid/text/HtmlToSpannedConverter$Underline;Landroid/text/HtmlToSpannedConverter$Italic;Landroid/text/HtmlToSpannedConverter$Bold; )
 class android.text.HtmlToSpannedConverter extends java.lang.Object implements org.xml.sax.ContentHandler

----------------FIELDS----------------

private static final float[] HEADER_SIZES

private android.text.Html$ImageGetter mImageGetter

private org.xml.sax.XMLReader mReader

private java.lang.String mSource

private android.text.SpannableStringBuilder mSpannableStringBuilder

private android.text.Html$TagHandler mTagHandler
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String
android.text.Html$ImageGetter
android.text.Html$TagHandler
org.ccil.cowan.tagsoup.Parser)

private static void end(
android.text.SpannableStringBuilder
java.lang.Class
java.lang.Object)

private static void endA(
android.text.SpannableStringBuilder)

private static void endFont(
android.text.SpannableStringBuilder)

private static void endHeader(
android.text.SpannableStringBuilder)

private static java.lang.Object getLast(
android.text.Spanned
java.lang.Class)

private static void handleBr(
android.text.SpannableStringBuilder)

private void handleEndTag(
java.lang.String)

private static void handleP(
android.text.SpannableStringBuilder)

private void handleStartTag(
java.lang.String
org.xml.sax.Attributes)

private static void start(
android.text.SpannableStringBuilder
java.lang.Object)

private static void startA(
android.text.SpannableStringBuilder
org.xml.sax.Attributes)

private static void startFont(
android.text.SpannableStringBuilder
org.xml.sax.Attributes)

private static void startImg(
android.text.SpannableStringBuilder
org.xml.sax.Attributes
android.text.Html$ImageGetter)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void characters(
char[]
int
int)

public android.text.Spanned convert()
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void endDocument()
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void endElement(
java.lang.String
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void endPrefixMapping(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void ignorableWhitespace(
char[]
int
int)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void processingInstruction(
java.lang.String
java.lang.String)

public void setDocumentLocator(
org.xml.sax.Locator)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void skippedEntity(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void startDocument()
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void startElement(
java.lang.String
java.lang.String
java.lang.String
org.xml.sax.Attributes)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public void startPrefixMapping(
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/IClipboard$Stub; )
public abstract interface class android.text.IClipboard extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.CharSequence getClipboardText()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean hasClipboardText()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setClipboardText(
java.lang.CharSequence)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/IClipboard$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.text.IClipboard$Stub$Proxy extends java.lang.Object implements android.text.IClipboard

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.CharSequence getClipboardText()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean hasClipboardText()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setClipboardText(
java.lang.CharSequence)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/IClipboard$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/text/IClipboard; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.text.IClipboard$Stub extends android.os.Binder implements android.text.IClipboard

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_getClipboardText

static final int TRANSACTION_hasClipboardText

static final int TRANSACTION_setClipboardText
----------------METHODS----------------

public void <init>()

public static android.text.IClipboard asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/InputFilter$LengthFilter;Landroid/text/InputFilter$AllCaps; )
public abstract interface class android.text.InputFilter extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.lang.CharSequence filter(
java.lang.CharSequence
int
int
android.text.Spanned
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/InputFilter; )
@dalvik.annotation.InnerClass (accessFlags =9 name =AllCaps )
public class android.text.InputFilter$AllCaps extends java.lang.Object implements android.text.InputFilter

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public java.lang.CharSequence filter(
java.lang.CharSequence
int
int
android.text.Spanned
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =LengthFilter )
@dalvik.annotation.EnclosingClass (value =Landroid/text/InputFilter; )
public class android.text.InputFilter$LengthFilter extends java.lang.Object implements android.text.InputFilter

----------------FIELDS----------------

private int mMax
----------------METHODS----------------

public void <init>(
int)

public java.lang.CharSequence filter(
java.lang.CharSequence
int
int
android.text.Spanned
int
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/text/Layout$Alignment;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Alignment )
@dalvik.annotation.EnclosingClass (value =Landroid/text/Layout; )
public final class android.text.Layout$Alignment extends java.lang.Enum

----------------FIELDS----------------

private static final android.text.Layout$Alignment[] $VALUES

public static final android.text.Layout$Alignment ALIGN_CENTER

public static final android.text.Layout$Alignment ALIGN_NORMAL

public static final android.text.Layout$Alignment ALIGN_OPPOSITE
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.text.Layout$Alignment valueOf(
java.lang.String)

public static android.text.Layout$Alignment[] values()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Directions )
@dalvik.annotation.EnclosingClass (value =Landroid/text/Layout; )
public class android.text.Layout$Directions extends java.lang.Object

----------------FIELDS----------------

private short[] mDirections
----------------METHODS----------------

 void <init>(
short[])

static short[] access$000(
android.text.Layout$Directions)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/Layout; )
@dalvik.annotation.InnerClass (accessFlags =8 name =Ellipsizer )
 class android.text.Layout$Ellipsizer extends java.lang.Object implements java.lang.CharSequence, android.text.GetChars

----------------FIELDS----------------

 android.text.Layout mLayout

 android.text.TextUtils$TruncateAt mMethod

 java.lang.CharSequence mText

 int mWidth
----------------METHODS----------------

public void <init>(
java.lang.CharSequence)

public char charAt(
int)

public void getChars(
int
int
char[]
int)

public int length()

public java.lang.CharSequence subSequence(
int
int)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/Layout; )
@dalvik.annotation.InnerClass (accessFlags =8 name =SpannedEllipsizer )
 class android.text.Layout$SpannedEllipsizer extends android.text.Layout$Ellipsizer implements android.text.Spanned

----------------FIELDS----------------

private android.text.Spanned mSpanned
----------------METHODS----------------

public void <init>(
java.lang.CharSequence)

public int getSpanEnd(
java.lang.Object)

public int getSpanFlags(
java.lang.Object)

public int getSpanStart(
java.lang.Object)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(IILjava/lang/Class<TT;>;)[TT; )
public java.lang.Object[] getSpans(
int
int
java.lang.Class)

public int nextSpanTransition(
int
int
java.lang.Class)

public java.lang.CharSequence subSequence(
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/LoginFilter$PasswordFilterGMail;Landroid/text/LoginFilter$UsernameFilterGeneric;Landroid/text/LoginFilter$UsernameFilterGMail; )
public abstract class android.text.LoginFilter extends java.lang.Object implements android.text.InputFilter

----------------FIELDS----------------

private boolean mAppendInvalid
----------------METHODS----------------

 void <init>()

 void <init>(
boolean)

public java.lang.CharSequence filter(
java.lang.CharSequence
int
int
android.text.Spanned
int
int)

public abstract boolean isAllowed(
char)

public void onInvalidCharacter(
char)

public void onStart()

public void onStop()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/LoginFilter; )
@dalvik.annotation.InnerClass (accessFlags =9 name =PasswordFilterGMail )
public class android.text.LoginFilter$PasswordFilterGMail extends android.text.LoginFilter

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
boolean)

public boolean isAllowed(
char)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =UsernameFilterGMail )
@dalvik.annotation.EnclosingClass (value =Landroid/text/LoginFilter; )
public class android.text.LoginFilter$UsernameFilterGMail extends android.text.LoginFilter

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
boolean)

public boolean isAllowed(
char)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =UsernameFilterGeneric )
@dalvik.annotation.EnclosingClass (value =Landroid/text/LoginFilter; )
public class android.text.LoginFilter$UsernameFilterGeneric extends android.text.LoginFilter

----------------FIELDS----------------

private static final java.lang.String mAllowed
----------------METHODS----------------

public void <init>()

public void <init>(
boolean)

public boolean isAllowed(
char)

________________CLASS________________


 class android.text.PackedIntVector extends java.lang.Object

----------------FIELDS----------------

private final int mColumns

private int mRowGapLength

private int mRowGapStart

private int mRows

private int[] mValueGap

private int[] mValues
----------------METHODS----------------

public void <init>(
int)

private final void growBuffer()

private final void moveRowGapTo(
int)

private final void moveValueGapTo(
int
int)

private void setValueInternal(
int
int
int)

public void adjustValuesBelow(
int
int
int)

public void deleteAt(
int
int)

public int getValue(
int
int)

public void insertAt(
int
int[])

public void setValue(
int
int
int)

public int size()

public int width()

________________CLASS________________

@dalvik.annotation.Signature (value =<E:Ljava/lang/Object;>Ljava/lang/Object; )
 class android.text.PackedObjectVector extends java.lang.Object

----------------FIELDS----------------

private int mColumns

private int mRowGapLength

private int mRowGapStart

private int mRows

private java.lang.Object[] mValues
----------------METHODS----------------

public void <init>(
int)

private void growBuffer()

private void moveRowGapTo(
int)

public void deleteAt(
int
int)

public void dump()
@dalvik.annotation.Signature (value =(II)TE; )
public java.lang.Object getValue(
int
int)
@dalvik.annotation.Signature (value =(I[TE;)V )
public void insertAt(
int
java.lang.Object[])
@dalvik.annotation.Signature (value =(IITE;)V )
public void setValue(
int
int
java.lang.Object)

public int size()

public int width()

________________CLASS________________


public class android.text.Selection extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.Object SELECTION_END

public static final java.lang.Object SELECTION_START
----------------METHODS----------------

static void <clinit>()

private void <init>()

private static int chooseHorizontal(
android.text.Layout
int
int
int)

public static boolean extendDown(
android.text.Spannable
android.text.Layout)

public static boolean extendLeft(
android.text.Spannable
android.text.Layout)

public static boolean extendRight(
android.text.Spannable
android.text.Layout)

public static final void extendSelection(
android.text.Spannable
int)

public static boolean extendToLeftEdge(
android.text.Spannable
android.text.Layout)

public static boolean extendToRightEdge(
android.text.Spannable
android.text.Layout)

public static boolean extendUp(
android.text.Spannable
android.text.Layout)

private static int findEdge(
android.text.Spannable
android.text.Layout
int)

public static final int getSelectionEnd(
java.lang.CharSequence)

public static final int getSelectionStart(
java.lang.CharSequence)

public static boolean moveDown(
android.text.Spannable
android.text.Layout)

public static boolean moveLeft(
android.text.Spannable
android.text.Layout)

public static boolean moveRight(
android.text.Spannable
android.text.Layout)

public static boolean moveToLeftEdge(
android.text.Spannable
android.text.Layout)

public static boolean moveToRightEdge(
android.text.Spannable
android.text.Layout)

public static boolean moveUp(
android.text.Spannable
android.text.Layout)

public static final void removeSelection(
android.text.Spannable)

public static final void selectAll(
android.text.Spannable)

public static final void setSelection(
android.text.Spannable
int)

public static void setSelection(
android.text.Spannable
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Factory )
@dalvik.annotation.EnclosingClass (value =Landroid/text/Spannable; )
public class android.text.Spannable$Factory extends java.lang.Object

----------------FIELDS----------------

private static android.text.Spannable$Factory sInstance
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.text.Spannable$Factory getInstance()

public android.text.Spannable newSpannable(
java.lang.CharSequence)

________________CLASS________________


abstract class android.text.SpannableStringInternal extends java.lang.Object

----------------FIELDS----------------

private static final int COLUMNS

static final java.lang.Object[] EMPTY

private static final int END

private static final int FLAGS

private static final int START

private int mSpanCount

private int[] mSpanData

private java.lang.Object[] mSpans

private java.lang.String mText
----------------METHODS----------------

static void <clinit>()

 void <init>(
java.lang.CharSequence
int
int)

private void checkRange(
java.lang.String
int
int)

private static java.lang.String region(
int
int)

private void sendSpanAdded(
java.lang.Object
int
int)

private void sendSpanChanged(
java.lang.Object
int
int
int
int)

private void sendSpanRemoved(
java.lang.Object
int
int)

public final char charAt(
int)

public final void getChars(
int
int
char[]
int)

public int getSpanEnd(
java.lang.Object)

public int getSpanFlags(
java.lang.Object)

public int getSpanStart(
java.lang.Object)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(IILjava/lang/Class<TT;>;)[TT; )
public java.lang.Object[] getSpans(
int
int
java.lang.Class)

public final int length()

public int nextSpanTransition(
int
int
java.lang.Class)

 void removeSpan(
java.lang.Object)

 void setSpan(
java.lang.Object
int
int
int)

public final java.lang.String toString()

________________CLASS________________


public class android.text.SpannableString extends android.text.SpannableStringInternal implements java.lang.CharSequence, android.text.GetChars, android.text.Spannable

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.CharSequence)

private void <init>(
java.lang.CharSequence
int
int)

public static android.text.SpannableString valueOf(
java.lang.CharSequence)

public volatile int getSpanEnd(
java.lang.Object)

public volatile int getSpanFlags(
java.lang.Object)

public volatile int getSpanStart(
java.lang.Object)

public volatile java.lang.Object[] getSpans(
int
int
java.lang.Class)

public volatile int nextSpanTransition(
int
int
java.lang.Class)

public void removeSpan(
java.lang.Object)

public void setSpan(
java.lang.Object
int
int
int)

public final java.lang.CharSequence subSequence(
int
int)

________________CLASS________________


public class android.text.SpannableStringBuilder extends java.lang.Object implements java.lang.CharSequence, android.text.GetChars, android.text.Spannable, android.text.Editable, java.lang.Appendable, android.text.GraphicsOperations

----------------FIELDS----------------

private static final int END_MASK

private static final int MARK

private static final android.text.InputFilter[] NO_FILTERS

private static final int PARAGRAPH

private static final int POINT

private static final int START_MASK

private static final int START_SHIFT

private android.text.InputFilter[] mFilters

private int mGapLength

private int mGapStart

private int mSpanCount

private int[] mSpanEnds

private int[] mSpanFlags

private int[] mSpanStarts

private java.lang.Object[] mSpans

private char[] mText
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
java.lang.CharSequence)

public void <init>(
java.lang.CharSequence
int
int)

private int change(
int
int
java.lang.CharSequence
int
int)

private int change(
boolean
int
int
java.lang.CharSequence
int
int)

private void checkRange(
java.lang.String
int
int)

private boolean isprint(
char)

private void moveGapTo(
int)

private static java.lang.String region(
int
int)

private void resizeFor(
int)

private void sendSpanAdded(
java.lang.Object
int
int)

private void sendSpanChanged(
java.lang.Object
int
int
int
int)

private void sendSpanRemoved(
java.lang.Object
int
int)

private void sendTextChange(
android.text.TextWatcher[]
int
int
int)

private void sendTextHasChanged(
android.text.TextWatcher[])

private android.text.TextWatcher[] sendTextWillChange(
int
int
int)

private void setSpan(
boolean
java.lang.Object
int
int
int)

public static android.text.SpannableStringBuilder valueOf(
java.lang.CharSequence)

public volatile android.text.Editable append(
char)

public volatile android.text.Editable append(
java.lang.CharSequence)

public volatile android.text.Editable append(
java.lang.CharSequence
int
int)

public android.text.SpannableStringBuilder append(
char)

public android.text.SpannableStringBuilder append(
java.lang.CharSequence)

public android.text.SpannableStringBuilder append(
java.lang.CharSequence
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public volatile java.lang.Appendable append(
char)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public volatile java.lang.Appendable append(
java.lang.CharSequence)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public volatile java.lang.Appendable append(
java.lang.CharSequence
int
int)

public char charAt(
int)

public void clear()

public void clearSpans()

public volatile android.text.Editable delete(
int
int)

public android.text.SpannableStringBuilder delete(
int
int)

public void drawText(
android.graphics.Canvas
int
int
float
float
android.graphics.Paint)

public void getChars(
int
int
char[]
int)

public android.text.InputFilter[] getFilters()

public int getSpanEnd(
java.lang.Object)

public int getSpanFlags(
java.lang.Object)

public int getSpanStart(
java.lang.Object)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(IILjava/lang/Class<TT;>;)[TT; )
public java.lang.Object[] getSpans(
int
int
java.lang.Class)

public int getTextWidths(
int
int
float[]
android.graphics.Paint)

public volatile android.text.Editable insert(
int
java.lang.CharSequence)

public volatile android.text.Editable insert(
int
java.lang.CharSequence
int
int)

public android.text.SpannableStringBuilder insert(
int
java.lang.CharSequence)

public android.text.SpannableStringBuilder insert(
int
java.lang.CharSequence
int
int)

public int length()

public float measureText(
int
int
android.graphics.Paint)

public int nextSpanTransition(
int
int
java.lang.Class)

public void removeSpan(
java.lang.Object)

public volatile android.text.Editable replace(
int
int
java.lang.CharSequence)

public volatile android.text.Editable replace(
int
int
java.lang.CharSequence
int
int)

public android.text.SpannableStringBuilder replace(
int
int
java.lang.CharSequence)

public android.text.SpannableStringBuilder replace(
int
int
java.lang.CharSequence
int
int)

public void setFilters(
android.text.InputFilter[])

public void setSpan(
java.lang.Object
int
int
int)

public java.lang.CharSequence subSequence(
int
int)

public java.lang.String toString()

________________CLASS________________


public final class android.text.SpannedString extends android.text.SpannableStringInternal implements java.lang.CharSequence, android.text.GetChars, android.text.Spanned

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.CharSequence)

private void <init>(
java.lang.CharSequence
int
int)

public static android.text.SpannedString valueOf(
java.lang.CharSequence)

public volatile int getSpanEnd(
java.lang.Object)

public volatile int getSpanFlags(
java.lang.Object)

public volatile int getSpanStart(
java.lang.Object)

public volatile java.lang.Object[] getSpans(
int
int
java.lang.Class)

public volatile int nextSpanTransition(
int
int
java.lang.Class)

public java.lang.CharSequence subSequence(
int
int)

________________CLASS________________


public class android.text.StaticLayout extends android.text.Layout

----------------FIELDS----------------

private static final int COLUMNS_ELLIPSIZE

private static final int COLUMNS_NORMAL

private static final int DESCENT

private static final int DIR

private static final int DIR_MASK

private static final int DIR_SHIFT

private static final int ELLIPSIS_COUNT

private static final int ELLIPSIS_START

private static final char FIRST_RIGHT_TO_LEFT

private static final int START

private static final int START_MASK

private static final int TAB

private static final int TAB_MASK

private static final int TOP

private int mBottomPadding

private byte[] mChdirs

private char[] mChs

private int mColumns

private int mEllipsizedWidth

private android.graphics.Paint$FontMetricsInt mFontMetricsInt

private int mLineCount

private android.text.Layout$Directions[] mLineDirections

private int[] mLines

private int mTopPadding

private float[] mWidths
----------------METHODS----------------

public void <init>(
java.lang.CharSequence
int
int
android.text.TextPaint
int
android.text.Layout$Alignment
float
float
boolean)

public void <init>(
java.lang.CharSequence
int
int
android.text.TextPaint
int
android.text.Layout$Alignment
float
float
boolean
android.text.TextUtils$TruncateAt
int)

public void <init>(
java.lang.CharSequence
android.text.TextPaint
int
android.text.Layout$Alignment
float
float
boolean)

 void <init>(
boolean)

private void calculateEllipsis(
int
int
float[]
int
int
float
android.text.TextUtils$TruncateAt
int
float
android.text.TextPaint)

private static int getFit(
android.text.TextPaint
android.text.TextPaint
java.lang.CharSequence
int
int
float)

private int out(
java.lang.CharSequence
int
int
int
int
int
int
int
float
float
android.text.style.LineHeightSpan[]
int[]
android.graphics.Paint$FontMetricsInt
boolean
boolean
int
byte[]
int
boolean
boolean
boolean
boolean
float[]
int
int
android.text.TextUtils$TruncateAt
float
float
android.text.TextPaint)

 void generate(
java.lang.CharSequence
int
int
android.text.TextPaint
int
android.text.Layout$Alignment
float
float
boolean
boolean
boolean
float
android.text.TextUtils$TruncateAt)

public int getBottomPadding()

public int getEllipsisCount(
int)

public int getEllipsisStart(
int)

public int getEllipsizedWidth()

public boolean getLineContainsTab(
int)

public int getLineCount()

public int getLineDescent(
int)

public final android.text.Layout$Directions getLineDirections(
int)

public int getLineForVertical(
int)

public int getLineStart(
int)

public int getLineTop(
int)

public int getParagraphDirection(
int)

public int getTopPadding()

________________CLASS________________


 class android.text.Styled extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public static float drawText(
android.graphics.Canvas
java.lang.CharSequence
int
int
int
boolean
float
int
int
int
android.text.TextPaint
android.text.TextPaint
boolean)

private static float each(
android.graphics.Canvas
android.text.Spanned
int
int
int
boolean
float
int
int
int
android.graphics.Paint$FontMetricsInt
android.text.TextPaint
android.text.TextPaint
boolean)

private static float foreach(
android.graphics.Canvas
java.lang.CharSequence
int
int
int
boolean
float
int
int
int
android.graphics.Paint$FontMetricsInt
android.text.TextPaint
android.text.TextPaint
boolean)

public static int getTextWidths(
android.text.TextPaint
android.text.TextPaint
android.text.Spanned
int
int
float[]
android.graphics.Paint$FontMetricsInt)

public static float measureText(
android.text.TextPaint
android.text.TextPaint
java.lang.CharSequence
int
int
android.graphics.Paint$FontMetricsInt)

________________CLASS________________


public class android.text.TextPaint extends android.graphics.Paint

----------------FIELDS----------------

public int baselineShift

public int bgColor

public int[] drawableState

public int linkColor
----------------METHODS----------------

public void <init>()

public void <init>(
int)

public void <init>(
android.graphics.Paint)

public void set(
android.text.TextPaint)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/TextUtils; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Ljava/lang/CharSequence;>; )
final class android.text.TextUtils$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public java.lang.CharSequence createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public java.lang.CharSequence[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Reverser )
@dalvik.annotation.EnclosingClass (value =Landroid/text/TextUtils; )
 class android.text.TextUtils$Reverser extends java.lang.Object implements java.lang.CharSequence, android.text.GetChars

----------------FIELDS----------------

private int mEnd

private java.lang.CharSequence mSource

private int mStart
----------------METHODS----------------

public void <init>(
java.lang.CharSequence
int
int)

public char charAt(
int)

public void getChars(
int
int
char[]
int)

public int length()

public java.lang.CharSequence subSequence(
int
int)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/TextUtils; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =TruncateAt )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/text/TextUtils$TruncateAt;>; )
public final class android.text.TextUtils$TruncateAt extends java.lang.Enum

----------------FIELDS----------------

private static final android.text.TextUtils$TruncateAt[] $VALUES

public static final android.text.TextUtils$TruncateAt END

public static final android.text.TextUtils$TruncateAt MIDDLE

public static final android.text.TextUtils$TruncateAt START
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.text.TextUtils$TruncateAt valueOf(
java.lang.String)

public static android.text.TextUtils$TruncateAt[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/TextUtils$EllipsizeCallback;Landroid/text/TextUtils$TruncateAt;Landroid/text/TextUtils$Reverser;Landroid/text/TextUtils$SimpleStringSplitter;Landroid/text/TextUtils$StringSplitter; )
public class android.text.TextUtils extends java.lang.Object

----------------FIELDS----------------

private static final int ABSOLUTE_SIZE_SPAN

private static final int ALIGNMENT_SPAN

private static final int ANNOTATION

private static final int BACKGROUND_COLOR_SPAN

private static final int BULLET_SPAN
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Ljava/lang/CharSequence;>; )
public static final android.os.Parcelable$Creator CHAR_SEQUENCE_CREATOR

private static java.lang.String[] EMPTY_STRING_ARRAY

private static final int FOREGROUND_COLOR_SPAN

private static final int LEADING_MARGIN_SPAN

private static final int QUOTE_SPAN

private static final int RELATIVE_SIZE_SPAN

private static final int SCALE_X_SPAN

private static final int STRIKETHROUGH_SPAN

private static final int STYLE_SPAN

private static final int SUBSCRIPT_SPAN

private static final int SUPERSCRIPT_SPAN

private static final int TEXT_APPEARANCE_SPAN

private static final int TYPEFACE_SPAN

private static final int UNDERLINE_SPAN

private static final int URL_SPAN

private static java.lang.String sEllipsis

private static java.lang.Object sLock

private static char[] sTemp
----------------METHODS----------------

static void <clinit>()

private void <init>()

static void access$000(
android.os.Parcel
android.text.Spannable
java.lang.Object)

private static java.lang.String blank(
java.lang.CharSequence
int
int)

public static java.lang.CharSequence commaEllipsize(
java.lang.CharSequence
android.text.TextPaint
float
java.lang.String
java.lang.String)

public static transient java.lang.CharSequence concat(
java.lang.CharSequence[])

public static void copySpansFrom(
android.text.Spanned
int
int
java.lang.Class
android.text.Spannable
int)

public static java.lang.CharSequence ellipsize(
java.lang.CharSequence
android.text.TextPaint
float
android.text.TextUtils$TruncateAt)

public static java.lang.CharSequence ellipsize(
java.lang.CharSequence
android.text.TextPaint
float
android.text.TextUtils$TruncateAt
boolean
android.text.TextUtils$EllipsizeCallback)

public static boolean equals(
java.lang.CharSequence
java.lang.CharSequence)

public static transient java.lang.CharSequence expandTemplate(
java.lang.CharSequence
java.lang.CharSequence[])

public static void getChars(
java.lang.CharSequence
int
int
char[]
int)

public static int getOffsetAfter(
java.lang.CharSequence
int)

public static int getOffsetBefore(
java.lang.CharSequence
int)

public static java.lang.CharSequence getReverse(
java.lang.CharSequence
int
int)

public static int getTrimmedLength(
java.lang.CharSequence)

public static java.lang.String htmlEncode(
java.lang.String)

public static int indexOf(
java.lang.CharSequence
char)

public static int indexOf(
java.lang.CharSequence
char
int)

public static int indexOf(
java.lang.CharSequence
char
int
int)

public static int indexOf(
java.lang.CharSequence
java.lang.CharSequence)

public static int indexOf(
java.lang.CharSequence
java.lang.CharSequence
int)

public static int indexOf(
java.lang.CharSequence
java.lang.CharSequence
int
int)

public static boolean isDigitsOnly(
java.lang.CharSequence)

public static boolean isEmpty(
java.lang.CharSequence)

public static boolean isGraphic(
char)

public static boolean isGraphic(
java.lang.CharSequence)

public static java.lang.String join(
java.lang.CharSequence
java.lang.Iterable)

public static java.lang.String join(
java.lang.CharSequence
java.lang.Object[])

public static int lastIndexOf(
java.lang.CharSequence
char)

public static int lastIndexOf(
java.lang.CharSequence
char
int)

public static int lastIndexOf(
java.lang.CharSequence
char
int
int)

static char[] obtain(
int)

private static void readSpan(
android.os.Parcel
android.text.Spannable
java.lang.Object)

static void recycle(
char[])

public static boolean regionMatches(
java.lang.CharSequence
int
java.lang.CharSequence
int
int)

public static java.lang.CharSequence replace(
java.lang.CharSequence
java.lang.String[]
java.lang.CharSequence[])

public static java.lang.String[] split(
java.lang.String
java.lang.String)

public static java.lang.String[] split(
java.lang.String
java.util.regex.Pattern)

public static java.lang.CharSequence stringOrSpannedString(
java.lang.CharSequence)

public static java.lang.String substring(
java.lang.CharSequence
int
int)

public static void writeToParcel(
java.lang.CharSequence
android.os.Parcel
int)

private static void writeWhere(
android.os.Parcel
android.text.Spanned
java.lang.Object)

________________CLASS________________


public abstract interface class android.text.method.MovementMethod extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean canSelectArbitrarily()

public abstract void initialize(
android.widget.TextView
android.text.Spannable)

public abstract boolean onKeyDown(
android.widget.TextView
android.text.Spannable
int
android.view.KeyEvent)

public abstract boolean onKeyUp(
android.widget.TextView
android.text.Spannable
int
android.view.KeyEvent)

public abstract void onTakeFocus(
android.widget.TextView
android.text.Spannable
int)

public abstract boolean onTouchEvent(
android.widget.TextView
android.text.Spannable
android.view.MotionEvent)

public abstract boolean onTrackballEvent(
android.widget.TextView
android.text.Spannable
android.view.MotionEvent)

________________CLASS________________


public class android.text.method.ArrowKeyMovementMethod extends java.lang.Object implements android.text.method.MovementMethod

----------------FIELDS----------------

private static android.text.method.ArrowKeyMovementMethod sInstance
----------------METHODS----------------

public void <init>()

private boolean down(
android.widget.TextView
android.text.Spannable)

public static android.text.method.MovementMethod getInstance()

private boolean left(
android.widget.TextView
android.text.Spannable)

private boolean right(
android.widget.TextView
android.text.Spannable)

private boolean up(
android.widget.TextView
android.text.Spannable)

public boolean canSelectArbitrarily()

public void initialize(
android.widget.TextView
android.text.Spannable)

public boolean onKeyDown(
android.widget.TextView
android.text.Spannable
int
android.view.KeyEvent)

public boolean onKeyUp(
android.widget.TextView
android.text.Spannable
int
android.view.KeyEvent)

public void onTakeFocus(
android.widget.TextView
android.text.Spannable
int)

public boolean onTouchEvent(
android.widget.TextView
android.text.Spannable
android.view.MotionEvent)

public boolean onTrackballEvent(
android.widget.TextView
android.text.Spannable
android.view.MotionEvent)

________________CLASS________________


public abstract class android.text.method.MetaKeyKeyListener extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.Object ALT

private static final java.lang.Object CAP

private static final int LOCKED

public static final int META_ALT_LOCKED

public static final int META_ALT_ON

public static final int META_CAP_LOCKED

public static final int META_SHIFT_ON

public static final int META_SYM_LOCKED

public static final int META_SYM_ON

private static final int PRESSED

private static final int RELEASED

private static final java.lang.Object SYM

private static final int USED
----------------METHODS----------------

static void <clinit>()

public void <init>()

private static void adjust(
android.text.Spannable
java.lang.Object)

public static void adjustMetaAfterKeypress(
android.text.Spannable)

private static int getActive(
java.lang.CharSequence
java.lang.Object
int
int)

public static final int getMetaState(
java.lang.CharSequence)

public static final int getMetaState(
java.lang.CharSequence
int)

public static boolean isMetaTracker(
java.lang.CharSequence
java.lang.Object)

private void press(
android.text.Editable
java.lang.Object)

private void release(
android.text.Editable
java.lang.Object)

private static void resetLock(
android.text.Spannable
java.lang.Object)

protected static void resetLockedMeta(
android.text.Spannable)

public static void resetMetaState(
android.text.Spannable)

public boolean onKeyDown(
android.view.View
android.text.Editable
int
android.view.KeyEvent)

public boolean onKeyUp(
android.view.View
android.text.Editable
int
android.view.KeyEvent)

________________CLASS________________


public abstract interface class android.text.method.KeyListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onKeyDown(
android.view.View
android.text.Editable
int
android.view.KeyEvent)

public abstract boolean onKeyUp(
android.view.View
android.text.Editable
int
android.view.KeyEvent)

________________CLASS________________


public abstract class android.text.method.BaseKeyListener extends android.text.method.MetaKeyKeyListener implements android.text.method.KeyListener

----------------FIELDS----------------

static final java.lang.Object OLD_SEL_START
----------------METHODS----------------

static void <clinit>()

public void <init>()

private boolean altBackspace(
android.view.View
android.text.Editable
int
android.view.KeyEvent)

public boolean backspace(
android.view.View
android.text.Editable
int
android.view.KeyEvent)

public boolean onKeyDown(
android.view.View
android.text.Editable
int
android.view.KeyEvent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/method/CharacterPickerDialog; )
@dalvik.annotation.InnerClass (accessFlags =2 name =OptionsAdapter )
 class android.text.method.CharacterPickerDialog$OptionsAdapter extends android.widget.BaseAdapter

----------------FIELDS----------------

private android.content.Context mContext

final android.text.method.CharacterPickerDialog this$0
----------------METHODS----------------

public void <init>(
android.text.method.CharacterPickerDialog
android.content.Context)

public final int getCount()

public final java.lang.Object getItem(
int)

public final long getItemId(
int)

public android.view.View getView(
int
android.view.View
android.view.ViewGroup)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/method/CharacterPickerDialog$OptionsAdapter; )
public class android.text.method.CharacterPickerDialog extends android.app.Dialog implements android.widget.AdapterView$OnItemClickListener, android.view.View$OnClickListener

----------------FIELDS----------------

private android.view.LayoutInflater mInflater

private boolean mInsert

private java.lang.String mOptions

private android.text.Editable mText

private android.view.View mView
----------------METHODS----------------

public void <init>(
android.content.Context
android.view.View
android.text.Editable
java.lang.String
boolean)

static android.view.LayoutInflater access$000(
android.text.method.CharacterPickerDialog)

static java.lang.String access$100(
android.text.method.CharacterPickerDialog)

public void onClick(
android.view.View)

protected void onCreate(
android.os.Bundle)

public void onItemClick(
android.widget.AdapterView
android.view.View
int
long)

________________CLASS________________


public abstract class android.text.method.NumberKeyListener extends android.text.method.BaseKeyListener implements android.text.InputFilter

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

protected static boolean ok(
char[]
char)

public java.lang.CharSequence filter(
java.lang.CharSequence
int
int
android.text.Spanned
int
int)

protected abstract char[] getAcceptedChars()

protected int lookup(
android.view.KeyEvent
android.text.Spannable)

public boolean onKeyDown(
android.view.View
android.text.Editable
int
android.view.KeyEvent)

________________CLASS________________


public class android.text.method.DateKeyListener extends android.text.method.NumberKeyListener

----------------FIELDS----------------

public static final char[] CHARACTERS

private static android.text.method.DateKeyListener sInstance
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.text.method.DateKeyListener getInstance()

protected char[] getAcceptedChars()

________________CLASS________________


public class android.text.method.DateTimeKeyListener extends android.text.method.NumberKeyListener

----------------FIELDS----------------

public static final char[] CHARACTERS

private static android.text.method.DateTimeKeyListener sInstance
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.text.method.DateTimeKeyListener getInstance()

protected char[] getAcceptedChars()

________________CLASS________________


public class android.text.method.DialerKeyListener extends android.text.method.NumberKeyListener

----------------FIELDS----------------

public static final char[] CHARACTERS

private static android.text.method.DialerKeyListener sInstance
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.text.method.DialerKeyListener getInstance()

protected char[] getAcceptedChars()

protected int lookup(
android.view.KeyEvent
android.text.Spannable)

________________CLASS________________


public class android.text.method.DigitsKeyListener extends android.text.method.NumberKeyListener

----------------FIELDS----------------

private static final char[][] CHARACTERS

private static final int DECIMAL

private static final int SIGN

private static android.text.method.DigitsKeyListener[] sInstance

private char[] mAccepted

private boolean mDecimal

private boolean mSign
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
boolean
boolean)

public static android.text.method.DigitsKeyListener getInstance()

public static android.text.method.DigitsKeyListener getInstance(
java.lang.String)

public static android.text.method.DigitsKeyListener getInstance(
boolean
boolean)

public java.lang.CharSequence filter(
java.lang.CharSequence
int
int
android.text.Spanned
int
int)

protected char[] getAcceptedChars()

________________CLASS________________


public abstract interface class android.text.method.TransformationMethod extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.lang.CharSequence getTransformation(
java.lang.CharSequence
android.view.View)

public abstract void onFocusChanged(
android.view.View
java.lang.CharSequence
boolean
int
android.graphics.Rect)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;Landroid/text/method/ReplacementTransformationMethod$ReplacementCharSequence; )
public abstract class android.text.method.ReplacementTransformationMethod extends java.lang.Object implements android.text.method.TransformationMethod

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

protected abstract char[] getOriginal()

protected abstract char[] getReplacement()

public java.lang.CharSequence getTransformation(
java.lang.CharSequence
android.view.View)

public void onFocusChanged(
android.view.View
java.lang.CharSequence
boolean
int
android.graphics.Rect)

________________CLASS________________


public class android.text.method.HideReturnsTransformationMethod extends android.text.method.ReplacementTransformationMethod

----------------FIELDS----------------

private static char[] ORIGINAL

private static char[] REPLACEMENT

private static android.text.method.HideReturnsTransformationMethod sInstance
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.text.method.HideReturnsTransformationMethod getInstance()

protected char[] getOriginal()

protected char[] getReplacement()

________________CLASS________________


public class android.text.method.ScrollingMovementMethod extends java.lang.Object implements android.text.method.MovementMethod

----------------FIELDS----------------

private static android.text.method.ScrollingMovementMethod sInstance
----------------METHODS----------------

public void <init>()

public static android.text.method.MovementMethod getInstance()

public boolean canSelectArbitrarily()

protected boolean down(
android.widget.TextView
android.text.Spannable)

public void initialize(
android.widget.TextView
android.text.Spannable)

protected boolean left(
android.widget.TextView
android.text.Spannable)

public boolean onKeyDown(
android.widget.TextView
android.text.Spannable
int
android.view.KeyEvent)

public boolean onKeyUp(
android.widget.TextView
android.text.Spannable
int
android.view.KeyEvent)

public void onTakeFocus(
android.widget.TextView
android.text.Spannable
int)

public boolean onTouchEvent(
android.widget.TextView
android.text.Spannable
android.view.MotionEvent)

public boolean onTrackballEvent(
android.widget.TextView
android.text.Spannable
android.view.MotionEvent)

protected boolean right(
android.widget.TextView
android.text.Spannable)

protected boolean up(
android.widget.TextView
android.text.Spannable)

________________CLASS________________


public class android.text.method.LinkMovementMethod extends android.text.method.ScrollingMovementMethod

----------------FIELDS----------------

private static final int CLICK

private static final int DOWN

private static java.lang.Object FROM_BELOW

private static final int UP

private static android.text.method.LinkMovementMethod sInstance
----------------METHODS----------------

static void <clinit>()

public void <init>()

private boolean action(
int
android.widget.TextView
android.text.Spannable)

public static android.text.method.MovementMethod getInstance()

protected boolean down(
android.widget.TextView
android.text.Spannable)

public void initialize(
android.widget.TextView
android.text.Spannable)

protected boolean left(
android.widget.TextView
android.text.Spannable)

public boolean onKeyDown(
android.widget.TextView
android.text.Spannable
int
android.view.KeyEvent)

public boolean onKeyUp(
android.widget.TextView
android.text.Spannable
int
android.view.KeyEvent)

public void onTakeFocus(
android.widget.TextView
android.text.Spannable
int)

public boolean onTouchEvent(
android.widget.TextView
android.text.Spannable
android.view.MotionEvent)

protected boolean right(
android.widget.TextView
android.text.Spannable)

protected boolean up(
android.widget.TextView
android.text.Spannable)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =Timeout )
@dalvik.annotation.EnclosingClass (value =Landroid/text/method/MultiTapKeyListener; )
 class android.text.method.MultiTapKeyListener$Timeout extends android.os.Handler implements java.lang.Runnable

----------------FIELDS----------------

private android.text.Editable mBuffer

final android.text.method.MultiTapKeyListener this$0
----------------METHODS----------------

public void <init>(
android.text.method.MultiTapKeyListener
android.text.Editable)

static android.text.Editable access$002(
android.text.method.MultiTapKeyListener$Timeout
android.text.Editable)

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/method/MultiTapKeyListener$Timeout; )
public class android.text.method.MultiTapKeyListener extends android.text.method.BaseKeyListener implements android.text.SpanWatcher

----------------FIELDS----------------

private static android.text.method.MultiTapKeyListener[] sInstance
@dalvik.annotation.Signature (value =Landroid/util/SparseArray<Ljava/lang/String;>; )
private static final android.util.SparseArray sRecs

private boolean mAutoText

private android.text.method.TextKeyListener$Capitalize mCapitalize
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.text.method.TextKeyListener$Capitalize
boolean)

public static android.text.method.MultiTapKeyListener getInstance(
boolean
android.text.method.TextKeyListener$Capitalize)

private static void removeTimeouts(
android.text.Spannable)

public boolean onKeyDown(
android.view.View
android.text.Editable
int
android.view.KeyEvent)

public void onSpanAdded(
android.text.Spannable
java.lang.Object
int
int)

public void onSpanChanged(
android.text.Spannable
java.lang.Object
int
int
int
int)

public void onSpanRemoved(
android.text.Spannable
java.lang.Object
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =PasswordCharSequence )
@dalvik.annotation.EnclosingClass (value =Landroid/text/method/PasswordTransformationMethod; )
 class android.text.method.PasswordTransformationMethod$PasswordCharSequence extends java.lang.Object implements java.lang.CharSequence, android.text.GetChars

----------------FIELDS----------------

private java.lang.CharSequence mSource
----------------METHODS----------------

public void <init>(
java.lang.CharSequence)

public char charAt(
int)

public void getChars(
int
int
char[]
int)

public int length()

public java.lang.CharSequence subSequence(
int
int)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =ViewReference )
@dalvik.annotation.EnclosingClass (value =Landroid/text/method/PasswordTransformationMethod; )
@dalvik.annotation.Signature (value =Ljava/lang/ref/WeakReference<Landroid/view/View;>; )
 class android.text.method.PasswordTransformationMethod$ViewReference extends java.lang.ref.WeakReference

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.view.View)

________________CLASS________________


public abstract interface class android.text.style.UpdateLayout extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Visible )
@dalvik.annotation.EnclosingClass (value =Landroid/text/method/PasswordTransformationMethod; )
 class android.text.method.PasswordTransformationMethod$Visible extends android.os.Handler implements android.text.style.UpdateLayout, java.lang.Runnable

----------------FIELDS----------------

private android.text.Spannable mText

private android.text.method.PasswordTransformationMethod mTransformer
----------------METHODS----------------

public void <init>(
android.text.Spannable
android.text.method.PasswordTransformationMethod)

static android.text.method.PasswordTransformationMethod access$000(
android.text.method.PasswordTransformationMethod$Visible)

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/method/PasswordTransformationMethod$ViewReference;Landroid/text/method/PasswordTransformationMethod$Visible;Landroid/text/method/PasswordTransformationMethod$PasswordCharSequence; )
public class android.text.method.PasswordTransformationMethod extends java.lang.Object implements android.text.method.TransformationMethod, android.text.TextWatcher

----------------FIELDS----------------

private static char DOT

private static android.text.method.PasswordTransformationMethod sInstance
----------------METHODS----------------

static void <clinit>()

public void <init>()

static char access$100()

public static android.text.method.PasswordTransformationMethod getInstance()

public void afterTextChanged(
android.text.Editable)

public void beforeTextChanged(
java.lang.CharSequence
int
int
int)

public java.lang.CharSequence getTransformation(
java.lang.CharSequence
android.view.View)

public void onFocusChanged(
android.view.View
java.lang.CharSequence
boolean
int
android.graphics.Rect)

public void onTextChanged(
java.lang.CharSequence
int
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =Replaced )
@dalvik.annotation.EnclosingClass (value =Landroid/text/method/QwertyKeyListener; )
 class android.text.method.QwertyKeyListener$Replaced extends java.lang.Object

----------------FIELDS----------------

private char[] mText
----------------METHODS----------------

public void <init>(
char[])

static char[] access$000(
android.text.method.QwertyKeyListener$Replaced)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/method/QwertyKeyListener$Replaced; )
public class android.text.method.QwertyKeyListener extends android.text.method.BaseKeyListener

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/util/SparseArray<Ljava/lang/String;>; )
private static android.util.SparseArray PICKER_SETS

private static android.text.method.QwertyKeyListener[] sInstance

private android.text.method.TextKeyListener$Capitalize mAutoCap

private boolean mAutoText
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.text.method.TextKeyListener$Capitalize
boolean)

public static android.text.method.QwertyKeyListener getInstance(
boolean
android.text.method.TextKeyListener$Capitalize)

private java.lang.String getReplacement(
java.lang.CharSequence
int
int
android.view.View)

public static void markAsReplaced(
android.text.Spannable
int
int
java.lang.String)

private boolean showCharacterPicker(
android.view.View
android.text.Editable
char
boolean
int)

private static java.lang.String toTitleCase(
java.lang.String)

public boolean onKeyDown(
android.view.View
android.text.Editable
int
android.view.KeyEvent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/method/ReplacementTransformationMethod; )
@dalvik.annotation.InnerClass (accessFlags =10 name =ReplacementCharSequence )
 class android.text.method.ReplacementTransformationMethod$ReplacementCharSequence extends java.lang.Object implements java.lang.CharSequence, android.text.GetChars

----------------FIELDS----------------

private char[] mOriginal

private char[] mReplacement

private java.lang.CharSequence mSource
----------------METHODS----------------

public void <init>(
java.lang.CharSequence
char[]
char[])

public char charAt(
int)

public void getChars(
int
int
char[]
int)

public int length()

public java.lang.CharSequence subSequence(
int
int)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/method/ReplacementTransformationMethod; )
@dalvik.annotation.InnerClass (accessFlags =10 name =SpannedReplacementCharSequence )
 class android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence extends android.text.method.ReplacementTransformationMethod$ReplacementCharSequence implements android.text.Spanned

----------------FIELDS----------------

private android.text.Spanned mSpanned
----------------METHODS----------------

public void <init>(
android.text.Spanned
char[]
char[])

public int getSpanEnd(
java.lang.Object)

public int getSpanFlags(
java.lang.Object)

public int getSpanStart(
java.lang.Object)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(IILjava/lang/Class<TT;>;)[TT; )
public java.lang.Object[] getSpans(
int
int
java.lang.Class)

public int nextSpanTransition(
int
int
java.lang.Class)

public java.lang.CharSequence subSequence(
int
int)

________________CLASS________________


public class android.text.method.SingleLineTransformationMethod extends android.text.method.ReplacementTransformationMethod

----------------FIELDS----------------

private static char[] ORIGINAL

private static char[] REPLACEMENT

private static android.text.method.SingleLineTransformationMethod sInstance
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.text.method.SingleLineTransformationMethod getInstance()

protected char[] getOriginal()

protected char[] getReplacement()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/text/method/TextKeyListener$Capitalize;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Capitalize )
@dalvik.annotation.EnclosingClass (value =Landroid/text/method/TextKeyListener; )
public final class android.text.method.TextKeyListener$Capitalize extends java.lang.Enum

----------------FIELDS----------------

private static final android.text.method.TextKeyListener$Capitalize[] $VALUES

public static final android.text.method.TextKeyListener$Capitalize CHARACTERS

public static final android.text.method.TextKeyListener$Capitalize NONE

public static final android.text.method.TextKeyListener$Capitalize SENTENCES

public static final android.text.method.TextKeyListener$Capitalize WORDS
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.text.method.TextKeyListener$Capitalize valueOf(
java.lang.String)

public static android.text.method.TextKeyListener$Capitalize[] values()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/method/TextKeyListener; )
@dalvik.annotation.InnerClass (accessFlags =10 name =NullKeyListener )
 class android.text.method.TextKeyListener$NullKeyListener extends java.lang.Object implements android.text.method.KeyListener

----------------FIELDS----------------

private static android.text.method.TextKeyListener$NullKeyListener sInstance
----------------METHODS----------------

private void <init>()

public static android.text.method.TextKeyListener$NullKeyListener getInstance()

public boolean onKeyDown(
android.view.View
android.text.Editable
int
android.view.KeyEvent)

public boolean onKeyUp(
android.view.View
android.text.Editable
int
android.view.KeyEvent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =SettingsObserver )
@dalvik.annotation.EnclosingClass (value =Landroid/text/method/TextKeyListener; )
 class android.text.method.TextKeyListener$SettingsObserver extends android.database.ContentObserver

----------------FIELDS----------------

final android.text.method.TextKeyListener this$0
----------------METHODS----------------

public void <init>(
android.text.method.TextKeyListener)

public void onChange(
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/method/TextKeyListener$SettingsObserver;Landroid/text/method/TextKeyListener$NullKeyListener;Landroid/text/method/TextKeyListener$Capitalize; )
public class android.text.method.TextKeyListener extends android.text.method.BaseKeyListener implements android.text.SpanWatcher

----------------FIELDS----------------

static final java.lang.Object ACTIVE

static final int AUTO_CAP

static final int AUTO_PERIOD

static final int AUTO_TEXT

static final java.lang.Object CAPPED

static final java.lang.Object INHIBIT_REPLACEMENT

static final java.lang.Object LAST_TYPED

static final int SHOW_PASSWORD

private static android.text.method.TextKeyListener[] sInstance

private android.text.method.TextKeyListener$Capitalize mAutoCap

private boolean mAutoText

private android.text.method.TextKeyListener$SettingsObserver mObserver

private int mPrefs

private boolean mPrefsInited
@dalvik.annotation.Signature (value =Ljava/lang/ref/WeakReference<Landroid/content/ContentResolver;>; )
private java.lang.ref.WeakReference mResolver
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.text.method.TextKeyListener$Capitalize
boolean)

static java.lang.ref.WeakReference access$000(
android.text.method.TextKeyListener)

static boolean access$102(
android.text.method.TextKeyListener
boolean)

static void access$200(
android.text.method.TextKeyListener
android.content.ContentResolver)

public static void clear(
android.text.Editable)

public static android.text.method.TextKeyListener getInstance()

public static android.text.method.TextKeyListener getInstance(
boolean
android.text.method.TextKeyListener$Capitalize)

private android.text.method.KeyListener getKeyListener(
android.view.KeyEvent)

private void initPrefs(
android.content.Context)

public static boolean shouldCap(
android.text.method.TextKeyListener$Capitalize
java.lang.CharSequence
int)

private void updatePrefs(
android.content.ContentResolver)

 int getPrefs(
android.content.Context)

public boolean onKeyDown(
android.view.View
android.text.Editable
int
android.view.KeyEvent)

public boolean onKeyUp(
android.view.View
android.text.Editable
int
android.view.KeyEvent)

public void onSpanAdded(
android.text.Spannable
java.lang.Object
int
int)

public void onSpanChanged(
android.text.Spannable
java.lang.Object
int
int
int
int)

public void onSpanRemoved(
android.text.Spannable
java.lang.Object
int
int)

public void release()

________________CLASS________________


public class android.text.method.TimeKeyListener extends android.text.method.NumberKeyListener

----------------FIELDS----------------

public static final char[] CHARACTERS

private static android.text.method.TimeKeyListener sInstance
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.text.method.TimeKeyListener getInstance()

protected char[] getAcceptedChars()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =DragState )
@dalvik.annotation.EnclosingClass (value =Landroid/text/method/Touch; )
 class android.text.method.Touch$DragState extends java.lang.Object

----------------FIELDS----------------

public boolean mFarEnough

public boolean mUsed

public float mX

public float mY
----------------METHODS----------------

public void <init>(
float
float)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/method/Touch$DragState; )
public class android.text.method.Touch extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

public static boolean onTouchEvent(
android.widget.TextView
android.text.Spannable
android.view.MotionEvent)

public static void scrollTo(
android.widget.TextView
android.text.Layout
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/style/CharacterStyle$Passthrough; )
public abstract class android.text.style.CharacterStyle extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static android.text.style.CharacterStyle wrap(
android.text.style.CharacterStyle)

public android.text.style.CharacterStyle getUnderlying()

public abstract void updateDrawState(
android.text.TextPaint)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/style/MetricAffectingSpan$Passthrough; )
public abstract class android.text.style.MetricAffectingSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateLayout

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public volatile android.text.style.CharacterStyle getUnderlying()

public android.text.style.MetricAffectingSpan getUnderlying()

public abstract void updateMeasureState(
android.text.TextPaint)

________________CLASS________________


public class android.text.style.AbsoluteSizeSpan extends android.text.style.MetricAffectingSpan

----------------FIELDS----------------

private int mSize
----------------METHODS----------------

public void <init>(
int)

public int getSize()

public void updateDrawState(
android.text.TextPaint)

public void updateMeasureState(
android.text.TextPaint)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/style/AlignmentSpan$Standard; )
public abstract interface class android.text.style.AlignmentSpan extends java.lang.Object implements android.text.style.ParagraphStyle

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.text.Layout$Alignment getAlignment()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Standard )
@dalvik.annotation.EnclosingClass (value =Landroid/text/style/AlignmentSpan; )
public class android.text.style.AlignmentSpan$Standard extends java.lang.Object implements android.text.style.AlignmentSpan

----------------FIELDS----------------

private android.text.Layout$Alignment mAlignment
----------------METHODS----------------

public void <init>(
android.text.Layout$Alignment)

public android.text.Layout$Alignment getAlignment()

________________CLASS________________


public class android.text.style.BackgroundColorSpan extends android.text.style.CharacterStyle

----------------FIELDS----------------

private int mColor
----------------METHODS----------------

public void <init>(
int)

public int getBackgroundColor()

public void updateDrawState(
android.text.TextPaint)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/style/LeadingMarginSpan$Standard; )
public abstract interface class android.text.style.LeadingMarginSpan extends java.lang.Object implements android.text.style.ParagraphStyle

----------------FIELDS----------------
----------------METHODS----------------

public abstract void drawLeadingMargin(
android.graphics.Canvas
android.graphics.Paint
int
int
int
int
int
java.lang.CharSequence
int
int
boolean
android.text.Layout)

public abstract int getLeadingMargin(
boolean)

________________CLASS________________


public class android.text.style.BulletSpan extends java.lang.Object implements android.text.style.LeadingMarginSpan

----------------FIELDS----------------

private static final int BULLET_RADIUS

public static final int STANDARD_GAP_WIDTH

private int mColor

private int mGapWidth

private boolean mWantColor
----------------METHODS----------------

public void <init>()

public void <init>(
int)

public void <init>(
int
int)

public void drawLeadingMargin(
android.graphics.Canvas
android.graphics.Paint
int
int
int
int
int
java.lang.CharSequence
int
int
boolean
android.text.Layout)

public int getLeadingMargin(
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/style/CharacterStyle; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Passthrough )
 class android.text.style.CharacterStyle$Passthrough extends android.text.style.CharacterStyle

----------------FIELDS----------------

private android.text.style.CharacterStyle mStyle
----------------METHODS----------------

public void <init>(
android.text.style.CharacterStyle)

public android.text.style.CharacterStyle getUnderlying()

public void updateDrawState(
android.text.TextPaint)

________________CLASS________________


public abstract class android.text.style.ClickableSpan extends android.text.style.CharacterStyle

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public abstract void onClick(
android.view.View)

public void updateDrawState(
android.text.TextPaint)

________________CLASS________________


public class android.text.style.DrawableMarginSpan extends java.lang.Object implements android.text.style.LeadingMarginSpan, android.text.style.LineHeightSpan

----------------FIELDS----------------

private android.graphics.drawable.Drawable mDrawable

private int mPad
----------------METHODS----------------

public void <init>(
android.graphics.drawable.Drawable)

public void <init>(
android.graphics.drawable.Drawable
int)

public void chooseHeight(
java.lang.CharSequence
int
int
int
int
android.graphics.Paint$FontMetricsInt)

public void drawLeadingMargin(
android.graphics.Canvas
android.graphics.Paint
int
int
int
int
int
java.lang.CharSequence
int
int
boolean
android.text.Layout)

public int getLeadingMargin(
boolean)

________________CLASS________________


public abstract class android.text.style.ReplacementSpan extends android.text.style.MetricAffectingSpan

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public abstract void draw(
android.graphics.Canvas
java.lang.CharSequence
int
int
float
int
int
int
android.graphics.Paint)

public abstract int getSize(
android.graphics.Paint
java.lang.CharSequence
int
int
android.graphics.Paint$FontMetricsInt)

public void updateDrawState(
android.text.TextPaint)

public void updateMeasureState(
android.text.TextPaint)

________________CLASS________________


public abstract class android.text.style.DynamicDrawableSpan extends android.text.style.ReplacementSpan

----------------FIELDS----------------

private java.lang.ref.WeakReference mDrawableRef
----------------METHODS----------------

public void <init>()

private android.graphics.drawable.Drawable getCachedDrawable()

public void draw(
android.graphics.Canvas
java.lang.CharSequence
int
int
float
int
int
int
android.graphics.Paint)

public abstract android.graphics.drawable.Drawable getDrawable()

public int getSize(
android.graphics.Paint
java.lang.CharSequence
int
int
android.graphics.Paint$FontMetricsInt)

________________CLASS________________


public class android.text.style.ForegroundColorSpan extends android.text.style.CharacterStyle

----------------FIELDS----------------

private int mColor
----------------METHODS----------------

public void <init>(
int)

public int getForegroundColor()

public void updateDrawState(
android.text.TextPaint)

________________CLASS________________


public class android.text.style.IconMarginSpan extends java.lang.Object implements android.text.style.LeadingMarginSpan, android.text.style.LineHeightSpan

----------------FIELDS----------------

private android.graphics.Bitmap mBitmap

private int mPad
----------------METHODS----------------

public void <init>(
android.graphics.Bitmap)

public void <init>(
android.graphics.Bitmap
int)

public void chooseHeight(
java.lang.CharSequence
int
int
int
int
android.graphics.Paint$FontMetricsInt)

public void drawLeadingMargin(
android.graphics.Canvas
android.graphics.Paint
int
int
int
int
int
java.lang.CharSequence
int
int
boolean
android.text.Layout)

public int getLeadingMargin(
boolean)

________________CLASS________________


public class android.text.style.ImageSpan extends android.text.style.DynamicDrawableSpan

----------------FIELDS----------------

private android.net.Uri mContentUri

private android.content.Context mContext

private android.graphics.drawable.Drawable mDrawable

private int mResourceId

private java.lang.String mSource
----------------METHODS----------------

public void <init>(
android.content.Context
int)

public void <init>(
android.content.Context
android.net.Uri)

public void <init>(
android.graphics.Bitmap)

public void <init>(
android.graphics.drawable.Drawable)

public void <init>(
android.graphics.drawable.Drawable
java.lang.String)

public android.graphics.drawable.Drawable getDrawable()

public java.lang.String getSource()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Standard )
@dalvik.annotation.EnclosingClass (value =Landroid/text/style/LeadingMarginSpan; )
public class android.text.style.LeadingMarginSpan$Standard extends java.lang.Object implements android.text.style.LeadingMarginSpan

----------------FIELDS----------------

private int mFirst

private int mRest
----------------METHODS----------------

public void <init>(
int)

public void <init>(
int
int)

public void drawLeadingMargin(
android.graphics.Canvas
android.graphics.Paint
int
int
int
int
int
java.lang.CharSequence
int
int
boolean
android.text.Layout)

public int getLeadingMargin(
boolean)

________________CLASS________________


public abstract interface class android.text.style.LineBackgroundSpan extends java.lang.Object implements android.text.style.ParagraphStyle

----------------FIELDS----------------
----------------METHODS----------------

public abstract void drawBackground(
android.graphics.Canvas
android.graphics.Paint
int
int
int
int
int
java.lang.CharSequence
int
int
int)

________________CLASS________________


public class android.text.style.MaskFilterSpan extends android.text.style.CharacterStyle

----------------FIELDS----------------

private android.graphics.MaskFilter mFilter
----------------METHODS----------------

public void <init>(
android.graphics.MaskFilter)

public android.graphics.MaskFilter getMaskFilter()

public void updateDrawState(
android.text.TextPaint)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =Passthrough )
@dalvik.annotation.EnclosingClass (value =Landroid/text/style/MetricAffectingSpan; )
 class android.text.style.MetricAffectingSpan$Passthrough extends android.text.style.MetricAffectingSpan

----------------FIELDS----------------

private android.text.style.MetricAffectingSpan mStyle
----------------METHODS----------------

public void <init>(
android.text.style.MetricAffectingSpan)

public volatile android.text.style.CharacterStyle getUnderlying()

public android.text.style.MetricAffectingSpan getUnderlying()

public void updateDrawState(
android.text.TextPaint)

public void updateMeasureState(
android.text.TextPaint)

________________CLASS________________


public class android.text.style.QuoteSpan extends java.lang.Object implements android.text.style.LeadingMarginSpan

----------------FIELDS----------------

private static final int GAP_WIDTH

private static final int STRIPE_WIDTH

private int mColor
----------------METHODS----------------

public void <init>()

public void <init>(
int)

public void drawLeadingMargin(
android.graphics.Canvas
android.graphics.Paint
int
int
int
int
int
java.lang.CharSequence
int
int
boolean
android.text.Layout)

public int getColor()

public int getLeadingMargin(
boolean)

________________CLASS________________


public class android.text.style.RasterizerSpan extends android.text.style.CharacterStyle

----------------FIELDS----------------

private android.graphics.Rasterizer mRasterizer
----------------METHODS----------------

public void <init>(
android.graphics.Rasterizer)

public android.graphics.Rasterizer getRasterizer()

public void updateDrawState(
android.text.TextPaint)

________________CLASS________________


public class android.text.style.RelativeSizeSpan extends android.text.style.MetricAffectingSpan

----------------FIELDS----------------

private float mProportion
----------------METHODS----------------

public void <init>(
float)

public float getSizeChange()

public void updateDrawState(
android.text.TextPaint)

public void updateMeasureState(
android.text.TextPaint)

________________CLASS________________


public class android.text.style.ScaleXSpan extends android.text.style.MetricAffectingSpan

----------------FIELDS----------------

private float mProportion
----------------METHODS----------------

public void <init>(
float)

public float getScaleX()

public void updateDrawState(
android.text.TextPaint)

public void updateMeasureState(
android.text.TextPaint)

________________CLASS________________


public class android.text.style.StrikethroughSpan extends android.text.style.CharacterStyle

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void updateDrawState(
android.text.TextPaint)

________________CLASS________________


public class android.text.style.StyleSpan extends android.text.style.MetricAffectingSpan

----------------FIELDS----------------

private int mStyle
----------------METHODS----------------

public void <init>(
int)

private static void apply(
android.graphics.Paint
int)

public int getStyle()

public void updateDrawState(
android.text.TextPaint)

public void updateMeasureState(
android.text.TextPaint)

________________CLASS________________


public class android.text.style.SubscriptSpan extends android.text.style.MetricAffectingSpan

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void updateDrawState(
android.text.TextPaint)

public void updateMeasureState(
android.text.TextPaint)

________________CLASS________________


public class android.text.style.SuperscriptSpan extends android.text.style.MetricAffectingSpan

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void updateDrawState(
android.text.TextPaint)

public void updateMeasureState(
android.text.TextPaint)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/style/TabStopSpan$Standard; )
public abstract interface class android.text.style.TabStopSpan extends java.lang.Object implements android.text.style.ParagraphStyle

----------------FIELDS----------------
----------------METHODS----------------

public abstract int getTabStop()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Standard )
@dalvik.annotation.EnclosingClass (value =Landroid/text/style/TabStopSpan; )
public class android.text.style.TabStopSpan$Standard extends java.lang.Object implements android.text.style.TabStopSpan

----------------FIELDS----------------

private int mTab
----------------METHODS----------------

public void <init>(
int)

public int getTabStop()

________________CLASS________________


public class android.text.style.TextAppearanceSpan extends android.text.style.MetricAffectingSpan

----------------FIELDS----------------

private int mStyle

private android.content.res.ColorStateList mTextColor

private android.content.res.ColorStateList mTextColorLink

private int mTextSize

private java.lang.String mTypeface
----------------METHODS----------------

public void <init>(
android.content.Context
int)

public void <init>(
android.content.Context
int
int)

public void <init>(
java.lang.String
int
int
android.content.res.ColorStateList
android.content.res.ColorStateList)

public java.lang.String getFamily()

public android.content.res.ColorStateList getLinkTextColor()

public android.content.res.ColorStateList getTextColor()

public int getTextSize()

public int getTextStyle()

public void updateDrawState(
android.text.TextPaint)

public void updateMeasureState(
android.text.TextPaint)

________________CLASS________________


public class android.text.style.TypefaceSpan extends android.text.style.MetricAffectingSpan

----------------FIELDS----------------

private java.lang.String mFamily
----------------METHODS----------------

public void <init>(
java.lang.String)

private static void apply(
android.graphics.Paint
java.lang.String)

public java.lang.String getFamily()

public void updateDrawState(
android.text.TextPaint)

public void updateMeasureState(
android.text.TextPaint)

________________CLASS________________


public class android.text.style.URLSpan extends android.text.style.ClickableSpan

----------------FIELDS----------------

private java.lang.String mURL
----------------METHODS----------------

public void <init>(
java.lang.String)

public java.lang.String getURL()

public void onClick(
android.view.View)

________________CLASS________________


public class android.text.style.UnderlineSpan extends android.text.style.CharacterStyle

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void updateDrawState(
android.text.TextPaint)

________________CLASS________________


 class android.text.util.LinkSpec extends java.lang.Object

----------------FIELDS----------------

 int end

 int start

 java.lang.String url
----------------METHODS----------------

 void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/util/Linkify; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =MatchFilter )
public abstract interface class android.text.util.Linkify$MatchFilter extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean acceptMatch(
java.lang.CharSequence
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/text/util/Linkify; )
final class android.text.util.Linkify$1 extends java.lang.Object implements android.text.util.Linkify$MatchFilter

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public final boolean acceptMatch(
java.lang.CharSequence
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/util/Linkify; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.text.util.Linkify$2 extends java.lang.Object implements android.text.util.Linkify$MatchFilter

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public final boolean acceptMatch(
java.lang.CharSequence
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =TransformFilter )
@dalvik.annotation.EnclosingClass (value =Landroid/text/util/Linkify; )
public abstract interface class android.text.util.Linkify$TransformFilter extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.lang.String transformUrl(
java.util.regex.Matcher
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/text/util/Linkify; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.text.util.Linkify$3 extends java.lang.Object implements android.text.util.Linkify$TransformFilter

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public final java.lang.String transformUrl(
java.util.regex.Matcher
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Ljava/util/Comparator<Landroid/text/util/LinkSpec;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.text.util.Linkify$4 extends java.lang.Object implements java.util.Comparator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public final int compare(
android.text.util.LinkSpec
android.text.util.LinkSpec)

public volatile int compare(
java.lang.Object
java.lang.Object)

public final boolean equals(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/text/util/Linkify$TransformFilter;Landroid/text/util/Linkify$MatchFilter; )
public class android.text.util.Linkify extends java.lang.Object

----------------FIELDS----------------

public static final int ALL

public static final int EMAIL_ADDRESSES

public static final int MAP_ADDRESSES

public static final int PHONE_NUMBERS

private static final int PHONE_NUMBER_MINIMUM_DIGITS

public static final int WEB_URLS

public static final android.text.util.Linkify$MatchFilter sPhoneNumberMatchFilter

public static final android.text.util.Linkify$TransformFilter sPhoneNumberTransformFilter

public static final android.text.util.Linkify$MatchFilter sUrlMatchFilter
----------------METHODS----------------

static void <clinit>()

public void <init>()

private static final void addLinkMovementMethod(
android.widget.TextView)

public static final void addLinks(
android.widget.TextView
java.util.regex.Pattern
java.lang.String)

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)

public static final boolean addLinks(
android.text.Spannable
int)

public static final boolean addLinks(
android.text.Spannable
java.util.regex.Pattern
java.lang.String)

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)

public static final boolean addLinks(
android.widget.TextView
int)

private static final void applyLink(
java.lang.String
int
int
android.text.Spannable)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/text/util/LinkSpec;>;Landroid/text/Spannable;Ljava/util/regex/Pattern;[Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)V )
private static final void gatherLinks(
java.util.ArrayList
android.text.Spannable
java.util.regex.Pattern
java.lang.String[]
android.text.util.Linkify$MatchFilter
android.text.util.Linkify$TransformFilter)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/text/util/LinkSpec;>;Landroid/text/Spannable;)V )
private static final void gatherMapLinks(
java.util.ArrayList
android.text.Spannable)

private static final java.lang.String makeUrl(
java.lang.String
java.lang.String[]
java.util.regex.Matcher
android.text.util.Linkify$TransformFilter)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/text/util/LinkSpec;>;)V )
private static final void pruneOverlaps(
java.util.ArrayList)

________________CLASS________________


public class android.text.util.Regex extends java.lang.Object

----------------FIELDS----------------

public static final java.util.regex.Pattern DOMAIN_NAME_PATTERN

public static final java.util.regex.Pattern EMAIL_ADDRESS_PATTERN

public static final java.util.regex.Pattern IP_ADDRESS_PATTERN

public static final java.util.regex.Pattern PHONE_PATTERN

public static final java.util.regex.Pattern TOP_LEVEL_DOMAIN_PATTERN

public static final java.util.regex.Pattern WEB_URL_PATTERN
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static final java.lang.String concatGroups(
java.util.regex.Matcher)

public static final java.lang.String digitsAndPlusOnly(
java.util.regex.Matcher)

________________CLASS________________


public class android.text.util.Rfc822Token extends java.lang.Object

----------------FIELDS----------------

private java.lang.String mAddress

private java.lang.String mComment

private java.lang.String mName
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String
java.lang.String)

public static java.lang.String quoteComment(
java.lang.String)

public static java.lang.String quoteName(
java.lang.String)

public static java.lang.String quoteNameIfNecessary(
java.lang.String)

public java.lang.String getAddress()

public java.lang.String getComment()

public java.lang.String getName()

public void setAddress(
java.lang.String)

public void setComment(
java.lang.String)

public void setName(
java.lang.String)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =Tokenizer )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/MultiAutoCompleteTextView; )
public abstract interface class android.widget.MultiAutoCompleteTextView$Tokenizer extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract int findTokenEnd(
java.lang.CharSequence
int)

public abstract int findTokenStart(
java.lang.CharSequence
int)

public abstract java.lang.CharSequence terminateToken(
java.lang.CharSequence)

________________CLASS________________


public class android.text.util.Rfc822Tokenizer extends java.lang.Object implements android.widget.MultiAutoCompleteTextView$Tokenizer

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

private static void crunch(
java.lang.StringBuilder)

public static android.text.util.Rfc822Token[] tokenize(
java.lang.CharSequence)

public int findTokenEnd(
java.lang.CharSequence
int)

public int findTokenStart(
java.lang.CharSequence
int)

public java.lang.CharSequence terminateToken(
java.lang.CharSequence)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AutoCompleteTextView; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =Validator )
public abstract interface class android.widget.AutoCompleteTextView$Validator extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.lang.CharSequence fixText(
java.lang.CharSequence)

public abstract boolean isValid(
java.lang.CharSequence)

________________CLASS________________


public class android.text.util.Rfc822Validator extends java.lang.Object implements android.widget.AutoCompleteTextView$Validator

----------------FIELDS----------------

private static final java.util.regex.Pattern EMAIL_ADDRESS_PATTERN

private java.lang.String mDomain
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String)

private java.lang.String removeIllegalCharacters(
java.lang.String)

public java.lang.CharSequence fixText(
java.lang.CharSequence)

public boolean isValid(
java.lang.CharSequence)

________________CLASS________________


public final class android.util.Config extends java.lang.Object

----------------FIELDS----------------

public static final boolean DEBUG

public static final boolean LOGD

public static final boolean LOGV

public static final boolean PROFILE

public static final boolean RELEASE
----------------METHODS----------------

public void <init>()

________________CLASS________________


public class android.util.MonthDisplayHelper extends java.lang.Object

----------------FIELDS----------------

private java.util.Calendar mCalendar

private int mNumDaysInMonth

private int mNumDaysInPrevMonth

private int mOffset

private final int mWeekStartDay
----------------METHODS----------------

public void <init>(
int
int)

public void <init>(
int
int
int)

private void recalculate()

public int getColumnOf(
int)

public int getDayAt(
int
int)

public int[] getDigitsForRow(
int)

public int getFirstDayOfMonth()

public int getMonth()

public int getNumberOfDaysInMonth()

public int getOffset()

public int getRowOf(
int)

public int getWeekStartDay()

public int getYear()

public boolean isWithinCurrentMonth(
int
int)

public void nextMonth()

public void previousMonth()

________________CLASS________________


public class android.util.DayOfMonthCursor extends android.util.MonthDisplayHelper

----------------FIELDS----------------

private int mColumn

private int mRow
----------------METHODS----------------

public void <init>(
int
int
int
int)

public boolean down()

public int getSelectedColumn()

public int getSelectedDayOfMonth()

public int getSelectedRow()

public boolean isSelected(
int
int)

public boolean left()

public boolean right()

public void setSelectedDayOfMonth(
int)

public void setSelectedRowColumn(
int
int)

public boolean up()

________________CLASS________________


public class android.util.DebugUtils extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static boolean isObjectSelected(
java.lang.Object)

________________CLASS________________


public class android.util.DisplayMetrics extends java.lang.Object

----------------FIELDS----------------

public float density

public int heightPixels

public float scaledDensity

public int widthPixels

public float xdpi

public float ydpi
----------------METHODS----------------

public void <init>()

public void setTo(
android.util.DisplayMetrics)

public void setToDefaults()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/util/EventLog; )
@dalvik.annotation.InnerClass (accessFlags =25 name =Event )
public final class android.util.EventLog$Event extends java.lang.Object

----------------FIELDS----------------

private static final int DATA_START

private static final int LENGTH_OFFSET

private static final int NANOSECONDS_OFFSET

private static final int PAYLOAD_START

private static final int PROCESS_OFFSET

private static final int SECONDS_OFFSET

private static final int TAG_OFFSET

private static final int THREAD_OFFSET

private final java.nio.ByteBuffer mBuffer
----------------METHODS----------------

public void <init>(
byte[])

private java.lang.Object decodeObject()

public java.lang.Object getData()

public int getProcessId()

public int getTag()

public int getThreadId()

public long getTimeNanos()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =List )
@dalvik.annotation.EnclosingClass (value =Landroid/util/EventLog; )
public final class android.util.EventLog$List extends java.lang.Object

----------------FIELDS----------------

private java.lang.Object[] mItems
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public transient void <init>(
java.lang.Object[])

public final java.lang.Object getItem(
int)

public final byte getNumItems()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/util/EventLog$Event;Landroid/util/EventLog$List; )
public class android.util.EventLog extends java.lang.Object

----------------FIELDS----------------

public static final byte INT

public static final byte LIST

public static final byte LONG

public static final byte STRING
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Signature (value =([ILjava/util/Collection<Landroid/util/EventLog$Event;>;)V )
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public static native void readEvents(
int[]
java.util.Collection)

public static native int writeEvent(
int
int)

public static native int writeEvent(
int
long)

public static native int writeEvent(
int
android.util.EventLog$List)

public static native int writeEvent(
int
java.lang.String)

public static transient int writeEvent(
int
java.lang.Object[])

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/util/EventLogTags; )
@dalvik.annotation.InnerClass (accessFlags =9 name =Description )
public class android.util.EventLogTags$Description extends java.lang.Object

----------------FIELDS----------------

public final java.lang.String mName

public final int mTag
----------------METHODS----------------

 void <init>(
int
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/util/EventLogTags$Description; )
public class android.util.EventLogTags extends java.lang.Object

----------------FIELDS----------------

private static final java.util.regex.Pattern COMMENT_PATTERN

private static final java.lang.String TAG

private static final java.lang.String TAGS_FILE

private static final java.util.regex.Pattern TAG_PATTERN
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Landroid/util/EventLogTags$Description;>; )
private final java.util.HashMap mNameMap
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Landroid/util/EventLogTags$Description;>; )
private final java.util.HashMap mTagMap
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void <init>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void <init>(
java.io.BufferedReader)

public android.util.EventLogTags$Description get(
int)

public android.util.EventLogTags$Description get(
java.lang.String)

________________CLASS________________


public class android.util.FloatMath extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

public static native float ceil(
float)

public static native float cos(
float)

public static native float floor(
float)

public static native float sin(
float)

public static native float sqrt(
float)

________________CLASS________________


public final class android.util.Log extends java.lang.Object

----------------FIELDS----------------

public static final int ASSERT

public static final int DEBUG

public static final int ERROR

public static final int INFO

public static final int VERBOSE

public static final int WARN
----------------METHODS----------------

private void <init>()

public static int d(
java.lang.String
java.lang.String)

public static int d(
java.lang.String
java.lang.String
java.lang.Throwable)

public static int e(
java.lang.String
java.lang.String)

public static int e(
java.lang.String
java.lang.String
java.lang.Throwable)

public static java.lang.String getStackTraceString(
java.lang.Throwable)

public static int i(
java.lang.String
java.lang.String)

public static int i(
java.lang.String
java.lang.String
java.lang.Throwable)

public static native boolean isLoggable(
java.lang.String
int)

public static native int println(
int
java.lang.String
java.lang.String)

public static int v(
java.lang.String
java.lang.String)

public static int v(
java.lang.String
java.lang.String
java.lang.Throwable)

public static int w(
java.lang.String
java.lang.String)

public static int w(
java.lang.String
java.lang.String
java.lang.Throwable)

public static int w(
java.lang.String
java.lang.Throwable)

________________CLASS________________


public abstract interface class android.util.Printer extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void println(
java.lang.String)

________________CLASS________________


public class android.util.LogPrinter extends java.lang.Object implements android.util.Printer

----------------FIELDS----------------

private final int mPriority

private final java.lang.String mTag
----------------METHODS----------------

public void <init>(
int
java.lang.String)

public void println(
java.lang.String)

________________CLASS________________


public class android.util.PrintWriterPrinter extends java.lang.Object implements android.util.Printer

----------------FIELDS----------------

private final java.io.PrintWriter mPW
----------------METHODS----------------

public void <init>(
java.io.PrintWriter)

public void println(
java.lang.String)

________________CLASS________________

@dalvik.annotation.Signature (value =<E:Ljava/lang/Object;>Ljava/lang/Object; )
public class android.util.SparseArray extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.Object DELETED

private boolean mGarbage

private int[] mKeys

private int mSize

private java.lang.Object[] mValues
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
int)

private static int binarySearch(
int[]
int
int
int)

private void checkIntegrity()

private void gc()
@dalvik.annotation.Signature (value =(ITE;)V )
public void append(
int
java.lang.Object)

public void clear()

public void delete(
int)
@dalvik.annotation.Signature (value =(I)TE; )
public java.lang.Object get(
int)
@dalvik.annotation.Signature (value =(ITE;)TE; )
public java.lang.Object get(
int
java.lang.Object)

public int indexOfKey(
int)
@dalvik.annotation.Signature (value =(TE;)I )
public int indexOfValue(
java.lang.Object)

public int keyAt(
int)
@dalvik.annotation.Signature (value =(ITE;)V )
public void put(
int
java.lang.Object)

public void remove(
int)
@dalvik.annotation.Signature (value =(ITE;)V )
public void setValueAt(
int
java.lang.Object)

public int size()
@dalvik.annotation.Signature (value =(I)TE; )
public java.lang.Object valueAt(
int)

________________CLASS________________


public class android.util.SparseBooleanArray extends java.lang.Object

----------------FIELDS----------------

private int[] mKeys

private int mSize

private boolean[] mValues
----------------METHODS----------------

public void <init>()

public void <init>(
int)

private static int binarySearch(
int[]
int
int
int)

private void checkIntegrity()

public void append(
int
boolean)

public void clear()

public void delete(
int)

public boolean get(
int)

public boolean get(
int
boolean)

public int indexOfKey(
int)

public int indexOfValue(
boolean)

public int keyAt(
int)

public void put(
int
boolean)

public int size()

public boolean valueAt(
int)

________________CLASS________________


public class android.util.SparseIntArray extends java.lang.Object

----------------FIELDS----------------

private int[] mKeys

private int mSize

private int[] mValues
----------------METHODS----------------

public void <init>()

public void <init>(
int)

private static int binarySearch(
int[]
int
int
int)

private void checkIntegrity()

public void append(
int
int)

public void clear()

public void delete(
int)

public int get(
int)

public int get(
int
int)

public int indexOfKey(
int)

public int indexOfValue(
int)

public int keyAt(
int)

public void put(
int
int)

public int size()

public int valueAt(
int)

________________CLASS________________


public class android.util.StateSet extends java.lang.Object

----------------FIELDS----------------

public static final int[] WILD_CARD
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static java.lang.String dump(
int[])

public static boolean isWildCard(
int[])

public static boolean stateSetMatches(
int[]
int)

public static boolean stateSetMatches(
int[]
int[])

public static int[] trimStateSet(
int[]
int)

________________CLASS________________


public class android.util.StringBuilderPrinter extends java.lang.Object implements android.util.Printer

----------------FIELDS----------------

private final java.lang.StringBuilder mBuilder
----------------METHODS----------------

public void <init>(
java.lang.StringBuilder)

public void println(
java.lang.String)

________________CLASS________________


public class android.util.TimeFormatException extends java.lang.RuntimeException

----------------FIELDS----------------
----------------METHODS----------------

 void <init>(
java.lang.String)

________________CLASS________________


public class android.util.TimeUtils extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static java.util.TimeZone getTimeZone(
int
boolean
long
java.lang.String)

________________CLASS________________


public class android.util.TimingLogger extends java.lang.Object

----------------FIELDS----------------

private boolean mDisabled

private java.lang.String mLabel
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/lang/String;>; )
 java.util.ArrayList mSplitLabels
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/lang/Long;>; )
 java.util.ArrayList mSplits

private java.lang.String mTag
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String)

public void addSplit(
java.lang.String)

public void dumpToLog()

public void reset()

public void reset(
java.lang.String
java.lang.String)

________________CLASS________________


public class android.util.TypedValue extends java.lang.Object

----------------FIELDS----------------

public static final int COMPLEX_MANTISSA_MASK

public static final int COMPLEX_MANTISSA_SHIFT

public static final int COMPLEX_RADIX_0p23

public static final int COMPLEX_RADIX_16p7

public static final int COMPLEX_RADIX_23p0

public static final int COMPLEX_RADIX_8p15

public static final int COMPLEX_RADIX_MASK

public static final int COMPLEX_RADIX_SHIFT

public static final int COMPLEX_UNIT_DIP

public static final int COMPLEX_UNIT_FRACTION

public static final int COMPLEX_UNIT_FRACTION_PARENT

public static final int COMPLEX_UNIT_IN

public static final int COMPLEX_UNIT_MASK

public static final int COMPLEX_UNIT_MM

public static final int COMPLEX_UNIT_PT

public static final int COMPLEX_UNIT_PX

public static final int COMPLEX_UNIT_SHIFT

public static final int COMPLEX_UNIT_SP

private static final java.lang.String[] DIMENSION_UNIT_STRS

private static final java.lang.String[] FRACTION_UNIT_STRS

private static final float MANTISSA_MULT

private static final float[] RADIX_MULTS

public static final int TYPE_ATTRIBUTE

public static final int TYPE_DIMENSION

public static final int TYPE_FIRST_COLOR_INT

public static final int TYPE_FIRST_INT

public static final int TYPE_FLOAT

public static final int TYPE_FRACTION

public static final int TYPE_INT_BOOLEAN

public static final int TYPE_INT_COLOR_ARGB4

public static final int TYPE_INT_COLOR_ARGB8

public static final int TYPE_INT_COLOR_RGB4

public static final int TYPE_INT_COLOR_RGB8

public static final int TYPE_INT_DEC

public static final int TYPE_INT_HEX

public static final int TYPE_LAST_COLOR_INT

public static final int TYPE_LAST_INT

public static final int TYPE_NULL

public static final int TYPE_REFERENCE

public static final int TYPE_STRING

public int assetCookie

public int changingConfigurations

public int data

public int resourceId

public java.lang.CharSequence string

public int type
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static float applyDimension(
int
float
android.util.DisplayMetrics)

public static final java.lang.String coerceToString(
int
int)

public static float complexToDimension(
int
android.util.DisplayMetrics)

public static float complexToDimensionNoisy(
int
android.util.DisplayMetrics)

public static int complexToDimensionPixelOffset(
int
android.util.DisplayMetrics)

public static int complexToDimensionPixelSize(
int
android.util.DisplayMetrics)

public static float complexToFloat(
int)

public static float complexToFraction(
int
float
float)

public final java.lang.CharSequence coerceToString()

public float getDimension(
android.util.DisplayMetrics)

public final float getFloat()

public float getFraction(
float
float)

public void setTo(
android.util.TypedValue)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/util/Xml; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/util/Xml$Encoding;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Encoding )
public final class android.util.Xml$Encoding extends java.lang.Enum

----------------FIELDS----------------

private static final android.util.Xml$Encoding[] $VALUES

public static final android.util.Xml$Encoding ISO_8859_1

public static final android.util.Xml$Encoding US_ASCII

public static final android.util.Xml$Encoding UTF_16

public static final android.util.Xml$Encoding UTF_8

final java.lang.String expatName
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(Ljava/lang/String;)V )
private void <init>(
java.lang.String
int
java.lang.String)

public static android.util.Xml$Encoding valueOf(
java.lang.String)

public static android.util.Xml$Encoding[] values()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/util/Xml; )
@dalvik.annotation.InnerClass (accessFlags =8 name =XmlSerializerFactory )
 class android.util.Xml$XmlSerializerFactory extends java.lang.Object

----------------FIELDS----------------

static final java.lang.String TYPE

static final org.xmlpull.v1.XmlPullParserFactory instance
----------------METHODS----------------

static void <clinit>()

 void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/util/Xml$Encoding;Landroid/util/Xml$XmlSerializerFactory; )
public class android.util.Xml extends java.lang.Object

----------------FIELDS----------------

public static java.lang.String FEATURE_RELAXED
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.util.AttributeSet asAttributeSet(
org.xmlpull.v1.XmlPullParser)
@dalvik.annotation.Throws (value =Ljava/io/UnsupportedEncodingException; )
public static android.util.Xml$Encoding findEncodingByName(
java.lang.String)

public static org.xmlpull.v1.XmlPullParser newPullParser()

public static org.xmlpull.v1.XmlSerializer newSerializer()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/xml/sax/SAXException; )
public static void parse(
java.io.InputStream
android.util.Xml$Encoding
org.xml.sax.ContentHandler)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/xml/sax/SAXException; )
public static void parse(
java.io.Reader
org.xml.sax.ContentHandler)
@dalvik.annotation.Throws (value =Lorg/xml/sax/SAXException; )
public static void parse(
java.lang.String
org.xml.sax.ContentHandler)

________________CLASS________________


 class android.util.XmlPullAttributes extends java.lang.Object implements android.util.AttributeSet

----------------FIELDS----------------

private org.xmlpull.v1.XmlPullParser mParser
----------------METHODS----------------

public void <init>(
org.xmlpull.v1.XmlPullParser)

public boolean getAttributeBooleanValue(
int
boolean)

public boolean getAttributeBooleanValue(
java.lang.String
java.lang.String
boolean)

public int getAttributeCount()

public float getAttributeFloatValue(
int
float)

public float getAttributeFloatValue(
java.lang.String
java.lang.String
float)

public int getAttributeIntValue(
int
int)

public int getAttributeIntValue(
java.lang.String
java.lang.String
int)

public int getAttributeListValue(
int
java.lang.String[]
int)

public int getAttributeListValue(
java.lang.String
java.lang.String
java.lang.String[]
int)

public java.lang.String getAttributeName(
int)

public int getAttributeNameResource(
int)

public int getAttributeResourceValue(
int
int)

public int getAttributeResourceValue(
java.lang.String
java.lang.String
int)

public int getAttributeUnsignedIntValue(
int
int)

public int getAttributeUnsignedIntValue(
java.lang.String
java.lang.String
int)

public java.lang.String getAttributeValue(
int)

public java.lang.String getAttributeValue(
java.lang.String
java.lang.String)

public java.lang.String getClassAttribute()

public java.lang.String getIdAttribute()

public int getIdAttributeResourceValue(
int)

public java.lang.String getPositionDescription()

public int getStyleAttribute()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/view/AbsSavedState; )
final class android.view.AbsSavedState$1 extends android.view.AbsSavedState

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/AbsSavedState; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/view/AbsSavedState;>; )
final class android.view.AbsSavedState$2 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.view.AbsSavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.view.AbsSavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/ContextMenu; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ContextMenuInfo )
public abstract interface class android.view.ContextMenu$ContextMenuInfo extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________


public abstract interface class android.view.Menu extends java.lang.Object

----------------FIELDS----------------

public static final int CATEGORY_ALTERNATIVE

public static final int CATEGORY_CONTAINER

public static final int CATEGORY_MASK

public static final int CATEGORY_SECONDARY

public static final int CATEGORY_SHIFT

public static final int CATEGORY_SYSTEM

public static final int FIRST

public static final int FLAG_ALWAYS_PERFORM_CLOSE

public static final int FLAG_APPEND_TO_GROUP

public static final int FLAG_PERFORM_NO_CLOSE

public static final int NONE

public static final int USER_MASK

public static final int USER_SHIFT
----------------METHODS----------------

public abstract android.view.MenuItem add(
int)

public abstract android.view.MenuItem add(
int
int
int
int)

public abstract android.view.MenuItem add(
int
int
int
java.lang.CharSequence)

public abstract android.view.MenuItem add(
java.lang.CharSequence)

public abstract int addIntentOptions(
int
int
int
android.content.ComponentName
android.content.Intent[]
android.content.Intent
int
android.view.MenuItem[])

public abstract android.view.SubMenu addSubMenu(
int)

public abstract android.view.SubMenu addSubMenu(
int
int
int
int)

public abstract android.view.SubMenu addSubMenu(
int
int
int
java.lang.CharSequence)

public abstract android.view.SubMenu addSubMenu(
java.lang.CharSequence)

public abstract void clear()

public abstract android.view.MenuItem findItem(
int)

public abstract boolean hasVisibleItems()

public abstract boolean isShortcutKey(
int
android.view.KeyEvent)

public abstract boolean performIdentifierAction(
int
int)

public abstract boolean performShortcut(
int
android.view.KeyEvent
int)

public abstract void removeGroup(
int)

public abstract void removeItem(
int)

public abstract void setGroupCheckable(
int
boolean
boolean)

public abstract void setGroupEnabled(
int
boolean)

public abstract void setGroupVisible(
int
boolean)

public abstract void setQwertyMode(
boolean)

public abstract int size()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/ContextMenu$ContextMenuInfo; )
public abstract interface class android.view.ContextMenu extends java.lang.Object implements android.view.Menu

----------------FIELDS----------------
----------------METHODS----------------

public abstract void clearHeader()

public abstract android.view.ContextMenu setHeaderIcon(
int)

public abstract android.view.ContextMenu setHeaderIcon(
android.graphics.drawable.Drawable)

public abstract android.view.ContextMenu setHeaderTitle(
int)

public abstract android.view.ContextMenu setHeaderTitle(
java.lang.CharSequence)

public abstract android.view.ContextMenu setHeaderView(
android.view.View)

________________CLASS________________


public class android.view.Display extends java.lang.Object

----------------FIELDS----------------

public static final int DEFAULT_DISPLAY

private static boolean mInitialized

private static final java.lang.Object mStaticInit

private float mDensity

private int mDisplay

private float mDpiX

private float mDpiY

private int mPixelFormat

private float mRefreshRate
----------------METHODS----------------

static void <clinit>()

 void <init>(
int)

static native int getDisplayCount()

private native void init(
int)

private static native void nativeClassInit()

public int getDisplayId()

public native int getHeight()

public void getMetrics(
android.util.DisplayMetrics)

public native int getOrientation()

public int getPixelFormat()

public float getRefreshRate()

public native int getWidth()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/ThreadLocal<Landroid/view/FocusFinder;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/view/FocusFinder; )
final class android.view.FocusFinder$1 extends java.lang.ThreadLocal

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

protected android.view.FocusFinder initialValue()

protected volatile java.lang.Object initialValue()

________________CLASS________________


public class android.view.FocusFinder extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/lang/ThreadLocal<Landroid/view/FocusFinder;>; )
private static java.lang.ThreadLocal tlFocusFinder

 android.graphics.Rect mBestCandidateRect

 android.graphics.Rect mFocusedRect

 android.graphics.Rect mOtherRect
----------------METHODS----------------

static void <clinit>()

private void <init>()

 void <init>(
android.view.FocusFinder$1)

private android.view.View findNextFocus(
android.view.ViewGroup
android.view.View
android.graphics.Rect
int)

public static android.view.FocusFinder getInstance()

private boolean isTouchCandidate(
int
int
android.graphics.Rect
int)

static int majorAxisDistance(
int
android.graphics.Rect
android.graphics.Rect)

static int majorAxisDistanceRaw(
int
android.graphics.Rect
android.graphics.Rect)

static int majorAxisDistanceToFarEdge(
int
android.graphics.Rect
android.graphics.Rect)

static int majorAxisDistanceToFarEdgeRaw(
int
android.graphics.Rect
android.graphics.Rect)

static int minorAxisDistance(
int
android.graphics.Rect
android.graphics.Rect)

 boolean beamBeats(
int
android.graphics.Rect
android.graphics.Rect
android.graphics.Rect)

 boolean beamsOverlap(
int
android.graphics.Rect
android.graphics.Rect)

public android.view.View findNearestTouchable(
android.view.ViewGroup
int
int
int
int[])

public final android.view.View findNextFocus(
android.view.ViewGroup
android.view.View
int)

public android.view.View findNextFocusFromRect(
android.view.ViewGroup
android.graphics.Rect
int)

 int getWeightedDistanceFor(
int
int)

 boolean isBetterCandidate(
int
android.graphics.Rect
android.graphics.Rect
android.graphics.Rect)

 boolean isCandidate(
android.graphics.Rect
android.graphics.Rect
int)

 boolean isToDirectionOf(
int
android.graphics.Rect
android.graphics.Rect)

________________CLASS________________


public class android.view.FocusFinderHelper extends java.lang.Object

----------------FIELDS----------------

private android.view.FocusFinder mFocusFinder
----------------METHODS----------------

public void <init>(
android.view.FocusFinder)

public static int majorAxisDistance(
int
android.graphics.Rect
android.graphics.Rect)

public static int majorAxisDistanceToFarEdge(
int
android.graphics.Rect
android.graphics.Rect)

public boolean beamBeats(
int
android.graphics.Rect
android.graphics.Rect
android.graphics.Rect)

public boolean beamsOverlap(
int
android.graphics.Rect
android.graphics.Rect)

public boolean isBetterCandidate(
int
android.graphics.Rect
android.graphics.Rect
android.graphics.Rect)

public boolean isCandidate(
android.graphics.Rect
android.graphics.Rect
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =GestureHandler )
@dalvik.annotation.EnclosingClass (value =Landroid/view/GestureDetector; )
 class android.view.GestureDetector$GestureHandler extends android.os.Handler

----------------FIELDS----------------

final android.view.GestureDetector this$0
----------------METHODS----------------

 void <init>(
android.view.GestureDetector)

 void <init>(
android.view.GestureDetector
android.os.Handler)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/GestureDetector; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnGestureListener )
public abstract interface class android.view.GestureDetector$OnGestureListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onDown(
android.view.MotionEvent)

public abstract boolean onFling(
android.view.MotionEvent
android.view.MotionEvent
float
float)

public abstract void onLongPress(
android.view.MotionEvent)

public abstract boolean onScroll(
android.view.MotionEvent
android.view.MotionEvent
float
float)

public abstract void onShowPress(
android.view.MotionEvent)

public abstract boolean onSingleTapUp(
android.view.MotionEvent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =SimpleOnGestureListener )
@dalvik.annotation.EnclosingClass (value =Landroid/view/GestureDetector; )
public class android.view.GestureDetector$SimpleOnGestureListener extends java.lang.Object implements android.view.GestureDetector$OnGestureListener

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public boolean onDown(
android.view.MotionEvent)

public boolean onFling(
android.view.MotionEvent
android.view.MotionEvent
float
float)

public void onLongPress(
android.view.MotionEvent)

public boolean onScroll(
android.view.MotionEvent
android.view.MotionEvent
float
float)

public void onShowPress(
android.view.MotionEvent)

public boolean onSingleTapUp(
android.view.MotionEvent)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/GestureDetector$GestureHandler;Landroid/view/GestureDetector$SimpleOnGestureListener;Landroid/view/GestureDetector$OnGestureListener; )
public class android.view.GestureDetector extends java.lang.Object

----------------FIELDS----------------

private static final int LONG_PRESS

private static final int SHOW_PRESS

private static final int TOUCH_SLOP_SQUARE

private boolean mAlwaysInTapRegion

private android.view.MotionEvent mCurrentDownEvent

private android.view.MotionEvent mCurrentUpEvent

private final android.os.Handler mHandler

private boolean mInLongPress

private boolean mIsLongpressEnabled

private float mLastMotionX

private float mLastMotionY

private final android.view.GestureDetector$OnGestureListener mListener

private android.view.VelocityTracker mVelocityTracker
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.view.GestureDetector$OnGestureListener)

public void <init>(
android.view.GestureDetector$OnGestureListener
android.os.Handler)

static android.view.MotionEvent access$000(
android.view.GestureDetector)

static android.view.GestureDetector$OnGestureListener access$100(
android.view.GestureDetector)

static void access$200(
android.view.GestureDetector)

private void dispatchLongPress()

private void init()

public boolean isLongpressEnabled()

public boolean onTouchEvent(
android.view.MotionEvent)

public void setIsLongpressEnabled(
boolean)

________________CLASS________________


public class android.view.Gravity extends java.lang.Object

----------------FIELDS----------------

public static final int AXIS_PULL_AFTER

public static final int AXIS_PULL_BEFORE

public static final int AXIS_SPECIFIED

public static final int AXIS_X_SHIFT

public static final int AXIS_Y_SHIFT

public static final int BOTTOM

public static final int CENTER

public static final int CENTER_HORIZONTAL

public static final int CENTER_VERTICAL

public static final int FILL

public static final int FILL_HORIZONTAL

public static final int FILL_VERTICAL

public static final int HORIZONTAL_GRAVITY_MASK

public static final int LEFT

public static final int NO_GRAVITY

public static final int RIGHT

public static final int TOP

public static final int VERTICAL_GRAVITY_MASK
----------------METHODS----------------

public void <init>()

public static void apply(
int
int
int
android.graphics.Rect
int
int
android.graphics.Rect)

public static void apply(
int
int
int
android.graphics.Rect
android.graphics.Rect)

private static int applyMovement(
int
int
int
int
int)

public static boolean isHorizontal(
int)

public static boolean isVertical(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/IApplicationToken$Stub; )
public abstract interface class android.view.IApplicationToken extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract long getKeyDispatchingTimeout()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean keyDispatchingTimedOut()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void windowsGone()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void windowsVisible()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/view/IApplicationToken$Stub; )
 class android.view.IApplicationToken$Stub$Proxy extends java.lang.Object implements android.view.IApplicationToken

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public long getKeyDispatchingTimeout()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean keyDispatchingTimedOut()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void windowsGone()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void windowsVisible()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/IApplicationToken$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Landroid/view/IApplicationToken; )
public abstract class android.view.IApplicationToken$Stub extends android.os.Binder implements android.view.IApplicationToken

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_getKeyDispatchingTimeout

static final int TRANSACTION_keyDispatchingTimedOut

static final int TRANSACTION_windowsGone

static final int TRANSACTION_windowsVisible
----------------METHODS----------------

public void <init>()

public static android.view.IApplicationToken asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/view/IOnKeyguardExitResult$Stub; )
 class android.view.IOnKeyguardExitResult$Stub$Proxy extends java.lang.Object implements android.view.IOnKeyguardExitResult

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onKeyguardExitResult(
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/IRotationWatcher$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.view.IRotationWatcher$Stub$Proxy extends java.lang.Object implements android.view.IRotationWatcher

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onRotationChanged(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/IWindow$Stub; )
public abstract interface class android.view.IWindow extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void dispatchAppVisibility(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void dispatchGetNewSurface()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void dispatchKey(
android.view.KeyEvent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void dispatchPointer(
android.view.MotionEvent
long)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void dispatchTrackball(
android.view.MotionEvent
long)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void executeCommand(
java.lang.String
java.lang.String
android.os.ParcelFileDescriptor)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void resized(
int
int
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void windowFocusChanged(
boolean
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/view/IWindow$Stub; )
 class android.view.IWindow$Stub$Proxy extends java.lang.Object implements android.view.IWindow

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void dispatchAppVisibility(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void dispatchGetNewSurface()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void dispatchKey(
android.view.KeyEvent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void dispatchPointer(
android.view.MotionEvent
long)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void dispatchTrackball(
android.view.MotionEvent
long)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void executeCommand(
java.lang.String
java.lang.String
android.os.ParcelFileDescriptor)

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void resized(
int
int
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void windowFocusChanged(
boolean
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/view/IWindow$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/view/IWindow; )
public abstract class android.view.IWindow$Stub extends android.os.Binder implements android.view.IWindow

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_dispatchAppVisibility

static final int TRANSACTION_dispatchGetNewSurface

static final int TRANSACTION_dispatchKey

static final int TRANSACTION_dispatchPointer

static final int TRANSACTION_dispatchTrackball

static final int TRANSACTION_executeCommand

static final int TRANSACTION_resized

static final int TRANSACTION_windowFocusChanged
----------------METHODS----------------

public void <init>()

public static android.view.IWindow asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/IWindowManager$Stub; )
public abstract interface class android.view.IWindowManager extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void addAppToken(
int
android.view.IApplicationToken
int
int
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void disableKeyguard(
android.os.IBinder
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void executeAppTransition()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void exitKeyguardSecurely(
android.view.IOnKeyguardExitResult)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract float getAnimationScale(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract float[] getAnimationScales()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getAppOrientation(
android.view.IApplicationToken)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getKeycodeState(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getKeycodeStateForDevice(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getRotation()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getScancodeState(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getScancodeStateForDevice(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getSwitchState(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getSwitchStateForDevice(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean inKeyguardRestrictedInputMode()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean injectKeyEvent(
android.view.KeyEvent
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean injectPointerEvent(
android.view.MotionEvent
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean injectTrackballEvent(
android.view.MotionEvent
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean isViewServerRunning()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void moveAppToken(
int
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/os/IBinder;>;)V )
public abstract void moveAppTokensToBottom(
java.util.List)
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/os/IBinder;>;)V )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void moveAppTokensToTop(
java.util.List)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.view.IWindowSession openSession(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void pauseKeyDispatching(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void prepareAppTransition(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void reenableKeyguard(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void removeAppToken(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void resumeKeyDispatching(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setAnimationScale(
int
float)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setAnimationScales(
float[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setAppGroupId(
android.os.IBinder
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setAppOrientation(
android.view.IApplicationToken
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setAppStartingWindow(
android.os.IBinder
java.lang.String
int
java.lang.CharSequence
int
int
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setAppVisibility(
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setAppWillBeHidden(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setEventDispatching(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setFocusedApp(
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setInTouchMode(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setRotation(
int
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void startAppFreezingScreen(
android.os.IBinder
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean startViewServer(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void stopAppFreezingScreen(
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean stopViewServer()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.content.res.Configuration updateOrientationFromAppTokens(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int watchRotation(
android.view.IRotationWatcher)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/view/IWindowManager$Stub; )
 class android.view.IWindowManager$Stub$Proxy extends java.lang.Object implements android.view.IWindowManager

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void addAppToken(
int
android.view.IApplicationToken
int
int
boolean)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void disableKeyguard(
android.os.IBinder
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void executeAppTransition()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void exitKeyguardSecurely(
android.view.IOnKeyguardExitResult)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public float getAnimationScale(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public float[] getAnimationScales()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getAppOrientation(
android.view.IApplicationToken)

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getKeycodeState(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getKeycodeStateForDevice(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getRotation()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getScancodeState(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getScancodeStateForDevice(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getSwitchState(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getSwitchStateForDevice(
int
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean inKeyguardRestrictedInputMode()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean injectKeyEvent(
android.view.KeyEvent
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean injectPointerEvent(
android.view.MotionEvent
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean injectTrackballEvent(
android.view.MotionEvent
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean isViewServerRunning()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void moveAppToken(
int
android.os.IBinder)
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/os/IBinder;>;)V )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void moveAppTokensToBottom(
java.util.List)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/os/IBinder;>;)V )
public void moveAppTokensToTop(
java.util.List)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.view.IWindowSession openSession(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void pauseKeyDispatching(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void prepareAppTransition(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void reenableKeyguard(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void removeAppToken(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void resumeKeyDispatching(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setAnimationScale(
int
float)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setAnimationScales(
float[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setAppGroupId(
android.os.IBinder
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setAppOrientation(
android.view.IApplicationToken
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setAppStartingWindow(
android.os.IBinder
java.lang.String
int
java.lang.CharSequence
int
int
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setAppVisibility(
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setAppWillBeHidden(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setEventDispatching(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setFocusedApp(
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setInTouchMode(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setRotation(
int
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void startAppFreezingScreen(
android.os.IBinder
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean startViewServer(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void stopAppFreezingScreen(
android.os.IBinder
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean stopViewServer()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.content.res.Configuration updateOrientationFromAppTokens(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int watchRotation(
android.view.IRotationWatcher)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/IWindowManager$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/view/IWindowManager; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.view.IWindowManager$Stub extends android.os.Binder implements android.view.IWindowManager

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_addAppToken

static final int TRANSACTION_disableKeyguard

static final int TRANSACTION_executeAppTransition

static final int TRANSACTION_exitKeyguardSecurely

static final int TRANSACTION_getAnimationScale

static final int TRANSACTION_getAnimationScales

static final int TRANSACTION_getAppOrientation

static final int TRANSACTION_getKeycodeState

static final int TRANSACTION_getKeycodeStateForDevice

static final int TRANSACTION_getRotation

static final int TRANSACTION_getScancodeState

static final int TRANSACTION_getScancodeStateForDevice

static final int TRANSACTION_getSwitchState

static final int TRANSACTION_getSwitchStateForDevice

static final int TRANSACTION_inKeyguardRestrictedInputMode

static final int TRANSACTION_injectKeyEvent

static final int TRANSACTION_injectPointerEvent

static final int TRANSACTION_injectTrackballEvent

static final int TRANSACTION_isViewServerRunning

static final int TRANSACTION_moveAppToken

static final int TRANSACTION_moveAppTokensToBottom

static final int TRANSACTION_moveAppTokensToTop

static final int TRANSACTION_openSession

static final int TRANSACTION_pauseKeyDispatching

static final int TRANSACTION_prepareAppTransition

static final int TRANSACTION_reenableKeyguard

static final int TRANSACTION_removeAppToken

static final int TRANSACTION_resumeKeyDispatching

static final int TRANSACTION_setAnimationScale

static final int TRANSACTION_setAnimationScales

static final int TRANSACTION_setAppGroupId

static final int TRANSACTION_setAppOrientation

static final int TRANSACTION_setAppStartingWindow

static final int TRANSACTION_setAppVisibility

static final int TRANSACTION_setAppWillBeHidden

static final int TRANSACTION_setEventDispatching

static final int TRANSACTION_setFocusedApp

static final int TRANSACTION_setInTouchMode

static final int TRANSACTION_setRotation

static final int TRANSACTION_startAppFreezingScreen

static final int TRANSACTION_startViewServer

static final int TRANSACTION_stopAppFreezingScreen

static final int TRANSACTION_stopViewServer

static final int TRANSACTION_updateOrientationFromAppTokens

static final int TRANSACTION_watchRotation
----------------METHODS----------------

public void <init>()

public static android.view.IWindowManager asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/IWindowSession$Stub; )
public abstract interface class android.view.IWindowSession extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int add(
android.view.IWindow
android.view.WindowManager$LayoutParams
int
android.graphics.Rect)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void finishDrawing(
android.view.IWindow)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void finishKey(
android.view.IWindow)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean getInTouchMode()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.view.MotionEvent getPendingPointerMove(
android.view.IWindow)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.view.MotionEvent getPendingTrackballMove(
android.view.IWindow)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int relayout(
android.view.IWindow
android.view.WindowManager$LayoutParams
int
int
int
android.graphics.Rect
android.graphics.Rect
android.view.Surface)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void remove(
android.view.IWindow)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setInTouchMode(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setTransparentRegion(
android.view.IWindow
android.graphics.Region)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Landroid/view/IWindowSession$Stub; )
 class android.view.IWindowSession$Stub$Proxy extends java.lang.Object implements android.view.IWindowSession

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int add(
android.view.IWindow
android.view.WindowManager$LayoutParams
int
android.graphics.Rect)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void finishDrawing(
android.view.IWindow)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void finishKey(
android.view.IWindow)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean getInTouchMode()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.view.MotionEvent getPendingPointerMove(
android.view.IWindow)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.view.MotionEvent getPendingTrackballMove(
android.view.IWindow)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int relayout(
android.view.IWindow
android.view.WindowManager$LayoutParams
int
int
int
android.graphics.Rect
android.graphics.Rect
android.view.Surface)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void remove(
android.view.IWindow)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setInTouchMode(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setTransparentRegion(
android.view.IWindow
android.graphics.Region)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.MemberClasses (value =Landroid/view/IWindowSession$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Landroid/view/IWindowSession; )
public abstract class android.view.IWindowSession$Stub extends android.os.Binder implements android.view.IWindowSession

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_add

static final int TRANSACTION_finishDrawing

static final int TRANSACTION_finishKey

static final int TRANSACTION_getInTouchMode

static final int TRANSACTION_getPendingPointerMove

static final int TRANSACTION_getPendingTrackballMove

static final int TRANSACTION_relayout

static final int TRANSACTION_remove

static final int TRANSACTION_setInTouchMode

static final int TRANSACTION_setTransparentRegion
----------------METHODS----------------

public void <init>()

public static android.view.IWindowSession asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________


public class android.view.InflateException extends java.lang.RuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

public void <init>(
java.lang.Throwable)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/KeyCharacterMap; )
@dalvik.annotation.InnerClass (accessFlags =9 name =KeyData )
public class android.view.KeyCharacterMap$KeyData extends java.lang.Object

----------------FIELDS----------------

public static final int META_LENGTH

public char displayLabel

public char[] meta

public char number
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/KeyCharacterMap$KeyData; )
public class android.view.KeyCharacterMap extends java.lang.Object

----------------FIELDS----------------

private static final int ACUTE

public static final int ALPHA

public static final int BUILT_IN_KEYBOARD

private static final int CIRCUMFLEX

private static android.util.SparseIntArray COMBINING

public static final int COMBINING_ACCENT

public static final int COMBINING_ACCENT_MASK

private static android.util.SparseIntArray DEAD

private static final int GRAVE

public static final char HEX_INPUT

public static final int NUMERIC

public static final char PICKER_DIALOG_INPUT

public static final int PREDICTIVE

private static final int TILDE

private static final int UMLAUT
@dalvik.annotation.Signature (value =Landroid/util/SparseArray<Ljava/lang/ref/WeakReference<Landroid/view/KeyCharacterMap;>;>; )
private static android.util.SparseArray sInstances

private static java.lang.Object sLock

private int mKeyboardDevice

private int mPointer
----------------METHODS----------------

static void <clinit>()

private void <init>(
int)

private static native int ctor_native(
int)

private static native void dtor_native(
int)

public static int getDeadChar(
int
int)

private static native char getDisplayLabel_native(
int
int)

private static native long[] getEvents_native(
int
char[])

private static native boolean getKeyData_native(
int
int
android.view.KeyCharacterMap$KeyData)

private static native int getKeyboardType_native(
int)

private static native char getMatch_native(
int
int
char[]
int)

private static native char getNumber_native(
int
int)

private static native char get_native(
int
int
int)

public static android.view.KeyCharacterMap load(
int)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public int get(
int
int)

public char getDisplayLabel(
int)

public android.view.KeyEvent[] getEvents(
char[])

public boolean getKeyData(
int
android.view.KeyCharacterMap$KeyData)

public int getKeyboardType()

public char getMatch(
int
char[])

public char getMatch(
int
char[]
int)

public char getNumber(
int)

public boolean isPrintingKey(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/view/KeyEvent;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/view/KeyEvent; )
final class android.view.KeyEvent$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.view.KeyEvent createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.view.KeyEvent[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/KeyEvent$Callback; )
public class android.view.KeyEvent extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------

public static final int ACTION_DOWN

public static final int ACTION_MULTIPLE

public static final int ACTION_UP
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/view/KeyEvent;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final int FLAG_WOKE_HERE

public static final int KEYCODE_0

public static final int KEYCODE_1

public static final int KEYCODE_2

public static final int KEYCODE_3

public static final int KEYCODE_4

public static final int KEYCODE_5

public static final int KEYCODE_6

public static final int KEYCODE_7

public static final int KEYCODE_8

public static final int KEYCODE_9

public static final int KEYCODE_A

public static final int KEYCODE_ALT_LEFT

public static final int KEYCODE_ALT_RIGHT

public static final int KEYCODE_APOSTROPHE

public static final int KEYCODE_AT

public static final int KEYCODE_B

public static final int KEYCODE_BACK

public static final int KEYCODE_BACKSLASH

public static final int KEYCODE_C

public static final int KEYCODE_CALL

public static final int KEYCODE_CAMERA

public static final int KEYCODE_CLEAR

public static final int KEYCODE_COMMA

public static final int KEYCODE_D

public static final int KEYCODE_DEL

public static final int KEYCODE_DPAD_CENTER

public static final int KEYCODE_DPAD_DOWN

public static final int KEYCODE_DPAD_LEFT

public static final int KEYCODE_DPAD_RIGHT

public static final int KEYCODE_DPAD_UP

public static final int KEYCODE_E

public static final int KEYCODE_ENDCALL

public static final int KEYCODE_ENTER

public static final int KEYCODE_ENVELOPE

public static final int KEYCODE_EQUALS

public static final int KEYCODE_EXPLORER

public static final int KEYCODE_F

public static final int KEYCODE_FOCUS

public static final int KEYCODE_G

public static final int KEYCODE_GRAVE

public static final int KEYCODE_H

public static final int KEYCODE_HEADSETHOOK

public static final int KEYCODE_HOME

public static final int KEYCODE_I

public static final int KEYCODE_J

public static final int KEYCODE_K

public static final int KEYCODE_L

public static final int KEYCODE_LEFT_BRACKET

public static final int KEYCODE_M

public static final int KEYCODE_MENU

public static final int KEYCODE_MINUS

public static final int KEYCODE_N

public static final int KEYCODE_NOTIFICATION

public static final int KEYCODE_NUM

public static final int KEYCODE_O

public static final int KEYCODE_P

public static final int KEYCODE_PERIOD

public static final int KEYCODE_PLUS

public static final int KEYCODE_POUND

public static final int KEYCODE_POWER

public static final int KEYCODE_Q

public static final int KEYCODE_R

public static final int KEYCODE_RIGHT_BRACKET

public static final int KEYCODE_S

public static final int KEYCODE_SEARCH

public static final int KEYCODE_SEMICOLON

public static final int KEYCODE_SHIFT_LEFT

public static final int KEYCODE_SHIFT_RIGHT

public static final int KEYCODE_SLASH

public static final int KEYCODE_SOFT_LEFT

public static final int KEYCODE_SOFT_RIGHT

public static final int KEYCODE_SPACE

public static final int KEYCODE_STAR

public static final int KEYCODE_SYM

public static final int KEYCODE_T

public static final int KEYCODE_TAB

public static final int KEYCODE_U

public static final int KEYCODE_UNKNOWN

public static final int KEYCODE_V

public static final int KEYCODE_VOLUME_DOWN

public static final int KEYCODE_VOLUME_UP

public static final int KEYCODE_W

public static final int KEYCODE_X

public static final int KEYCODE_Y

public static final int KEYCODE_Z

public static final int MAX_KEYCODE

public static final int META_ALT_LEFT_ON

public static final int META_ALT_ON

public static final int META_ALT_RIGHT_ON

public static final int META_SHIFT_LEFT_ON

public static final int META_SHIFT_ON

public static final int META_SHIFT_RIGHT_ON

public static final int META_SYM_ON

private int mAction

private int mDeviceId

private long mDownTime

private long mEventTime

private int mFlags

private int mKeyCode

private int mMetaState

private int mRepeatCount

private int mScancode
----------------METHODS----------------

static void <clinit>()

public void <init>(
int
int)

public void <init>(
long
long
int
int
int)

public void <init>(
long
long
int
int
int
int)

public void <init>(
long
long
int
int
int
int
int
int)

public void <init>(
long
long
int
int
int
int
int
int
int)

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.view.KeyEvent$1)

public void <init>(
android.view.KeyEvent
long
int)

public static int getDeadChar(
int
int)

public static boolean isModifierKey(
int)

public int describeContents()

public final boolean dispatch(
android.view.KeyEvent$Callback)

public final int getAction()

public final int getDeviceId()

public char getDisplayLabel()

public final long getDownTime()

public final long getEventTime()

public final int getFlags()

public final int getKeyCode()

public boolean getKeyData(
android.view.KeyCharacterMap$KeyData)

public final int getKeyboardDevice()

public char getMatch(
char[])

public char getMatch(
char[]
int)

public final int getMetaState()

public char getNumber()

public final int getRepeatCount()

public final int getScanCode()

public int getUnicodeChar()

public int getUnicodeChar(
int)

public final boolean isAltPressed()
@java.lang.Deprecated
public final boolean isDown()

public boolean isPrintingKey()

public final boolean isShiftPressed()

public final boolean isSymPressed()

public final boolean isSystem()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =FactoryMerger )
@dalvik.annotation.EnclosingClass (value =Landroid/view/LayoutInflater; )
 class android.view.LayoutInflater$FactoryMerger extends java.lang.Object implements android.view.LayoutInflater$Factory

----------------FIELDS----------------

private final android.view.LayoutInflater$Factory mF1

private final android.view.LayoutInflater$Factory mF2
----------------METHODS----------------

 void <init>(
android.view.LayoutInflater$Factory
android.view.LayoutInflater$Factory)

public android.view.View onCreateView(
java.lang.String
android.content.Context
android.util.AttributeSet)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/LayoutInflater; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =Filter )
public abstract interface class android.view.LayoutInflater$Filter extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onLoadClass(
java.lang.Class)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/LayoutInflater$FactoryMerger;Landroid/view/LayoutInflater$Factory;Landroid/view/LayoutInflater$Filter; )
public abstract class android.view.LayoutInflater extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG_INCLUDE

private static final java.lang.String TAG_MERGE

private static final java.lang.String TAG_REQUEST_FOCUS

private static final java.lang.Class[] mConstructorSignature
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/reflect/Constructor;>; )
private static final java.util.HashMap sConstructorMap

private final boolean DEBUG

private final java.lang.Object[] mConstructorArgs

protected final android.content.Context mContext

private android.view.LayoutInflater$Factory mFactory

private boolean mFactorySet

private android.view.LayoutInflater$Filter mFilter
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/Boolean;>; )
private java.util.HashMap mFilterMap
----------------METHODS----------------

static void <clinit>()

protected void <init>(
android.content.Context)

protected void <init>(
android.view.LayoutInflater
android.content.Context)

private void failNotAllowed(
java.lang.String
java.lang.String
android.util.AttributeSet)

public static android.view.LayoutInflater from(
android.content.Context)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private void parseInclude(
org.xmlpull.v1.XmlPullParser
android.view.View
android.util.AttributeSet)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private void parseRequestFocus(
org.xmlpull.v1.XmlPullParser
android.view.View)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private void rInflate(
org.xmlpull.v1.XmlPullParser
android.view.View
android.util.AttributeSet)

public abstract android.view.LayoutInflater cloneInContext(
android.content.Context)
@dalvik.annotation.Throws (value =Ljava/lang/ClassNotFoundException;Landroid/view/InflateException; )
public final android.view.View createView(
java.lang.String
java.lang.String
android.util.AttributeSet)

 android.view.View createViewFromTag(
java.lang.String
android.util.AttributeSet)

public android.content.Context getContext()

public final android.view.LayoutInflater$Factory getFactory()

public android.view.LayoutInflater$Filter getFilter()

public android.view.View inflate(
int
android.view.ViewGroup)

public android.view.View inflate(
int
android.view.ViewGroup
boolean)

public android.view.View inflate(
org.xmlpull.v1.XmlPullParser
android.view.ViewGroup)

public android.view.View inflate(
org.xmlpull.v1.XmlPullParser
android.view.ViewGroup
boolean)
@dalvik.annotation.Throws (value =Ljava/lang/ClassNotFoundException; )
protected android.view.View onCreateView(
java.lang.String
android.util.AttributeSet)

public void setFactory(
android.view.LayoutInflater$Factory)

public void setFilter(
android.view.LayoutInflater$Filter)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/MenuInflater; )
@dalvik.annotation.InnerClass (accessFlags =2 name =MenuState )
 class android.view.MenuInflater$MenuState extends java.lang.Object

----------------FIELDS----------------

private static final int defaultGroupId

private static final int defaultItemCategory

private static final int defaultItemCheckable

private static final boolean defaultItemChecked

private static final boolean defaultItemEnabled

private static final int defaultItemId

private static final int defaultItemOrder

private static final boolean defaultItemVisible

private int groupCategory

private int groupCheckable

private boolean groupEnabled

private int groupId

private int groupOrder

private boolean groupVisible

private boolean itemAdded

private char itemAlphabeticShortcut

private int itemCategoryOrder

private int itemCheckable

private boolean itemChecked

private boolean itemEnabled

private int itemIconResId

private int itemId

private char itemNumericShortcut

private java.lang.String itemTitle

private java.lang.String itemTitleCondensed

private boolean itemVisible

private android.view.Menu menu

final android.view.MenuInflater this$0
----------------METHODS----------------

public void <init>(
android.view.MenuInflater
android.view.Menu)

private char getShortcut(
java.lang.String)

private void setItem(
android.view.MenuItem)

public void addItem()

public android.view.SubMenu addSubMenuItem()

public boolean hasAddedItem()

public void readGroup(
android.util.AttributeSet)

public void readItem(
android.util.AttributeSet)

public void resetGroup()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/MenuInflater$MenuState; )
public class android.view.MenuInflater extends java.lang.Object

----------------FIELDS----------------

private static final int NO_ID

private static final java.lang.String XML_GROUP

private static final java.lang.String XML_ITEM

private static final java.lang.String XML_MENU

private android.content.Context mContext
----------------METHODS----------------

public void <init>(
android.content.Context)

static android.content.Context access$000(
android.view.MenuInflater)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private void parseMenu(
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet
android.view.Menu)

public void inflate(
int
android.view.Menu)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnMenuItemClickListener )
@dalvik.annotation.EnclosingClass (value =Landroid/view/MenuItem; )
public abstract interface class android.view.MenuItem$OnMenuItemClickListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onMenuItemClick(
android.view.MenuItem)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/MenuItem$OnMenuItemClickListener; )
public abstract interface class android.view.MenuItem extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract char getAlphabeticShortcut()

public abstract int getGroupId()

public abstract android.graphics.drawable.Drawable getIcon()

public abstract android.content.Intent getIntent()

public abstract int getItemId()

public abstract android.view.ContextMenu$ContextMenuInfo getMenuInfo()

public abstract char getNumericShortcut()

public abstract int getOrder()

public abstract android.view.SubMenu getSubMenu()

public abstract java.lang.CharSequence getTitle()

public abstract java.lang.CharSequence getTitleCondensed()

public abstract boolean hasSubMenu()

public abstract boolean isCheckable()

public abstract boolean isChecked()

public abstract boolean isEnabled()

public abstract boolean isVisible()

public abstract android.view.MenuItem setAlphabeticShortcut(
char)

public abstract android.view.MenuItem setCheckable(
boolean)

public abstract android.view.MenuItem setChecked(
boolean)

public abstract android.view.MenuItem setEnabled(
boolean)

public abstract android.view.MenuItem setIcon(
int)

public abstract android.view.MenuItem setIcon(
android.graphics.drawable.Drawable)

public abstract android.view.MenuItem setIntent(
android.content.Intent)

public abstract android.view.MenuItem setNumericShortcut(
char)

public abstract android.view.MenuItem setOnMenuItemClickListener(
android.view.MenuItem$OnMenuItemClickListener)

public abstract android.view.MenuItem setShortcut(
char
char)

public abstract android.view.MenuItem setTitle(
int)

public abstract android.view.MenuItem setTitle(
java.lang.CharSequence)

public abstract android.view.MenuItem setTitleCondensed(
java.lang.CharSequence)

public abstract android.view.MenuItem setVisible(
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/MotionEvent; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/view/MotionEvent;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.view.MotionEvent$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.view.MotionEvent createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.view.MotionEvent[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public final class android.view.MotionEvent extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------

public static final int ACTION_CANCEL

public static final int ACTION_DOWN

public static final int ACTION_MOVE

public static final int ACTION_UP
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/view/MotionEvent;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final int EDGE_BOTTOM

public static final int EDGE_LEFT

public static final int EDGE_RIGHT

public static final int EDGE_TOP

private static final int MAX_RECYCLED

private static final boolean TRACK_RECYCLED_LOCATION

private static java.lang.Object gRecyclerLock

private static android.view.MotionEvent gRecyclerTop

private static int gRecyclerUsed

private int mAction

private int mDeviceId

private long mDownTime

private int mEdgeFlags

private long mEventTime

private float[] mHistory

private long[] mHistoryTimes

private int mMetaState

private android.view.MotionEvent mNext

private int mNumHistory

private float mPressure

private float mRawX

private float mRawY

private boolean mRecycled

private java.lang.RuntimeException mRecycledLocation

private float mSize

private float mX

private float mXPrecision

private float mY

private float mYPrecision
----------------METHODS----------------

static void <clinit>()

private void <init>()

static android.view.MotionEvent access$000()

static void access$100(
android.view.MotionEvent
android.os.Parcel)

private static android.view.MotionEvent obtain()

public static android.view.MotionEvent obtain(
long
long
int
float
float
float
float
int
float
float
int
int)

public static android.view.MotionEvent obtain(
long
long
int
float
float
int)

public static android.view.MotionEvent obtain(
android.view.MotionEvent)

private void readFromParcel(
android.os.Parcel)

public final void addBatch(
long
float
float
float
float
int)

public int describeContents()

public final int getAction()

public final int getDeviceId()

public final long getDownTime()

public final int getEdgeFlags()

public final long getEventTime()

public final long getHistoricalEventTime(
int)

public final float getHistoricalPressure(
int)

public final float getHistoricalSize(
int)

public final float getHistoricalX(
int)

public final float getHistoricalY(
int)

public final int getHistorySize()

public final int getMetaState()

public final float getPressure()

public final float getRawX()

public final float getRawY()

public final float getSize()

public final float getX()

public final float getXPrecision()

public final float getY()

public final float getYPrecision()

public final void offsetLocation(
float
float)

public void recycle()

public final void setAction(
int)

public final void setEdgeFlags(
int)

public final void setLocation(
float
float)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public abstract class android.view.OrientationListener extends java.lang.Object implements android.hardware.SensorListener

----------------FIELDS----------------

private static final boolean DEBUG

public static final int ORIENTATION_UNKNOWN

private static final java.lang.String TAG

private static final boolean localLOGV

private boolean mEnabled

private int mOrientation

private android.hardware.SensorManager mSensorManager
----------------METHODS----------------

public void <init>(
android.content.Context)

public void disable()

public void enable()

public void onAccuracyChanged(
int
int)

public abstract void onOrientationChanged(
int)

public void onSensorChanged(
int
float[])

________________CLASS________________


public class android.view.RawInputEvent extends java.lang.Object

----------------FIELDS----------------

public static final int ABS_BRAKE

public static final int ABS_DISTANCE

public static final int ABS_GAS

public static final int ABS_HAT0X

public static final int ABS_HAT0Y

public static final int ABS_HAT1X

public static final int ABS_HAT1Y

public static final int ABS_HAT2X

public static final int ABS_HAT2Y

public static final int ABS_HAT3X

public static final int ABS_HAT3Y

public static final int ABS_MAX

public static final int ABS_MISC

public static final int ABS_PRESSURE

public static final int ABS_RUDDER

public static final int ABS_RX

public static final int ABS_RY

public static final int ABS_RZ

public static final int ABS_THROTTLE

public static final int ABS_TILT_X

public static final int ABS_TILT_Y

public static final int ABS_TOOL_WIDTH

public static final int ABS_VOLUME

public static final int ABS_WHEEL

public static final int ABS_X

public static final int ABS_Y

public static final int ABS_Z

public static final int BTN_0

public static final int BTN_1

public static final int BTN_2

public static final int BTN_3

public static final int BTN_4

public static final int BTN_5

public static final int BTN_6

public static final int BTN_7

public static final int BTN_8

public static final int BTN_9

public static final int BTN_A

public static final int BTN_B

public static final int BTN_BACK

public static final int BTN_BASE

public static final int BTN_BASE2

public static final int BTN_BASE3

public static final int BTN_BASE4

public static final int BTN_BASE5

public static final int BTN_BASE6

public static final int BTN_C

public static final int BTN_DEAD

public static final int BTN_DIGI

public static final int BTN_EXTRA

public static final int BTN_FIRST

public static final int BTN_FORWARD

public static final int BTN_GAMEPAD

public static final int BTN_GEAR_DOWN

public static final int BTN_GEAR_UP

public static final int BTN_JOYSTICK

public static final int BTN_LAST

public static final int BTN_LEFT

public static final int BTN_MIDDLE

public static final int BTN_MISC

public static final int BTN_MODE

public static final int BTN_MOUSE

public static final int BTN_PINKIE

public static final int BTN_RIGHT

public static final int BTN_SELECT

public static final int BTN_SIDE

public static final int BTN_START

public static final int BTN_STYLUS

public static final int BTN_STYLUS2

public static final int BTN_TASK

public static final int BTN_THUMB

public static final int BTN_THUMB2

public static final int BTN_THUMBL

public static final int BTN_THUMBR

public static final int BTN_TL

public static final int BTN_TL2

public static final int BTN_TOOL_AIRBRUSH

public static final int BTN_TOOL_BRUSH

public static final int BTN_TOOL_DOUBLETAP

public static final int BTN_TOOL_FINGER

public static final int BTN_TOOL_LENS

public static final int BTN_TOOL_MOUSE

public static final int BTN_TOOL_PEN

public static final int BTN_TOOL_PENCIL

public static final int BTN_TOOL_RUBBER

public static final int BTN_TOOL_TRIPLETAP

public static final int BTN_TOP

public static final int BTN_TOP2

public static final int BTN_TOUCH

public static final int BTN_TR

public static final int BTN_TR2

public static final int BTN_TRIGGER

public static final int BTN_WHEEL

public static final int BTN_X

public static final int BTN_Y

public static final int BTN_Z

public static final int CLASS_CONFIGURATION_CHANGED

public static final int CLASS_KEYBOARD

public static final int CLASS_TOUCHSCREEN

public static final int CLASS_TRACKBALL

public static final int EV_ABS

public static final int EV_DEVICE_ADDED

public static final int EV_DEVICE_REMOVED

public static final int EV_FF

public static final int EV_FF_STATUS

public static final int EV_KEY

public static final int EV_LED

public static final int EV_MSC

public static final int EV_PWR

public static final int EV_REL

public static final int EV_REP

public static final int EV_SND

public static final int EV_SW

public static final int EV_SYN

public static final int REL_DIAL

public static final int REL_HWHEEL

public static final int REL_MAX

public static final int REL_MISC

public static final int REL_RX

public static final int REL_RY

public static final int REL_RZ

public static final int REL_WHEEL

public static final int REL_X

public static final int REL_Y

public static final int REL_Z

public int deviceId

public int flags

public int keycode

public int scancode

public int type

public int value

public long when
----------------METHODS----------------

public void <init>()

________________CLASS________________


public class android.view.SoundEffectConstants extends java.lang.Object

----------------FIELDS----------------

public static final int CLICK

public static final int NAVIGATION_DOWN

public static final int NAVIGATION_LEFT

public static final int NAVIGATION_RIGHT

public static final int NAVIGATION_UP
----------------METHODS----------------

private void <init>()

public static int getContantForFocusDirection(
int)

________________CLASS________________


public abstract interface class android.view.SubMenu extends java.lang.Object implements android.view.Menu

----------------FIELDS----------------
----------------METHODS----------------

public abstract void clearHeader()

public abstract android.view.MenuItem getItem()

public abstract android.view.SubMenu setHeaderIcon(
int)

public abstract android.view.SubMenu setHeaderIcon(
android.graphics.drawable.Drawable)

public abstract android.view.SubMenu setHeaderTitle(
int)

public abstract android.view.SubMenu setHeaderTitle(
java.lang.CharSequence)

public abstract android.view.SubMenu setHeaderView(
android.view.View)

public abstract android.view.SubMenu setIcon(
int)

public abstract android.view.SubMenu setIcon(
android.graphics.drawable.Drawable)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/Surface; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/view/Surface;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.view.Surface$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.view.Surface createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.view.Surface[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =OutOfResourcesException )
@dalvik.annotation.EnclosingClass (value =Landroid/view/Surface; )
public class android.view.Surface$OutOfResourcesException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/Surface$OutOfResourcesException; )
public class android.view.Surface extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/view/Surface;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final int FX_SURFACE_BLUR

public static final int FX_SURFACE_DIM

public static final int FX_SURFACE_MASK

public static final int FX_SURFACE_NORMAL

public static final int GPU

public static final int HARDWARE

public static final int HIDDEN

private static final java.lang.String LOG_TAG

public static final int NON_PREMULTIPLIED

public static final int PUSH_BUFFERS

public static final int ROTATION_0

public static final int ROTATION_180

public static final int ROTATION_270

public static final int ROTATION_90

public static final int SECURE

public static final int SURACE_FROZEN

public static final int SURFACE_BLUR_FREEZE

public static final int SURFACE_DITHER

public static final int SURFACE_HIDDEN

private android.graphics.Canvas mCanvas

private int mSaveCount

private int mSurface
----------------METHODS----------------

static void <clinit>()

public void <init>()
@dalvik.annotation.Throws (value =Landroid/view/Surface$OutOfResourcesException; )
private void <init>(
android.os.Parcel)
@dalvik.annotation.Throws (value =Landroid/view/Surface$OutOfResourcesException; )
 void <init>(
android.os.Parcel
android.view.Surface$1)
@dalvik.annotation.Throws (value =Landroid/view/Surface$OutOfResourcesException; )
public void <init>(
android.view.SurfaceSession
int
int
int
int
int
int)

public static native void closeTransaction()

public static native void freezeDisplay(
int)

private native void init(
android.os.Parcel)
@dalvik.annotation.Throws (value =Landroid/view/Surface$OutOfResourcesException; )
private native void init(
android.view.SurfaceSession
int
int
int
int
int
int)

private native android.graphics.Canvas lockCanvasNative(
android.graphics.Rect)

private static native void nativeClassInit()

public static native void openTransaction()

public static native void setOrientation(
int
int)

public static native void unfreezeDisplay(
int)

public native void clear()

public native void copyFrom(
android.view.Surface)

public int describeContents()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public native void freeze()

public native void hide()

public native boolean isValid()
@dalvik.annotation.Throws (value =Landroid/view/Surface$OutOfResourcesException; )
public android.graphics.Canvas lockCanvas(
android.graphics.Rect)

public native void readFromParcel(
android.os.Parcel)

public native void setAlpha(
float)

public native void setFlags(
int
int)

public native void setFreezeTint(
int)

public native void setLayer(
int)

public native void setMatrix(
float
float
float
float)

public native void setPosition(
int
int)

public native void setSize(
int
int)

public native void setTransparentRegionHint(
android.graphics.Region)

public native void show()

public java.lang.String toString()

public native void unfreeze()

public native void unlockCanvas(
android.graphics.Canvas)

public native void unlockCanvasAndPost(
android.graphics.Canvas)

public native void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =BadSurfaceTypeException )
@dalvik.annotation.EnclosingClass (value =Landroid/view/SurfaceHolder; )
public class android.view.SurfaceHolder$BadSurfaceTypeException extends java.lang.RuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =Callback )
@dalvik.annotation.EnclosingClass (value =Landroid/view/SurfaceHolder; )
public abstract interface class android.view.SurfaceHolder$Callback extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void surfaceChanged(
android.view.SurfaceHolder
int
int
int)

public abstract void surfaceCreated(
android.view.SurfaceHolder)

public abstract void surfaceDestroyed(
android.view.SurfaceHolder)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/SurfaceHolder$Callback;Landroid/view/SurfaceHolder$BadSurfaceTypeException; )
public abstract interface class android.view.SurfaceHolder extends java.lang.Object

----------------FIELDS----------------

public static final int SURFACE_TYPE_GPU

public static final int SURFACE_TYPE_HARDWARE

public static final int SURFACE_TYPE_NORMAL

public static final int SURFACE_TYPE_PUSH_BUFFERS
----------------METHODS----------------

public abstract void addCallback(
android.view.SurfaceHolder$Callback)

public abstract android.view.Surface getSurface()

public abstract android.graphics.Rect getSurfaceFrame()

public abstract boolean isCreating()

public abstract android.graphics.Canvas lockCanvas()

public abstract android.graphics.Canvas lockCanvas(
android.graphics.Rect)

public abstract void removeCallback(
android.view.SurfaceHolder$Callback)

public abstract void setFixedSize(
int
int)

public abstract void setFormat(
int)

public abstract void setKeepScreenOn(
boolean)

public abstract void setSizeFromLayout()

public abstract void setType(
int)

public abstract void unlockCanvasAndPost(
android.graphics.Canvas)

________________CLASS________________


public class android.view.SurfaceSession extends java.lang.Object

----------------FIELDS----------------

private int mClient
----------------METHODS----------------

public void <init>()

private native void destroy()

private native void init()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public native void kill()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/SurfaceView; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.view.SurfaceView$1 extends android.os.Handler

----------------FIELDS----------------

final android.view.SurfaceView this$0
----------------METHODS----------------

 void <init>(
android.view.SurfaceView)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/view/SurfaceView; )
 class android.view.SurfaceView$2 extends java.lang.Object implements android.view.SurfaceHolder

----------------FIELDS----------------

private static final java.lang.String LOG_TAG

final android.view.SurfaceView this$0
----------------METHODS----------------

 void <init>(
android.view.SurfaceView)

private final android.graphics.Canvas internalLockCanvas(
android.graphics.Rect)

public void addCallback(
android.view.SurfaceHolder$Callback)

public android.view.Surface getSurface()

public android.graphics.Rect getSurfaceFrame()

public boolean isCreating()

public android.graphics.Canvas lockCanvas()

public android.graphics.Canvas lockCanvas(
android.graphics.Rect)

public void removeCallback(
android.view.SurfaceHolder$Callback)

public void setFixedSize(
int
int)

public void setFormat(
int)

public void setKeepScreenOn(
boolean)

public void setSizeFromLayout()

public void setType(
int)

public void unlockCanvasAndPost(
android.graphics.Canvas)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =MyWindow )
@dalvik.annotation.EnclosingClass (value =Landroid/view/SurfaceView; )
 class android.view.SurfaceView$MyWindow extends android.view.IWindow$Stub

----------------FIELDS----------------

 int mCurHeight

 int mCurWidth

final android.view.SurfaceView this$0
----------------METHODS----------------

private void <init>(
android.view.SurfaceView)

 void <init>(
android.view.SurfaceView
android.view.SurfaceView$1)

public void dispatchAppVisibility(
boolean)

public void dispatchGetNewSurface()

public void dispatchKey(
android.view.KeyEvent)

public void dispatchPointer(
android.view.MotionEvent
long)

public void dispatchTrackball(
android.view.MotionEvent
long)

public void executeCommand(
java.lang.String
java.lang.String
android.os.ParcelFileDescriptor)

public void resized(
int
int
boolean)

public void windowFocusChanged(
boolean
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/View$1;Landroid/view/View$ScrollabilityCache;Landroid/view/View$AttachInfo;Landroid/view/View$BaseSavedState;Landroid/view/View$UnsetPressedState;Landroid/view/View$OnCreateContextMenuListener;Landroid/view/View$OnClickListener;Landroid/view/View$OnFocusChangeListener;Landroid/view/View$OnLongClickListener;Landroid/view/View$OnTouchListener;Landroid/view/View$OnKeyListener;Landroid/view/View$CheckForLongPress;Landroid/view/View$MeasureSpec; )
public class android.view.View extends java.lang.Object implements android.graphics.drawable.Drawable$Callback, android.view.KeyEvent$Callback

----------------FIELDS----------------

static final boolean $assertionsDisabled

static final int ALPHA_SET

static final int ANIMATION_STARTED

static final int CLICKABLE

private static final boolean DBG

static final int DISABLED

static final int DRAWABLE_STATE_DIRTY

static final int DRAWING_CACHE_ENABLED

public static final int DRAWING_CACHE_QUALITY_AUTO

private static final int[] DRAWING_CACHE_QUALITY_FLAGS

public static final int DRAWING_CACHE_QUALITY_HIGH

public static final int DRAWING_CACHE_QUALITY_LOW

static final int DRAWING_CACHE_QUALITY_MASK

static final int DRAWING_CACHE_VALID

static final int DRAWN

static final int DRAW_MASK

static final int DUPLICATE_PARENT_STATE

protected static final int[] EMPTY_STATE_SET

static final int ENABLED

protected static final int[] ENABLED_FOCUSED_SELECTED_STATE_SET

protected static final int[] ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET

protected static final int[] ENABLED_FOCUSED_STATE_SET

protected static final int[] ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET

static final int ENABLED_MASK

protected static final int[] ENABLED_SELECTED_STATE_SET

protected static final int[] ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET

protected static final int[] ENABLED_STATE_SET

protected static final int[] ENABLED_WINDOW_FOCUSED_STATE_SET

static final int FADING_EDGE_HORIZONTAL

static final int FADING_EDGE_MASK

static final int FADING_EDGE_NONE

static final int FADING_EDGE_VERTICAL

protected static final int[] FIRST_STATE_SET

private static final int FITS_SYSTEM_WINDOWS

private static final int FOCUSABLE

static final int FOCUSABLE_IN_TOUCH_MODE

private static final int FOCUSABLE_MASK

static final int FOCUSED

protected static final int[] FOCUSED_SELECTED_STATE_SET

protected static final int[] FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET

protected static final int[] FOCUSED_STATE_SET

protected static final int[] FOCUSED_WINDOW_FOCUSED_STATE_SET

public static final int FOCUS_BACKWARD

public static final int FOCUS_DOWN

public static final int FOCUS_FORWARD

public static final int FOCUS_LEFT

public static final int FOCUS_RIGHT

public static final int FOCUS_UP

static final int FORCE_LAYOUT

public static final int GONE

static final int HAS_BOUNDS

public static final int INVISIBLE

static final int IS_ROOT_NAMESPACE

public static final int KEEP_SCREEN_ON

protected static final int[] LAST_STATE_SET

private static final int LAYOUT_REQUIRED

static final int LONG_CLICKABLE

static final int MEASURED_DIMENSION_SET

protected static final int[] MIDDLE_STATE_SET

private static final int NOT_FOCUSABLE

public static final int NO_ID

static final int ONLY_DRAWS_BACKGROUND

private static final int PRESSED

protected static final int[] PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET

protected static final int[] PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET

protected static final int[] PRESSED_ENABLED_FOCUSED_STATE_SET

protected static final int[] PRESSED_ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET

protected static final int[] PRESSED_ENABLED_SELECTED_STATE_SET

protected static final int[] PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET

protected static final int[] PRESSED_ENABLED_STATE_SET

protected static final int[] PRESSED_ENABLED_WINDOW_FOCUSED_STATE_SET

protected static final int[] PRESSED_FIRST_STATE_SET

protected static final int[] PRESSED_FOCUSED_SELECTED_STATE_SET

protected static final int[] PRESSED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET

protected static final int[] PRESSED_FOCUSED_STATE_SET

protected static final int[] PRESSED_FOCUSED_WINDOW_FOCUSED_STATE_SET

protected static final int[] PRESSED_LAST_STATE_SET

protected static final int[] PRESSED_MIDDLE_STATE_SET

protected static final int[] PRESSED_SELECTED_STATE_SET

protected static final int[] PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET

protected static final int[] PRESSED_SINGLE_STATE_SET

protected static final int[] PRESSED_STATE_SET

protected static final int[] PRESSED_WINDOW_FOCUSED_STATE_SET

static final int REQUEST_TRANSPARENT_REGIONS

static final int SAVE_DISABLED

static final int SAVE_DISABLED_MASK

private static final int SAVE_STATE_CALLED

static final int SCROLLBARS_HORIZONTAL

static final int SCROLLBARS_INSET_MASK

public static final int SCROLLBARS_INSIDE_INSET

public static final int SCROLLBARS_INSIDE_OVERLAY

static final int SCROLLBARS_MASK

static final int SCROLLBARS_NONE

public static final int SCROLLBARS_OUTSIDE_INSET

static final int SCROLLBARS_OUTSIDE_MASK

public static final int SCROLLBARS_OUTSIDE_OVERLAY

static final int SCROLLBARS_STYLE_MASK

static final int SCROLLBARS_VERTICAL

static final int SELECTED

protected static final int[] SELECTED_STATE_SET

protected static final int[] SELECTED_WINDOW_FOCUSED_STATE_SET

protected static final int[] SINGLE_STATE_SET

static final int SKIP_DRAW

public static final int SOUND_EFFECTS_ENABLED

protected static final java.lang.String VIEW_LOG_TAG

private static final int[][] VIEW_STATE_SETS

private static final int[] VISIBILITY_FLAGS

static final int VISIBILITY_MASK

public static final int VISIBLE

static final int WANTS_FOCUS

static final int WILL_NOT_CACHE_DRAWING

static final int WILL_NOT_DRAW

protected static final int[] WINDOW_FOCUSED_STATE_SET

static long sInstanceCount

 android.view.View$AttachInfo mAttachInfo

private android.graphics.drawable.Drawable mBGDrawable

private int mBackgroundResource

private boolean mBackgroundSizeChanged
@android.view.ViewDebug$ExportedProperty
protected int mBottom

protected android.content.Context mContext

protected android.view.animation.Animation mCurrentAnimation

private int[] mDrawableState

private android.graphics.Bitmap mDrawingCache

private int mDrawingCacheBackgroundColor

private android.view.ViewTreeObserver mFloatingTreeObserver

private boolean mHasPerformedLongPress
@android.view.ViewDebug$ExportedProperty (resolveId =true )
 int mID

protected android.view.ViewGroup$LayoutParams mLayoutParams
@android.view.ViewDebug$ExportedProperty
protected int mLeft

protected final int[] mLocation
@android.view.ViewDebug$ExportedProperty
protected int mMeasuredHeight
@android.view.ViewDebug$ExportedProperty
protected int mMeasuredWidth

private int mMinHeight

private int mMinWidth

private int mNextFocusDownId

private int mNextFocusLeftId

private int mNextFocusRightId

private int mNextFocusUpId

private int mOldHeightMeasureSpec

private int mOldWidthMeasureSpec

protected android.view.View$OnClickListener mOnClickListener

protected android.view.View$OnCreateContextMenuListener mOnCreateContextMenuListener

protected android.view.View$OnFocusChangeListener mOnFocusChangeListener

private android.view.View$OnKeyListener mOnKeyListener

protected android.view.View$OnLongClickListener mOnLongClickListener

private android.view.View$OnTouchListener mOnTouchListener
@android.view.ViewDebug$ExportedProperty
protected int mPaddingBottom
@android.view.ViewDebug$ExportedProperty
protected int mPaddingLeft
@android.view.ViewDebug$ExportedProperty
protected int mPaddingRight
@android.view.ViewDebug$ExportedProperty
protected int mPaddingTop

protected android.view.ViewParent mParent

private android.view.View$CheckForLongPress mPendingCheckForLongPress

 int mPrivateFlags

private android.content.res.Resources mResources
@android.view.ViewDebug$ExportedProperty
protected int mRight

private android.view.View$ScrollabilityCache mScrollCache
@android.view.ViewDebug$ExportedProperty
protected int mScrollX
@android.view.ViewDebug$ExportedProperty
protected int mScrollY

protected java.lang.Object mTag

private final android.graphics.Rect mTempRect
@android.view.ViewDebug$ExportedProperty
protected int mTop

private android.view.TouchDelegate mTouchDelegate
@android.view.ViewDebug$ExportedProperty
protected int mUserPaddingBottom
@android.view.ViewDebug$ExportedProperty
protected int mUserPaddingRight

 int mViewFlags

 int mWindowAttachCount
----------------METHODS----------------

static void <clinit>()

 void <init>()

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static boolean access$102(
android.view.View
boolean)

private static void captureViewInfo(
java.lang.String
android.view.View)

protected static java.lang.String debugIndent(
int)

private static android.view.View findViewShouldExist(
android.view.View
int)

public static int getDefaultSize(
int
int)

private int getScrollBarPaddingBottom()

private int getScrollBarPaddingLeft()

private int getScrollBarPaddingRight()

private boolean hasAncestorThatBlocksDescendantFocus()

public static android.view.View inflate(
android.content.Context
int
android.view.ViewGroup)

private void initScrollCache()

protected static int[] mergeDrawableStates(
int[]
int[])

private void onDrawHorizontalScrollBar(
android.graphics.Canvas
android.widget.ScrollBarDrawable
int
int
int)

private void onDrawScrollBars(
android.graphics.Canvas)

private void onDrawVerticalScrollBar(
android.graphics.Canvas
android.widget.ScrollBarDrawable
int
int
int)

private void postCheckForLongClick()

private static java.lang.String printFlags(
int)

private static java.lang.String printPrivateFlags(
int)

private void recomputePadding()

public static int resolveSize(
int
int)

private static int[] stateSetUnion(
int[]
int[])
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/view/View;>;I)V )
public void addFocusables(
java.util.ArrayList
int)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/view/View;>;)V )
public void addTouchables(
java.util.ArrayList)

public void applyDrawableToTransparentRegion(
android.graphics.drawable.Drawable
android.graphics.Region)

 void assignParent(
android.view.ViewParent)

public void bringToFront()

public void buildDrawingCache()

public void cancelLongPress()

public void clearAnimation()

public void clearFocus()

 void clearFocusForRemoval()

protected int computeHorizontalScrollExtent()

protected int computeHorizontalScrollOffset()

protected int computeHorizontalScrollRange()

public void computeScroll()

protected int computeVerticalScrollExtent()

protected int computeVerticalScrollOffset()

protected int computeVerticalScrollRange()

public void createContextMenu(
android.view.ContextMenu)

public void debug()

protected void debug(
int)

public void destroyDrawingCache()

 void dispatchAttachedToWindow(
android.view.View$AttachInfo
int)

 void dispatchCollectViewAttributes(
int)

 void dispatchDetachedFromWindow()

protected void dispatchDraw(
android.graphics.Canvas)

public boolean dispatchKeyEvent(
android.view.KeyEvent)

public boolean dispatchKeyShortcutEvent(
android.view.KeyEvent)
@dalvik.annotation.Signature (value =(Landroid/util/SparseArray<Landroid/os/Parcelable;>;)V )
protected void dispatchRestoreInstanceState(
android.util.SparseArray)
@dalvik.annotation.Signature (value =(Landroid/util/SparseArray<Landroid/os/Parcelable;>;)V )
protected void dispatchSaveInstanceState(
android.util.SparseArray)

protected void dispatchSetPressed(
boolean)

protected void dispatchSetSelected(
boolean)

public boolean dispatchTouchEvent(
android.view.MotionEvent)

public boolean dispatchTrackballEvent(
android.view.MotionEvent)

public boolean dispatchUnhandledMove(
android.view.View
int)

public void dispatchWindowFocusChanged(
boolean)

public void dispatchWindowVisibilityChanged(
int)

public void draw(
android.graphics.Canvas)

protected void drawableStateChanged()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public android.view.View findFocus()

 android.view.View findUserSetNextFocus(
android.view.View
int)

public final android.view.View findViewById(
int)

protected android.view.View findViewTraversal(
int)

public final android.view.View findViewWithTag(
java.lang.Object)

protected android.view.View findViewWithTagTraversal(
java.lang.Object)

protected boolean fitSystemWindows(
android.graphics.Rect)

public android.view.View focusSearch(
int)

public void forceLayout()

public boolean gatherTransparentRegion(
android.graphics.Region)

public android.view.animation.Animation getAnimation()

public android.os.IBinder getApplicationWindowToken()

public android.graphics.drawable.Drawable getBackground()
@android.view.ViewDebug$ExportedProperty
public int getBaseline()
@android.view.ViewDebug$CapturedViewProperty
public final int getBottom()

protected float getBottomFadingEdgeStrength()
@android.view.ViewDebug$CapturedViewProperty
public final android.content.Context getContext()

protected android.view.ContextMenu$ContextMenuInfo getContextMenuInfo()

public final int[] getDrawableState()

public android.graphics.Bitmap getDrawingCache()

public int getDrawingCacheBackgroundColor()

public int getDrawingCacheQuality()

public void getDrawingRect(
android.graphics.Rect)

public long getDrawingTime()
@dalvik.annotation.Signature (value =(I)Ljava/util/ArrayList<Landroid/view/View;>; )
public java.util.ArrayList getFocusables(
int)

public void getFocusedRect(
android.graphics.Rect)

public final boolean getGlobalVisibleRect(
android.graphics.Rect)

public boolean getGlobalVisibleRect(
android.graphics.Rect
android.graphics.Point)

protected android.os.Handler getHandler()
@android.view.ViewDebug$ExportedProperty
public final int getHeight()

public void getHitRect(
android.graphics.Rect)

public int getHorizontalFadingEdgeLength()

protected int getHorizontalScrollbarHeight()
@android.view.ViewDebug$CapturedViewProperty
public int getId()

public boolean getKeepScreenOn()
@android.view.ViewDebug$ExportedProperty (deepExport =true prefix =layout_ )
public android.view.ViewGroup$LayoutParams getLayoutParams()
@android.view.ViewDebug$CapturedViewProperty
public final int getLeft()

protected float getLeftFadingEdgeStrength()

public final boolean getLocalVisibleRect(
android.graphics.Rect)

public void getLocationInWindow(
int[])

public void getLocationOnScreen(
int[])

public final int getMeasuredHeight()

public final int getMeasuredWidth()

public int getNextFocusDownId()

public int getNextFocusLeftId()

public int getNextFocusRightId()

public int getNextFocusUpId()

public android.view.View$OnFocusChangeListener getOnFocusChangeListener()

public int getPaddingBottom()

public int getPaddingLeft()

public int getPaddingRight()

public int getPaddingTop()

public final android.view.ViewParent getParent()

public android.content.res.Resources getResources()
@android.view.ViewDebug$CapturedViewProperty
public final int getRight()

protected float getRightFadingEdgeStrength()

public android.view.View getRootView()

public int getScrollBarStyle()

public final int getScrollX()

public final int getScrollY()

public int getSolidColor()

protected int getSuggestedMinimumHeight()

protected int getSuggestedMinimumWidth()
@android.view.ViewDebug$ExportedProperty
public java.lang.Object getTag()
@android.view.ViewDebug$CapturedViewProperty
public final int getTop()

protected float getTopFadingEdgeStrength()

public android.view.TouchDelegate getTouchDelegate()
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Landroid/view/View;>; )
public java.util.ArrayList getTouchables()

public int getVerticalFadingEdgeLength()

public int getVerticalScrollbarWidth()

public android.view.ViewTreeObserver getViewTreeObserver()
@android.view.ViewDebug$ExportedProperty (mapping =Landroid/view/ViewDebug$IntToString;:[from =0, to =VISIBLE]Landroid/view/ViewDebug$IntToString;:[from =4, to =INVISIBLE]Landroid/view/ViewDebug$IntToString;:[from =8, to =GONE] )
public int getVisibility()
@android.view.ViewDebug$ExportedProperty
public final int getWidth()

protected int getWindowAttachCount()

 android.view.IWindowSession getWindowSession()

public android.os.IBinder getWindowToken()

public int getWindowVisibility()

 void handleFocusGainInternal(
int
android.graphics.Rect)
@android.view.ViewDebug$ExportedProperty
public boolean hasFocus()

public boolean hasFocusable()

public boolean hasWindowFocus()

protected void initializeFadingEdge(
android.content.res.TypedArray)

protected void initializeScrollbars(
android.content.res.TypedArray)

public void invalidate()

public void invalidate(
int
int
int
int)

public void invalidate(
android.graphics.Rect)

public void invalidateDrawable(
android.graphics.drawable.Drawable)
@android.view.ViewDebug$ExportedProperty
public boolean isClickable()
@android.view.ViewDebug$ExportedProperty
public boolean isDrawingCacheEnabled()

public boolean isDuplicateParentStateEnabled()
@android.view.ViewDebug$ExportedProperty
public boolean isEnabled()
@android.view.ViewDebug$ExportedProperty
public final boolean isFocusable()
@android.view.ViewDebug$ExportedProperty
public final boolean isFocusableInTouchMode()
@android.view.ViewDebug$ExportedProperty
public boolean isFocused()

public boolean isHorizontalFadingEdgeEnabled()

public boolean isHorizontalScrollBarEnabled()
@android.view.ViewDebug$ExportedProperty
public boolean isInTouchMode()

public boolean isLayoutRequested()

public boolean isLongClickable()

public boolean isPressed()

public boolean isRootNamespace()

public boolean isSaveEnabled()
@android.view.ViewDebug$ExportedProperty
public boolean isSelected()

public boolean isShown()
@android.view.ViewDebug$ExportedProperty
public boolean isSoundEffectsEnabled()

public boolean isVerticalFadingEdgeEnabled()

public boolean isVerticalScrollBarEnabled()

public final void layout(
int
int
int
int)

public final void measure(
int
int)

 void needGlobalAttributesUpdate(
boolean)

public void offsetLeftAndRight(
int)

public void offsetTopAndBottom(
int)

protected void onAnimationEnd()

protected void onAnimationStart()

protected void onAttachedToWindow()

protected void onCreateContextMenu(
android.view.ContextMenu)

protected int[] onCreateDrawableState(
int)

protected void onDetachedFromWindow()

protected void onDraw(
android.graphics.Canvas)

protected void onFinishInflate()

protected void onFocusChanged(
boolean
int
android.graphics.Rect)

public boolean onKeyDown(
int
android.view.KeyEvent)

public boolean onKeyMultiple(
int
int
android.view.KeyEvent)

public boolean onKeyShortcut(
int
android.view.KeyEvent)

public boolean onKeyUp(
int
android.view.KeyEvent)

protected void onLayout(
boolean
int
int
int
int)

protected void onMeasure(
int
int)

protected void onRestoreInstanceState(
android.os.Parcelable)

protected android.os.Parcelable onSaveInstanceState()

protected void onScrollChanged(
int
int
int
int)

protected boolean onSetAlpha(
int)

protected void onSizeChanged(
int
int
int
int)

public boolean onTouchEvent(
android.view.MotionEvent)

public boolean onTrackballEvent(
android.view.MotionEvent)

public void onWindowFocusChanged(
boolean)

protected void onWindowVisibilityChanged(
int)

public boolean performClick()

 void performCollectViewAttributes(
int)

public boolean performLongClick()

protected void playSoundEffect(
int)

public boolean post(
java.lang.Runnable)

public boolean postDelayed(
java.lang.Runnable
long)

public void postInvalidate()

public void postInvalidate(
int
int
int
int)

public void postInvalidateDelayed(
long)

public void postInvalidateDelayed(
long
int
int
int
int)

public void refreshDrawableState()

public boolean removeCallbacks(
java.lang.Runnable)

public final boolean requestFocus()

public final boolean requestFocus(
int)

public boolean requestFocus(
int
android.graphics.Rect)

public final boolean requestFocusFromTouch()

public void requestLayout()

public boolean requestRectangleOnScreen(
android.graphics.Rect)

public boolean requestRectangleOnScreen(
android.graphics.Rect
boolean)
@dalvik.annotation.Signature (value =(Landroid/util/SparseArray<Landroid/os/Parcelable;>;)V )
public void restoreHierarchyState(
android.util.SparseArray)
@dalvik.annotation.Signature (value =(Landroid/util/SparseArray<Landroid/os/Parcelable;>;)V )
public void saveHierarchyState(
android.util.SparseArray)

public void scheduleDrawable(
android.graphics.drawable.Drawable
java.lang.Runnable
long)

public void scrollBy(
int
int)

public void scrollTo(
int
int)

public void setAnimation(
android.view.animation.Animation)

public void setBackgroundColor(
int)

public void setBackgroundDrawable(
android.graphics.drawable.Drawable)

public void setBackgroundResource(
int)

public void setClickable(
boolean)

public void setDrawingCacheBackgroundColor(
int)

public void setDrawingCacheEnabled(
boolean)

public void setDrawingCacheQuality(
int)

public void setDuplicateParentStateEnabled(
boolean)

public void setEnabled(
boolean)

public void setFadingEdgeLength(
int)

 void setFlags(
int
int)

public void setFocusable(
boolean)

public void setFocusableInTouchMode(
boolean)

protected boolean setFrame(
int
int
int
int)

public void setHorizontalFadingEdgeEnabled(
boolean)

public void setHorizontalScrollBarEnabled(
boolean)

public void setId(
int)

public void setIsRootNamespace(
boolean)

public void setKeepScreenOn(
boolean)

public void setLayoutParams(
android.view.ViewGroup$LayoutParams)

public void setLongClickable(
boolean)

protected final void setMeasuredDimension(
int
int)

public void setMinimumHeight(
int)

public void setMinimumWidth(
int)

public void setNextFocusDownId(
int)

public void setNextFocusLeftId(
int)

public void setNextFocusRightId(
int)

public void setNextFocusUpId(
int)

public void setOnClickListener(
android.view.View$OnClickListener)

public void setOnCreateContextMenuListener(
android.view.View$OnCreateContextMenuListener)

public void setOnFocusChangeListener(
android.view.View$OnFocusChangeListener)

public void setOnKeyListener(
android.view.View$OnKeyListener)

public void setOnLongClickListener(
android.view.View$OnLongClickListener)

public void setOnTouchListener(
android.view.View$OnTouchListener)

public void setPadding(
int
int
int
int)

public void setPressed(
boolean)

public void setSaveEnabled(
boolean)

public void setScrollBarStyle(
int)

public void setSelected(
boolean)

public void setSoundEffectsEnabled(
boolean)

public void setTag(
java.lang.Object)

public void setTouchDelegate(
android.view.TouchDelegate)

public void setVerticalFadingEdgeEnabled(
boolean)

public void setVerticalScrollBarEnabled(
boolean)

public void setVisibility(
int)

public void setWillNotCacheDrawing(
boolean)

public void setWillNotDraw(
boolean)

public boolean showContextMenu()

public void startAnimation(
android.view.animation.Animation)

 void unFocus()

public void unscheduleDrawable(
android.graphics.drawable.Drawable)

public void unscheduleDrawable(
android.graphics.drawable.Drawable
java.lang.Runnable)

protected boolean verifyDrawable(
android.graphics.drawable.Drawable)
@android.view.ViewDebug$ExportedProperty
public boolean willNotCacheDrawing()
@android.view.ViewDebug$ExportedProperty
public boolean willNotDraw()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/SurfaceView$MyWindow; )
public class android.view.SurfaceView extends android.view.View

----------------FIELDS----------------

private static final boolean DEBUG

static final int GET_NEW_SURFACE_MSG

static final int KEEP_SCREEN_ON_MSG

private static final java.lang.String TAG

private static final boolean localLOGV
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/view/SurfaceHolder$Callback;>; )
final java.util.ArrayList mCallbacks

final android.graphics.Rect mCoveredInsets

 boolean mDestroyReportNeeded

 boolean mDrawingStopped

 int mFormat

final android.os.Handler mHandler

 boolean mHaveFrame

 int mHeight

 boolean mIsCreating

 long mLastLockTime

final android.view.WindowManager$LayoutParams mLayout

 int mLeft

 boolean mNewSurfaceNeeded

 int mRequestedFormat

 int mRequestedHeight

 int mRequestedType

 boolean mRequestedVisible

 int mRequestedWidth

 android.view.IWindowSession mSession

final android.view.Surface mSurface

final android.graphics.Rect mSurfaceFrame

private android.view.SurfaceHolder mSurfaceHolder

final java.util.concurrent.locks.ReentrantLock mSurfaceLock

 int mTop

 int mType

 boolean mVisible

 int mWidth

final android.graphics.Rect mWinFrame

 android.view.SurfaceView$MyWindow mWindow
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static void access$100(
android.view.SurfaceView
boolean)

private void reportSurfaceDestroyed()

private void updateWindow(
boolean)

protected void dispatchDraw(
android.graphics.Canvas)

public void draw(
android.graphics.Canvas)

public boolean gatherTransparentRegion(
android.graphics.Region)

public android.view.SurfaceHolder getHolder()

 void handleGetNewSurface()

protected void onAttachedToWindow()

protected void onDetachedFromWindow()

protected void onMeasure(
int
int)

protected void onScrollChanged(
int
int
int
int)

protected void onSizeChanged(
int
int
int
int)

protected void onWindowVisibilityChanged(
int)

________________CLASS________________


public class android.view.TouchDelegate extends java.lang.Object

----------------FIELDS----------------

public static final int ABOVE

public static final int BELOW

public static final int TO_LEFT

public static final int TO_RIGHT

private android.graphics.Rect mBounds

private boolean mDelegateTargeted

private android.view.View mDelegateView

private android.graphics.Rect mSlopBounds
----------------METHODS----------------

public void <init>(
android.graphics.Rect
android.view.View)

public boolean onTouchEvent(
android.view.MotionEvent)

________________CLASS________________


public final class android.view.VelocityTracker extends java.lang.Object

----------------FIELDS----------------

static final boolean DEBUG

static final int LONGEST_PAST_TIME

static final int NUM_PAST

static final java.lang.String TAG

static final boolean localLOGV

static final android.view.VelocityTracker[] mPool

final long[] mPastTime

final float[] mPastX

final float[] mPastY

 float mXVelocity

 float mYVelocity
----------------METHODS----------------

static void <clinit>()

private void <init>()

private void addPoint(
float
float
long)

public static android.view.VelocityTracker obtain()

public void addMovement(
android.view.MotionEvent)

public void clear()

public void computeCurrentVelocity(
int)

public float getXVelocity()

public float getYVelocity()

public void recycle()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/view/View; )
 class android.view.View$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1544 name =SoundEffectPlayer )
@dalvik.annotation.EnclosingClass (value =Landroid/view/View$AttachInfo; )
abstract interface class android.view.View$AttachInfo$SoundEffectPlayer extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void playSoundEffect(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =AttachInfo )
@dalvik.annotation.EnclosingClass (value =Landroid/view/View; )
@dalvik.annotation.MemberClasses (value =Landroid/view/View$AttachInfo$SoundEffectPlayer; )
 class android.view.View$AttachInfo extends java.lang.Object

----------------FIELDS----------------

static final int INVALIDATE_MSG

static final int INVALIDATE_RECT_MSG

 boolean mAttributesChanged

 android.graphics.Canvas mCanvas

 long mDrawingTime

final android.os.Handler mHandler

 boolean mHasWindowFocus

 boolean mInTouchMode

 boolean mKeepScreenOn

 android.os.IBinder mPanelParentWindowToken

 boolean mRecomputeGlobalAttributes

 android.view.IWindowSession mSession

 android.view.View$AttachInfo$SoundEffectPlayer mSoundEffectPlayer

 android.view.Surface mSurface

final android.view.ViewTreeObserver mTreeObserver

 int mWindowLeft

 android.os.IBinder mWindowToken

 int mWindowTop

 int mWindowVisibility
----------------METHODS----------------

 void <init>(
android.os.Handler)

 void <init>(
android.os.Handler
android.view.View$AttachInfo$SoundEffectPlayer)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/view/View$BaseSavedState;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/view/View$BaseSavedState; )
final class android.view.View$BaseSavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.view.View$BaseSavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.view.View$BaseSavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/View; )
@dalvik.annotation.InnerClass (accessFlags =9 name =BaseSavedState )
public class android.view.View$BaseSavedState extends android.view.AbsSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/view/View$BaseSavedState;>; )
public static final android.os.Parcelable$Creator CREATOR
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.os.Parcel)

public void <init>(
android.os.Parcelable)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =CheckForLongPress )
@dalvik.annotation.EnclosingClass (value =Landroid/view/View; )
 class android.view.View$CheckForLongPress extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

private int mOriginalWindowAttachCount

final android.view.View this$0
----------------METHODS----------------

 void <init>(
android.view.View)

public void rememberWindowAttachCount()

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =MeasureSpec )
@dalvik.annotation.EnclosingClass (value =Landroid/view/View; )
public class android.view.View$MeasureSpec extends java.lang.Object

----------------FIELDS----------------

public static final int AT_MOST

public static final int EXACTLY

private static final int MODE_MASK

private static final int MODE_SHIFT

public static final int UNSPECIFIED
----------------METHODS----------------

public void <init>()

public static int getMode(
int)

public static int getSize(
int)

public static int makeMeasureSpec(
int
int)

public static java.lang.String toString(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/View; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnLongClickListener )
public abstract interface class android.view.View$OnLongClickListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onLongClick(
android.view.View)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnTouchListener )
@dalvik.annotation.EnclosingClass (value =Landroid/view/View; )
public abstract interface class android.view.View$OnTouchListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onTouch(
android.view.View
android.view.MotionEvent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/View; )
@dalvik.annotation.InnerClass (accessFlags =10 name =ScrollabilityCache )
 class android.view.View$ScrollabilityCache extends java.lang.Object

----------------FIELDS----------------

public int fadingEdgeLength

private int mLastColor

public final android.graphics.Matrix matrix

public final android.graphics.Paint paint

public android.widget.ScrollBarDrawable scrollBar

public int scrollBarSize

public android.graphics.Shader shader
----------------METHODS----------------

public void <init>()

public void setFadeColor(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/View; )
@dalvik.annotation.InnerClass (accessFlags =18 name =UnsetPressedState )
final class android.view.View$UnsetPressedState extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.view.View this$0
----------------METHODS----------------

private void <init>(
android.view.View)

 void <init>(
android.view.View
android.view.View$1)

public void run()

________________CLASS________________


public class android.view.ViewConfiguration extends java.lang.Object

----------------FIELDS----------------

private static final int EDGE_SLOP

private static final int FADING_EDGE_LENGTH

private static final int GLOBAL_ACTIONS_KEY_TIMEOUT

private static final int JUMP_TAP_TIMEOUT

private static final int LONG_PRESS_TIMEOUT

private static final int MAXIMUM_DRAWING_CACHE_SIZE

private static final int MINIMUM_FLING_VELOCITY

private static final int PRESSED_STATE_DURATION

private static final int SCROLL_BAR_SIZE

private static float SCROLL_FRICTION

private static final int TAP_TIMEOUT

private static final int TOUCH_SLOP

private static final int WINDOW_TOUCH_SLOP

private static final int ZOOM_CONTROLS_TIMEOUT
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static int getEdgeSlop()

public static int getFadingEdgeLength()

public static long getGlobalActionKeyTimeout()

public static int getJumpTapTimeout()

public static int getLongPressTimeout()

public static int getMaximumDrawingCacheSize()

public static int getMinimumFlingVelocity()

public static int getPressedStateDuration()

public static int getScrollBarSize()

public static float getScrollFriction()

public static int getTapTimeout()

public static int getTouchSlop()

public static int getWindowTouchSlop()

public static long getZoomControlsTimeout()

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.view.ViewDebug$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.view.View val$view
----------------METHODS----------------

 void <init>(
android.view.View)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.view.ViewDebug$2 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.graphics.Bitmap[] val$cache

final android.view.View val$captureView

final boolean val$hasCache

final java.util.concurrent.CountDownLatch val$latch
----------------METHODS----------------

 void <init>(
boolean
android.view.View
android.graphics.Bitmap[]
java.util.concurrent.CountDownLatch)

public void run()

________________CLASS________________

@java.lang.annotation.Retention (value =Ljava/lang/annotation/RetentionPolicy;!RUNTIME )
@dalvik.annotation.InnerClass (accessFlags =9737 name =CapturedViewProperty )
@dalvik.annotation.AnnotationDefault (value =Landroid/view/ViewDebug$CapturedViewProperty;:[retrieveReturn =false] )
@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewDebug; )
@java.lang.annotation.Target (value =Ljava/lang/annotation/ElementType;!FIELDLjava/lang/annotation/ElementType;!METHOD )
public abstract interface class android.view.ViewDebug$CapturedViewProperty extends java.lang.Object implements java.lang.annotation.Annotation

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean retrieveReturn()

________________CLASS________________

@java.lang.annotation.Retention (value =Ljava/lang/annotation/RetentionPolicy;!RUNTIME )
@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewDebug; )
@dalvik.annotation.AnnotationDefault (value =Landroid/view/ViewDebug$ExportedProperty;:[deepExport =false, mapping =, prefix =, resolveId =false] )
@java.lang.annotation.Target (value =Ljava/lang/annotation/ElementType;!FIELDLjava/lang/annotation/ElementType;!METHOD )
@dalvik.annotation.InnerClass (accessFlags =9737 name =ExportedProperty )
public abstract interface class android.view.ViewDebug$ExportedProperty extends java.lang.Object implements java.lang.annotation.Annotation

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean deepExport()

public abstract android.view.ViewDebug$IntToString[] mapping()

public abstract java.lang.String prefix()

public abstract boolean resolveId()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/view/ViewDebug$HierarchyTraceType;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewDebug; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =HierarchyTraceType )
public final class android.view.ViewDebug$HierarchyTraceType extends java.lang.Enum

----------------FIELDS----------------

private static final android.view.ViewDebug$HierarchyTraceType[] $VALUES

public static final android.view.ViewDebug$HierarchyTraceType BUILD_CACHE

public static final android.view.ViewDebug$HierarchyTraceType DRAW

public static final android.view.ViewDebug$HierarchyTraceType INVALIDATE

public static final android.view.ViewDebug$HierarchyTraceType INVALIDATE_CHILD

public static final android.view.ViewDebug$HierarchyTraceType INVALIDATE_CHILD_IN_PARENT

public static final android.view.ViewDebug$HierarchyTraceType ON_LAYOUT

public static final android.view.ViewDebug$HierarchyTraceType ON_MEASURE

public static final android.view.ViewDebug$HierarchyTraceType REQUEST_LAYOUT
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.view.ViewDebug$HierarchyTraceType valueOf(
java.lang.String)

public static android.view.ViewDebug$HierarchyTraceType[] values()

________________CLASS________________

@java.lang.annotation.Retention (value =Ljava/lang/annotation/RetentionPolicy;!RUNTIME )
@dalvik.annotation.InnerClass (accessFlags =9737 name =IntToString )
@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewDebug; )
@java.lang.annotation.Target (value =Ljava/lang/annotation/ElementType;!TYPE )
public abstract interface class android.view.ViewDebug$IntToString extends java.lang.Object implements java.lang.annotation.Annotation

----------------FIELDS----------------
----------------METHODS----------------

public abstract int from()

public abstract java.lang.String to()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =RecyclerTrace )
@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewDebug; )
 class android.view.ViewDebug$RecyclerTrace extends java.lang.Object

----------------FIELDS----------------

public int indexOnScreen

public int position

public android.view.ViewDebug$RecyclerTraceType type

public int view
----------------METHODS----------------

private void <init>()

 void <init>(
android.view.ViewDebug$1)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/view/ViewDebug$RecyclerTraceType;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =RecyclerTraceType )
@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewDebug; )
public final class android.view.ViewDebug$RecyclerTraceType extends java.lang.Enum

----------------FIELDS----------------

private static final android.view.ViewDebug$RecyclerTraceType[] $VALUES

public static final android.view.ViewDebug$RecyclerTraceType BIND_VIEW

public static final android.view.ViewDebug$RecyclerTraceType MOVE_FROM_ACTIVE_TO_SCRAP_HEAP

public static final android.view.ViewDebug$RecyclerTraceType MOVE_TO_ACTIVE_HEAP

public static final android.view.ViewDebug$RecyclerTraceType MOVE_TO_SCRAP_HEAP

public static final android.view.ViewDebug$RecyclerTraceType NEW_VIEW

public static final android.view.ViewDebug$RecyclerTraceType RECYCLE_FROM_ACTIVE_HEAP

public static final android.view.ViewDebug$RecyclerTraceType RECYCLE_FROM_SCRAP_HEAP
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.view.ViewDebug$RecyclerTraceType valueOf(
java.lang.String)

public static android.view.ViewDebug$RecyclerTraceType[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/ViewDebug$RecyclerTrace;Landroid/view/ViewDebug$RecyclerTraceType;Landroid/view/ViewDebug$HierarchyTraceType;Landroid/view/ViewDebug$CapturedViewProperty;Landroid/view/ViewDebug$IntToString;Landroid/view/ViewDebug$ExportedProperty; )
public class android.view.ViewDebug extends java.lang.Object

----------------FIELDS----------------

private static final int CAPTURE_TIMEOUT

private static final java.lang.String REMOTE_COMMAND_CAPTURE

private static final java.lang.String REMOTE_COMMAND_DUMP

private static final java.lang.String REMOTE_COMMAND_INVALIDATE

private static final java.lang.String REMOTE_COMMAND_REQUEST_LAYOUT

static final java.lang.String SYSTEM_PROPERTY_CAPTURE_EVENT

static final java.lang.String SYSTEM_PROPERTY_CAPTURE_VIEW

public static final boolean TRACE_HIERARCHY

public static final boolean TRACE_RECYCLER
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Class<*>;[Ljava/lang/reflect/Field;>; )
private static java.util.HashMap mCapturedViewFieldsForClasses
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Class<*>;[Ljava/lang/reflect/Method;>; )
private static java.util.HashMap mCapturedViewMethodsForClasses
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Class<*>;[Ljava/lang/reflect/Field;>; )
private static java.util.HashMap sFieldsForClasses

private static java.lang.String sHierarchyTracePrefix

private static java.io.BufferedWriter sHierarchyTraces

private static android.view.ViewRoot sHierarhcyRoot
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Class<*>;[Ljava/lang/reflect/Method;>; )
private static java.util.HashMap sMethodsForClasses

private static android.view.View sRecyclerOwnerView

private static java.lang.String sRecyclerTracePrefix
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/view/ViewDebug$RecyclerTrace;>; )
private static java.util.List sRecyclerTraces
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/view/View;>; )
private static java.util.List sRecyclerViews
----------------METHODS----------------

static void <clinit>()

public void <init>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private static void capture(
android.view.View
java.io.OutputStream
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/Object;Ljava/lang/Class<*>;Ljava/lang/String;)Ljava/lang/String; )
private static java.lang.String capturedViewExportFields(
java.lang.Object
java.lang.Class
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/Object;Ljava/lang/Class<*>;Ljava/lang/String;)Ljava/lang/String; )
private static java.lang.String capturedViewExportMethods(
java.lang.Object
java.lang.Class
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/Class<*>;)[Ljava/lang/reflect/Field; )
private static java.lang.reflect.Field[] capturedViewGetPropertyFields(
java.lang.Class)
@dalvik.annotation.Signature (value =(Ljava/lang/Class<*>;)[Ljava/lang/reflect/Method; )
private static java.lang.reflect.Method[] capturedViewGetPropertyMethods(
java.lang.Class)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static void dispatchCommand(
android.view.View
java.lang.String
java.lang.String
java.io.OutputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private static void dump(
android.view.View
java.io.OutputStream)

public static void dumpCapturedView(
java.lang.String
java.lang.Object)

private static boolean dumpView(
java.lang.Object
java.io.BufferedWriter
int)

private static void dumpViewHierarchy(
android.view.ViewGroup
java.io.BufferedWriter
int)

private static void dumpViewHierarchyWithProperties(
android.view.ViewGroup
java.io.BufferedWriter
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private static void dumpViewProperties(
java.lang.Object
java.io.BufferedWriter)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private static void dumpViewProperties(
java.lang.Object
java.io.BufferedWriter
java.lang.String)

private static boolean dumpViewWithProperties(
android.view.View
java.io.BufferedWriter
int)
@dalvik.annotation.Signature (value =(Ljava/lang/Object;Ljava/io/BufferedWriter;Ljava/lang/Class<*>;Ljava/lang/String;)V )
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private static void exportFields(
java.lang.Object
java.io.BufferedWriter
java.lang.Class
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
@dalvik.annotation.Signature (value =(Ljava/lang/Object;Ljava/io/BufferedWriter;Ljava/lang/Class<*>;Ljava/lang/String;)V )
private static void exportMethods(
java.lang.Object
java.io.BufferedWriter
java.lang.Class
java.lang.String)

private static android.view.View findView(
android.view.ViewGroup
java.lang.String
int)

private static android.view.View findViewByHashCode(
android.view.View
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/Class<*>;)[Ljava/lang/reflect/Field; )
private static java.lang.reflect.Field[] getExportedPropertyFields(
java.lang.Class)
@dalvik.annotation.Signature (value =(Ljava/lang/Class<*>;)[Ljava/lang/reflect/Method; )
private static java.lang.reflect.Method[] getExportedPropertyMethods(
java.lang.Class)

public static long getViewInstanceCount()

public static long getViewRootInstanceCount()

private static void invalidate(
android.view.View
java.lang.String)

private static boolean isRequestedView(
android.view.View
java.lang.String
int)

private static void requestLayout(
android.view.View
java.lang.String)

public static void startHierarchyTracing(
java.lang.String
android.view.View)

public static void startRecyclerTracing(
java.lang.String
android.view.View)

public static void stopHierarchyTracing()

public static void stopRecyclerTracing()

public static void trace(
android.view.View
android.view.ViewDebug$HierarchyTraceType)

public static transient void trace(
android.view.View
android.view.ViewDebug$RecyclerTraceType
int[])

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.view.ViewGroup$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.view.ViewGroup this$0
----------------METHODS----------------

 void <init>(
android.view.ViewGroup)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.view.ViewGroup$2 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.view.ViewGroup this$0
----------------METHODS----------------

 void <init>(
android.view.ViewGroup)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =LayoutParams )
@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewGroup; )
public class android.view.ViewGroup$LayoutParams extends java.lang.Object

----------------FIELDS----------------

public static final int FILL_PARENT

public static final int WRAP_CONTENT
@android.view.ViewDebug$ExportedProperty (mapping =Landroid/view/ViewDebug$IntToString;:[from =255, to =FILL_PARENT]Landroid/view/ViewDebug$IntToString;:[from =254, to =WRAP_CONTENT] )
public int height

public android.view.animation.LayoutAnimationController$AnimationParameters layoutAnimationParameters
@android.view.ViewDebug$ExportedProperty (mapping =Landroid/view/ViewDebug$IntToString;:[from =255, to =FILL_PARENT]Landroid/view/ViewDebug$IntToString;:[from =254, to =WRAP_CONTENT] )
public int width
----------------METHODS----------------

 void <init>()

public void <init>(
int
int)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.view.ViewGroup$LayoutParams)

protected static java.lang.String sizeToString(
int)

public java.lang.String debug(
java.lang.String)

protected void setBaseAttributes(
android.content.res.TypedArray
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewGroup; )
@dalvik.annotation.InnerClass (accessFlags =9 name =MarginLayoutParams )
public class android.view.ViewGroup$MarginLayoutParams extends android.view.ViewGroup$LayoutParams

----------------FIELDS----------------
@android.view.ViewDebug$ExportedProperty
public int bottomMargin
@android.view.ViewDebug$ExportedProperty
public int leftMargin
@android.view.ViewDebug$ExportedProperty
public int rightMargin
@android.view.ViewDebug$ExportedProperty
public int topMargin
----------------METHODS----------------

public void <init>(
int
int)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.view.ViewGroup$LayoutParams)

public void <init>(
android.view.ViewGroup$MarginLayoutParams)

public void setMargins(
int
int
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewGroup; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnHierarchyChangeListener )
public abstract interface class android.view.ViewGroup$OnHierarchyChangeListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onChildViewAdded(
android.view.View
android.view.View)

public abstract void onChildViewRemoved(
android.view.View
android.view.View)

________________CLASS________________


public abstract interface class android.view.ViewParent extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void bringChildToFront(
android.view.View)

public abstract void childDrawableStateChanged(
android.view.View)

public abstract void clearChildFocus(
android.view.View)

public abstract void createContextMenu(
android.view.ContextMenu)

public abstract android.view.View focusSearch(
android.view.View
int)

public abstract void focusableViewAvailable(
android.view.View)

public abstract boolean getChildVisibleRect(
android.view.View
android.graphics.Rect
android.graphics.Point)

public abstract android.view.ViewParent getParent()

public abstract void invalidateChild(
android.view.View
android.graphics.Rect)

public abstract android.view.ViewParent invalidateChildInParent(
int[]
android.graphics.Rect)

public abstract boolean isLayoutRequested()

public abstract void recomputeViewAttributes(
android.view.View)

public abstract void requestChildFocus(
android.view.View
android.view.View)

public abstract void requestDisallowInterceptTouchEvent(
boolean)

public abstract void requestLayout()

public abstract void requestTransparentRegion(
android.view.View)

public abstract boolean showContextMenuForChild(
android.view.View)

________________CLASS________________


public abstract interface class android.view.ViewManager extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void addView(
android.view.View
android.view.ViewGroup$LayoutParams)

public abstract void removeView(
android.view.View)

public abstract void updateViewLayout(
android.view.View
android.view.ViewGroup$LayoutParams)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/ViewGroup$MarginLayoutParams;Landroid/view/ViewGroup$LayoutParams;Landroid/view/ViewGroup$OnHierarchyChangeListener; )
public abstract class android.view.ViewGroup extends android.view.View implements android.view.ViewParent, android.view.ViewManager

----------------FIELDS----------------

private static final int ARRAY_CAPACITY_INCREMENT

private static final int ARRAY_INITIAL_CAPACITY

private static final int CHILD_LEFT_INDEX

private static final int CHILD_TOP_INDEX

protected static final int CLIP_TO_PADDING_MASK

private static final boolean DBG

private static final int[] DESCENDANT_FOCUSABILITY_FLAGS

private static final int FLAG_ADD_STATES_FROM_CHILDREN

private static final int FLAG_ALPHA_LOWER_THAN_ONE

private static final int FLAG_ALWAYS_DRAWN_WITH_CACHE

private static final int FLAG_ANIMATION_CACHE

private static final int FLAG_ANIMATION_DONE

private static final int FLAG_CHILDREN_DRAWN_WITH_CACHE

private static final int FLAG_CLEAR_TRANSFORMATION

private static final int FLAG_CLIP_CHILDREN

private static final int FLAG_CLIP_TO_PADDING

private static final int FLAG_DISALLOW_INTERCEPT

private static final int FLAG_INVALIDATE_REQUIRED

private static final int FLAG_MASK_FOCUSABILITY

private static final int FLAG_NOTIFY_ANIMATION_LISTENER

private static final int FLAG_NOTIFY_CHILDREN_ON_DRAWABLE_STATE_CHANGE

private static final int FLAG_OPTIMIZE_INVALIDATE

private static final int FLAG_PADDING_NOT_NULL

private static final int FLAG_RUN_ANIMATION

protected static final int FLAG_SUPPORT_STATIC_TRANSFORMATIONS

protected static final int FLAG_USE_CHILD_DRAWING_ORDER

public static final int FOCUS_AFTER_DESCENDANTS

public static final int FOCUS_BEFORE_DESCENDANTS

public static final int FOCUS_BLOCK_DESCENDANTS

public static final int PERSISTENT_ALL_CACHES

public static final int PERSISTENT_ANIMATION_CACHE

public static final int PERSISTENT_NO_CACHE

public static final int PERSISTENT_SCROLLING_CACHE

private android.view.animation.Animation$AnimationListener mAnimationListener

private final android.graphics.Paint mCachePaint

private final android.view.animation.Transformation mChildTransformation

private android.view.View[] mChildren

private int mChildrenCount
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/view/View;>; )
protected java.util.ArrayList mDisappearingChildren

private android.view.View mFocused

protected int mGroupFlags

private android.view.animation.LayoutAnimationController mLayoutAnimationController

private android.view.View mMotionTarget

protected android.view.ViewGroup$OnHierarchyChangeListener mOnHierarchyChangeListener

protected int mPersistentDrawingCache

private final android.graphics.Rect mTempRect
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static void access$000(
android.view.ViewGroup)

static android.view.animation.LayoutAnimationController access$100(
android.view.ViewGroup)

static android.view.animation.Animation$AnimationListener access$200(
android.view.ViewGroup)

private void addDisappearingView(
android.view.View)

private void addInArray(
android.view.View
int)

private void addViewInner(
android.view.View
int
android.view.ViewGroup$LayoutParams
boolean)

private void bindLayoutAnimation(
android.view.View)

private void finishAnimatingView(
android.view.View
android.view.animation.Animation)

public static int getChildMeasureSpec(
int
int
int)

private void initFromAttributes(
android.content.Context
android.util.AttributeSet)

private void initViewGroup()

private void notifyAnimationListener()

private void removeFromArray(
int)

private void removeFromArray(
int
int)

private void removeViewInternal(
int
android.view.View)

private void removeViewInternal(
android.view.View)

private void removeViewsInternal(
int
int)

private void setBooleanFlag(
int
boolean)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/view/View;>;I)V )
public void addFocusables(
java.util.ArrayList
int)

public boolean addStatesFromChildren()
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/view/View;>;)V )
public void addTouchables(
java.util.ArrayList)

public void addView(
android.view.View)

public void addView(
android.view.View
int)

public void addView(
android.view.View
int
int)

public void addView(
android.view.View
int
android.view.ViewGroup$LayoutParams)

public void addView(
android.view.View
android.view.ViewGroup$LayoutParams)

protected boolean addViewInLayout(
android.view.View
int
android.view.ViewGroup$LayoutParams)

protected boolean addViewInLayout(
android.view.View
int
android.view.ViewGroup$LayoutParams
boolean)

protected void attachLayoutAnimationParameters(
android.view.View
android.view.ViewGroup$LayoutParams
int
int)

protected void attachViewToParent(
android.view.View
int
android.view.ViewGroup$LayoutParams)

public void bringChildToFront(
android.view.View)

protected boolean canAnimate()

protected boolean checkLayoutParams(
android.view.ViewGroup$LayoutParams)

public void childDrawableStateChanged(
android.view.View)

protected void cleanupLayoutState(
android.view.View)

public void clearChildFocus(
android.view.View)

public void clearDisappearingChildren()

public void clearFocus()

protected void debug(
int)

protected void detachAllViewsFromParent()

protected void detachViewFromParent(
int)

protected void detachViewFromParent(
android.view.View)

protected void detachViewsFromParent(
int
int)

 void dispatchAttachedToWindow(
android.view.View$AttachInfo
int)

 void dispatchCollectViewAttributes(
int)

 void dispatchDetachedFromWindow()

protected void dispatchDraw(
android.graphics.Canvas)
@dalvik.annotation.Signature (value =(Landroid/util/SparseArray<Landroid/os/Parcelable;>;)V )
protected void dispatchFreezeSelfOnly(
android.util.SparseArray)

public boolean dispatchKeyEvent(
android.view.KeyEvent)
@dalvik.annotation.Signature (value =(Landroid/util/SparseArray<Landroid/os/Parcelable;>;)V )
protected void dispatchRestoreInstanceState(
android.util.SparseArray)
@dalvik.annotation.Signature (value =(Landroid/util/SparseArray<Landroid/os/Parcelable;>;)V )
protected void dispatchSaveInstanceState(
android.util.SparseArray)

protected void dispatchSetPressed(
boolean)

public void dispatchSetSelected(
boolean)
@dalvik.annotation.Signature (value =(Landroid/util/SparseArray<Landroid/os/Parcelable;>;)V )
protected void dispatchThawSelfOnly(
android.util.SparseArray)

public boolean dispatchTouchEvent(
android.view.MotionEvent)

public boolean dispatchTrackballEvent(
android.view.MotionEvent)

public boolean dispatchUnhandledMove(
android.view.View
int)

public void dispatchWindowFocusChanged(
boolean)

public void dispatchWindowVisibilityChanged(
int)

protected boolean drawChild(
android.graphics.Canvas
android.view.View
long)

protected void drawableStateChanged()

public android.view.View findFocus()

protected android.view.View findViewTraversal(
int)

protected android.view.View findViewWithTagTraversal(
java.lang.Object)

protected boolean fitSystemWindows(
android.graphics.Rect)

public android.view.View focusSearch(
android.view.View
int)

public void focusableViewAvailable(
android.view.View)

public boolean gatherTransparentRegion(
android.graphics.Region)

protected android.view.ViewGroup$LayoutParams generateDefaultLayoutParams()

public android.view.ViewGroup$LayoutParams generateLayoutParams(
android.util.AttributeSet)

protected android.view.ViewGroup$LayoutParams generateLayoutParams(
android.view.ViewGroup$LayoutParams)

public android.view.View getChildAt(
int)

public int getChildCount()

protected int getChildDrawingOrder(
int
int)

protected boolean getChildStaticTransformation(
android.view.View
android.view.animation.Transformation)

public boolean getChildVisibleRect(
android.view.View
android.graphics.Rect
android.graphics.Point)
@android.view.ViewDebug$ExportedProperty (mapping =Landroid/view/ViewDebug$IntToString;:[from =131072, to =FOCUS_BEFORE_DESCENDANTS]Landroid/view/ViewDebug$IntToString;:[from =262144, to =FOCUS_AFTER_DESCENDANTS]Landroid/view/ViewDebug$IntToString;:[from =393216, to =FOCUS_BLOCK_DESCENDANTS] )
public int getDescendantFocusability()

public android.view.View getFocusedChild()

public android.view.animation.LayoutAnimationController getLayoutAnimation()

public android.view.animation.Animation$AnimationListener getLayoutAnimationListener()
@android.view.ViewDebug$ExportedProperty (mapping =Landroid/view/ViewDebug$IntToString;:[from =0, to =NONE]Landroid/view/ViewDebug$IntToString;:[from =3, to =ANIMATION]Landroid/view/ViewDebug$IntToString;:[from =2, to =SCROLLING]Landroid/view/ViewDebug$IntToString;:[from =3, to =ALL] )
public int getPersistentDrawingCache()

 void handleFocusGainInternal(
int
android.graphics.Rect)

public boolean hasFocus()

public boolean hasFocusable()

public int indexOfChild(
android.view.View)

public final void invalidateChild(
android.view.View
android.graphics.Rect)

public android.view.ViewParent invalidateChildInParent(
int[]
android.graphics.Rect)
@android.view.ViewDebug$ExportedProperty
public boolean isAlwaysDrawnWithCacheEnabled()
@android.view.ViewDebug$ExportedProperty
public boolean isAnimationCacheEnabled()
@android.view.ViewDebug$ExportedProperty
protected boolean isChildrenDrawnWithCacheEnabled()

protected void measureChild(
android.view.View
int
int)

protected void measureChildWithMargins(
android.view.View
int
int
int
int)

protected void measureChildren(
int
int)

public void offsetChildrenTopAndBottom(
int)

public final void offsetDescendantRectToMyCoords(
android.view.View
android.graphics.Rect)

 void offsetRectBetweenParentAndChild(
android.view.View
android.graphics.Rect
boolean
boolean)

public final void offsetRectIntoDescendantCoords(
android.view.View
android.graphics.Rect)

protected void onAnimationEnd()

protected void onAnimationStart()

protected int[] onCreateDrawableState(
int)

public boolean onInterceptTouchEvent(
android.view.MotionEvent)

protected abstract void onLayout(
boolean
int
int
int
int)

protected boolean onRequestFocusInDescendants(
int
android.graphics.Rect)

public void recomputeViewAttributes(
android.view.View)

public void removeAllViews()

public void removeAllViewsInLayout()

protected void removeDetachedView(
android.view.View
boolean)

public void removeView(
android.view.View)

public void removeViewAt(
int)

public void removeViewInLayout(
android.view.View)

public void removeViews(
int
int)

public void removeViewsInLayout(
int
int)

public void requestChildFocus(
android.view.View
android.view.View)

public boolean requestChildRectangleOnScreen(
android.view.View
android.graphics.Rect
boolean)

public void requestDisallowInterceptTouchEvent(
boolean)

public boolean requestFocus(
int
android.graphics.Rect)

public void requestTransparentRegion(
android.view.View)

public void scheduleLayoutAnimation()

public void setAddStatesFromChildren(
boolean)

public void setAlwaysDrawnWithCacheEnabled(
boolean)

public void setAnimationCacheEnabled(
boolean)

protected void setChildrenDrawingCacheEnabled(
boolean)

protected void setChildrenDrawnWithCacheEnabled(
boolean)

public void setClipChildren(
boolean)

public void setClipToPadding(
boolean)

public void setDescendantFocusability(
int)

public void setLayoutAnimation(
android.view.animation.LayoutAnimationController)

public void setLayoutAnimationListener(
android.view.animation.Animation$AnimationListener)

public void setOnHierarchyChangeListener(
android.view.ViewGroup$OnHierarchyChangeListener)

public void setPadding(
int
int
int
int)

public void setPersistentDrawingCache(
int)

public boolean showContextMenuForChild(
android.view.View)

public void startLayoutAnimation()

 void unFocus()

public void updateViewLayout(
android.view.View
android.view.ViewGroup$LayoutParams)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewRoot; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.view.ViewRoot$1 extends java.lang.Object implements android.view.SurfaceHolder

----------------FIELDS----------------

final android.view.ViewRoot this$0
----------------METHODS----------------

 void <init>(
android.view.ViewRoot)

public void addCallback(
android.view.SurfaceHolder$Callback)

public android.view.Surface getSurface()

public android.graphics.Rect getSurfaceFrame()

public boolean isCreating()

public android.graphics.Canvas lockCanvas()

public android.graphics.Canvas lockCanvas(
android.graphics.Rect)

public void removeCallback(
android.view.SurfaceHolder$Callback)

public void setFixedSize(
int
int)

public void setFormat(
int)

public void setKeepScreenOn(
boolean)

public void setSizeFromLayout()

public void setType(
int)

public void unlockCanvasAndPost(
android.graphics.Canvas)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewRoot; )
@dalvik.annotation.InnerClass (accessFlags =25 name =CalledFromWrongThreadException )
public final class android.view.ViewRoot$CalledFromWrongThreadException extends android.util.AndroidRuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewRoot; )
@dalvik.annotation.InnerClass (accessFlags =26 name =RootHandler )
final class android.view.ViewRoot$RootHandler extends android.os.Handler

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

 void <init>(
android.view.ViewRoot$1)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =HandlerAction )
@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewRoot$RunQueue; )
 class android.view.ViewRoot$RunQueue$HandlerAction extends java.lang.Object

----------------FIELDS----------------

 java.lang.Runnable action

 long delay
----------------METHODS----------------

private void <init>()

 void <init>(
android.view.ViewRoot$1)

public boolean equals(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewRoot; )
@dalvik.annotation.MemberClasses (value =Landroid/view/ViewRoot$RunQueue$HandlerAction; )
@dalvik.annotation.InnerClass (accessFlags =24 name =RunQueue )
final class android.view.ViewRoot$RunQueue extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/view/ViewRoot$RunQueue$HandlerAction;>; )
private final java.util.ArrayList mActions
----------------METHODS----------------

 void <init>()

 void executeActions(
android.os.Handler)

 void post(
java.lang.Runnable)

 void postDelayed(
java.lang.Runnable
long)

 void removeCallbacks(
java.lang.Runnable)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewRoot; )
@dalvik.annotation.InnerClass (accessFlags =24 name =TrackballAxis )
final class android.view.ViewRoot$TrackballAxis extends java.lang.Object

----------------FIELDS----------------

 float absPosition

 float acceleration

 int dir

 int nonAccelMovement

 float position

 int step
----------------METHODS----------------

 void <init>()

 float collect(
float
java.lang.String)

 int generate(
float)

 void reset(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =W )
@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewRoot; )
 class android.view.ViewRoot$W extends android.view.IWindow$Stub

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/lang/ref/WeakReference<Landroid/view/ViewRoot;>; )
private java.lang.ref.WeakReference mViewRoot
----------------METHODS----------------

public void <init>(
android.view.ViewRoot)

private static int checkCallingPermission(
java.lang.String)

public void dispatchAppVisibility(
boolean)

public void dispatchGetNewSurface()

public void dispatchKey(
android.view.KeyEvent)

public void dispatchPointer(
android.view.MotionEvent
long)

public void dispatchTrackball(
android.view.MotionEvent
long)

public void executeCommand(
java.lang.String
java.lang.String
android.os.ParcelFileDescriptor)

public void resized(
int
int
boolean)

public void windowFocusChanged(
boolean
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/ViewRoot$RunQueue;Landroid/view/ViewRoot$RootHandler;Landroid/view/ViewRoot$CalledFromWrongThreadException;Landroid/view/ViewRoot$TrackballAxis;Landroid/view/ViewRoot$W; )
final class android.view.ViewRoot extends android.os.Handler implements android.view.ViewParent, android.view.View$AttachInfo$SoundEffectPlayer

----------------FIELDS----------------

private static final boolean DBG

private static final boolean DEBUG_DRAW

private static final boolean DEBUG_ORIENTATION

private static final boolean DEBUG_TRACKBALL

private static final int DIE

private static final int DISPATCH_APP_VISIBILITY

private static final int DISPATCH_GET_NEW_SURFACE

private static final int DISPATCH_KEY

private static final int DISPATCH_POINTER

private static final int DISPATCH_TRACKBALL

private static final int DO_TRAVERSAL

private static final boolean LOCAL_LOGV

static final int MAX_TRACKBALL_DELAY

static final boolean PROFILE_DRAWING

private static final boolean PROFILE_LAYOUT

private static final int RESIZED

private static final int RESIZED_REPORT

private static final boolean SHOW_FPS

private static final java.lang.String TAG

private static final boolean WATCH_POINTER

private static final int WINDOW_FOCUS_CHANGED

private static boolean mInitialized

private static final java.lang.Object mStaticInit

private static int sDrawTime

private static long sInstanceCount

static final android.view.ViewRoot$RunQueue sRunQueue
@dalvik.annotation.Signature (value =Ljava/lang/ThreadLocal<Landroid/os/Handler;>; )
static final java.lang.ThreadLocal sUiThreads

private static android.view.IWindowSession sWindowSession

 int mAddNesting

private boolean mAdded

private boolean mAddedTouchMode

private boolean mAppVisible

private final android.view.View$AttachInfo mAttachInfo

private android.media.AudioManager mAudioManager

private final android.graphics.Rect mCoveredInsets

private android.graphics.Rect mDirty

private javax.microedition.khronos.egl.EGL10 mEgl

private javax.microedition.khronos.egl.EGLContext mEglContext

private javax.microedition.khronos.egl.EGLDisplay mEglDisplay

private javax.microedition.khronos.egl.EGLSurface mEglSurface

private boolean mFirst

private android.view.View mFocusedView

private boolean mFullRedrawNeeded

private javax.microedition.khronos.opengles.GL11 mGL

private android.graphics.Canvas mGlCanvas

private boolean mGlWanted

private int mHeight

private android.view.SurfaceHolder mHolder

private long mLastTrackballTime

private boolean mLayoutRequested

private final android.view.WindowLeaked mLocation

private final android.graphics.Rect mNewCoveredInsets

private boolean mNewSurfaceNeeded

private final android.graphics.Region mPreviousTransparentRegion

private boolean mProfile

private boolean mReportNextDraw

private android.view.Surface mSurface

private final android.graphics.Rect mTempRect

private final java.lang.Thread mThread

private final android.view.ViewRoot$TrackballAxis mTrackballAxisX

private final android.view.ViewRoot$TrackballAxis mTrackballAxisY

private final android.graphics.Region mTransparentRegion

private boolean mTraversalScheduled

private boolean mUseGL

private android.view.View mView

private int mViewVisibility

private int mWidth

private boolean mWillDrawSoon

private final android.graphics.Rect mWinFrame

final android.view.ViewRoot$W mWindow

private final android.view.WindowManager$LayoutParams mWindowAttributes

private boolean mWindowAttributesChanged
----------------METHODS----------------

static void <clinit>()

public void <init>()

static android.view.View access$100(
android.view.ViewRoot)

static android.view.Surface access$200(
android.view.ViewRoot)

private static void captureKeyLog(
java.lang.String
android.view.KeyEvent)

private static void captureMotionLog(
java.lang.String
android.view.MotionEvent)

private void checkEglErrors()

private boolean checkForLeavingTouchModeAndConsume(
android.view.KeyEvent)

private void deliverKeyEvent(
android.view.KeyEvent
boolean)

private void deliverTrackballEvent(
android.view.MotionEvent)

private void destroyGL()

private void draw(
boolean)

private boolean ensureTouchModeLocally(
boolean)

private boolean enterTouchMode()

private android.view.ViewGroup findAncestorToTakeFocusInTouchMode(
android.view.View)

private android.media.AudioManager getAudioManager()

public static long getInstanceCount()

private int getRootMeasureSpec(
int
int)

private void initializeGL()

private void initializeGLInner()

static boolean isDirectional(
int)

static boolean isInTouchMode()

private static boolean isKeyboardKey(
android.view.KeyEvent)

private static boolean isViewDescendantOf(
android.view.View
android.view.View)

private boolean leaveTouchMode()

private static native void nativeAbandonGlCaches()

private static native void nativeShowFPS(
android.graphics.Canvas
int)

private void performTraversals()

public void bringChildToFront(
android.view.View)

 void checkThread()

public void childDrawableStateChanged(
android.view.View)

public void clearChildFocus(
android.view.View)

public void createContextMenu(
android.view.ContextMenu)

public void debug()

public void die(
boolean)

public void dispatchAppVisibility(
boolean)

 void dispatchDetachedFromWindow()

public void dispatchGetNewSurface()

public void dispatchKey(
android.view.KeyEvent)

public void dispatchPointer(
android.view.MotionEvent
long)

public void dispatchResized(
int
int
boolean)

public void dispatchTrackball(
android.view.MotionEvent
long)

 boolean ensureTouchMode(
boolean)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public android.view.View focusSearch(
android.view.View
int)

public void focusableViewAvailable(
android.view.View)

public boolean getChildVisibleRect(
android.view.View
android.graphics.Rect
android.graphics.Point)

 int getHostVisibility()

final android.view.WindowLeaked getLocation()

public android.view.ViewParent getParent()

public android.view.View getView()

protected android.graphics.Rect getWindowFrame()

 void handleAppVisibility(
boolean)

 void handleGetNewSurface()

public void handleMessage(
android.os.Message)

public void invalidateChild(
android.view.View
android.graphics.Rect)

public android.view.ViewParent invalidateChildInParent(
int[]
android.graphics.Rect)

public boolean isLayoutRequested()

public void playSoundEffect(
int)

public void profile()

public void recomputeViewAttributes(
android.view.View)

public void requestChildFocus(
android.view.View
android.view.View)

public void requestDisallowInterceptTouchEvent(
boolean)

public void requestLayout()

public void requestTransparentRegion(
android.view.View)

public void scheduleTraversals()

public void setLayoutParams(
android.view.WindowManager$LayoutParams)

public void setView(
android.view.View
android.view.WindowManager$LayoutParams
android.view.View)

public boolean showContextMenuForChild(
android.view.View)

public void unscheduleTraversals()

public void windowFocusChanged(
boolean
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewStub; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnInflateListener )
public abstract interface class android.view.ViewStub$OnInflateListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onInflate(
android.view.ViewStub
android.view.View)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/ViewStub$OnInflateListener; )
public final class android.view.ViewStub extends android.view.View

----------------FIELDS----------------

private android.view.ViewStub$OnInflateListener mInflateListener

private int mInflatedId

private int mLayoutResource
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
int)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private void initialize(
android.content.Context)

protected void dispatchDraw(
android.graphics.Canvas)

public void draw(
android.graphics.Canvas)

public int getInflatedId()

public int getLayoutResource()

public android.view.View inflate()

protected void onMeasure(
int
int)

public void setInflatedId(
int)

public void setLayoutResource(
int)

public void setOnInflateListener(
android.view.ViewStub$OnInflateListener)

public void setVisibility(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewTreeObserver; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnGlobalFocusChangeListener )
public abstract interface class android.view.ViewTreeObserver$OnGlobalFocusChangeListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onGlobalFocusChanged(
android.view.View
android.view.View)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnPreDrawListener )
@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewTreeObserver; )
public abstract interface class android.view.ViewTreeObserver$OnPreDrawListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onPreDraw()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/ViewTreeObserver; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnTouchModeChangeListener )
public abstract interface class android.view.ViewTreeObserver$OnTouchModeChangeListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onTouchModeChanged(
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/ViewTreeObserver$OnTouchModeChangeListener;Landroid/view/ViewTreeObserver$OnPreDrawListener;Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;Landroid/view/ViewTreeObserver$OnGlobalFocusChangeListener; )
public final class android.view.ViewTreeObserver extends java.lang.Object

----------------FIELDS----------------

private boolean mAlive
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/view/ViewTreeObserver$OnGlobalFocusChangeListener;>; )
private java.util.ArrayList mOnGlobalFocusListeners
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;>; )
private java.util.ArrayList mOnGlobalLayoutListeners
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/view/ViewTreeObserver$OnPreDrawListener;>; )
private java.util.ArrayList mOnPreDrawListeners
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/view/ViewTreeObserver$OnTouchModeChangeListener;>; )
private java.util.ArrayList mOnTouchModeChangeListeners
----------------METHODS----------------

 void <init>()

private void checkIsAlive()

private void kill()

public void addOnGlobalFocusChangeListener(
android.view.ViewTreeObserver$OnGlobalFocusChangeListener)

public void addOnGlobalLayoutListener(
android.view.ViewTreeObserver$OnGlobalLayoutListener)

public void addOnPreDrawListener(
android.view.ViewTreeObserver$OnPreDrawListener)

public void addOnTouchModeChangeListener(
android.view.ViewTreeObserver$OnTouchModeChangeListener)

final void dispatchOnGlobalFocusChange(
android.view.View
android.view.View)

public final void dispatchOnGlobalLayout()

public final boolean dispatchOnPreDraw()

final void dispatchOnTouchModeChanged(
boolean)

public boolean isAlive()

 void merge(
android.view.ViewTreeObserver)

public void removeGlobalOnLayoutListener(
android.view.ViewTreeObserver$OnGlobalLayoutListener)

public void removeOnGlobalFocusChangeListener(
android.view.ViewTreeObserver$OnGlobalFocusChangeListener)

public void removeOnPreDrawListener(
android.view.ViewTreeObserver$OnPreDrawListener)

public void removeOnTouchModeChangeListener(
android.view.ViewTreeObserver$OnTouchModeChangeListener)

________________CLASS________________


public class android.view.VolumePanel extends android.os.Handler

----------------FIELDS----------------

private static final int BEEP_DURATION

private static final int FREE_DELAY

private static boolean LOGD

private static final int MAX_VOLUME

private static final int MSG_FREE_RESOURCES

private static final int MSG_PLAY_SOUND

private static final int MSG_STOP_SOUNDS

private static final int MSG_VIBRATE

private static final int MSG_VOLUME_CHANGED

public static final int PLAY_SOUND_DELAY

private static final java.lang.String TAG

public static final int VIBRATE_DELAY

private static final int VIBRATE_DURATION

private final java.lang.String ALARM_VOLUME_TEXT

private final java.lang.String INCALL_VOLUME_TEXT

private final java.lang.String MUSIC_VOLUME_TEXT

private final java.lang.String RINGTONE_VOLUME_TEXT

private final java.lang.String UNKNOWN_VOLUME_TEXT

protected android.media.AudioService mAudioService

protected android.content.Context mContext

private android.widget.ProgressBar mLevel

private android.widget.TextView mMessage

private android.widget.ImageView mOtherStreamIcon

private android.widget.ImageView mRingerStreamIcon

private android.widget.Toast mToast

private android.media.ToneGenerator[] mToneGenerators

private android.os.Vibrator mVibrator

private android.view.View mView
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context
android.media.AudioService)

private android.media.ToneGenerator getOrCreateToneGenerator(
int)

private void setOtherIcon(
int)

private void setRingerIcon(
int)

public void handleMessage(
android.os.Message)

protected void onFreeResources()

protected void onPlaySound(
int
int)

protected void onShowVolumeChanged(
int
int)

protected void onStopSounds()

protected void onVibrate()

protected void onVolumeChanged(
int
int)

public void postVolumeChanged(
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$BadTokenException; )
public abstract interface class android.view.WindowManager extends java.lang.Object implements android.view.ViewManager

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.view.Display getDefaultDisplay()

public abstract void removeViewImmediate(
android.view.View)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/Window; )
@dalvik.annotation.InnerClass (accessFlags =2 name =LocalWindowManager )
 class android.view.Window$LocalWindowManager extends java.lang.Object implements android.view.WindowManager

----------------FIELDS----------------

 android.view.WindowManager mWindowManager

final android.view.Window this$0
----------------METHODS----------------

 void <init>(
android.view.Window
android.view.WindowManager)

public final void addView(
android.view.View
android.view.ViewGroup$LayoutParams)

public android.view.Display getDefaultDisplay()

public final void removeView(
android.view.View)

public final void removeViewImmediate(
android.view.View)

public void updateViewLayout(
android.view.View
android.view.ViewGroup$LayoutParams)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/Window$LocalWindowManager;Landroid/view/Window$Callback; )
public abstract class android.view.Window extends java.lang.Object

----------------FIELDS----------------

protected static final int DEFAULT_FEATURES

public static final int FEATURE_CONTEXT_MENU

public static final int FEATURE_CUSTOM_TITLE

public static final int FEATURE_INDETERMINATE_PROGRESS

public static final int FEATURE_LEFT_ICON

public static final int FEATURE_NO_TITLE

private static final int FEATURE_OPENGL

public static final int FEATURE_OPTIONS_PANEL

public static final int FEATURE_PROGRESS

public static final int FEATURE_RIGHT_ICON

public static final int ID_ANDROID_CONTENT

public static final int PROGRESS_END

public static final int PROGRESS_INDETERMINATE_OFF

public static final int PROGRESS_INDETERMINATE_ON

public static final int PROGRESS_SECONDARY_END

public static final int PROGRESS_SECONDARY_START

public static final int PROGRESS_START

public static final int PROGRESS_VISIBILITY_OFF

public static final int PROGRESS_VISIBILITY_ON

private android.view.Window mActiveChild

private java.lang.String mAppName

private android.os.IBinder mAppToken

private android.view.Window$Callback mCallback

private android.view.Window mContainer

private final android.content.Context mContext

private int mDefaultWindowFormat

private int mFeatures

private int mForcedWindowFlags

private boolean mHasChildren

private boolean mHaveWindowFormat

private boolean mIsActive

private int mLocalFeatures

private final android.view.WindowManager$LayoutParams mWindowAttributes

private android.view.WindowManager mWindowManager

private android.content.res.TypedArray mWindowStyle
----------------METHODS----------------

public void <init>(
android.content.Context)

static java.lang.String access$000(
android.view.Window)

static android.view.Window access$100(
android.view.Window)

static android.os.IBinder access$200(
android.view.Window)

static android.content.Context access$300(
android.view.Window)

public abstract void addContentView(
android.view.View
android.view.ViewGroup$LayoutParams)

public void addFlags(
int)

public void clearFlags(
int)

public abstract void closeAllPanels()

public abstract void closePanel(
int)

public android.view.View findViewById(
int)

public final android.view.WindowManager$LayoutParams getAttributes()

public final android.view.Window$Callback getCallback()

public final android.view.Window getContainer()

public final android.content.Context getContext()

public abstract android.view.View getCurrentFocus()

public abstract android.view.View getDecorView()

protected final int getFeatures()

protected final int getForcedWindowFlags()

public abstract android.view.LayoutInflater getLayoutInflater()

protected final int getLocalFeatures()

public abstract int getVolumeControlStream()

public android.view.WindowManager getWindowManager()

public final android.content.res.TypedArray getWindowStyle()

public final boolean hasChildren()

public final boolean isActive()

public abstract boolean isFloating()

public abstract boolean isShortcutKey(
int
android.view.KeyEvent)

public final void makeActive()

protected abstract void onActive()

public abstract void onConfigurationChanged(
android.content.res.Configuration)

public abstract void openPanel(
int
android.view.KeyEvent)

public abstract android.view.View peekDecorView()

public abstract boolean performContextMenuIdentifierAction(
int
int)

public abstract boolean performPanelIdentifierAction(
int
int
int)

public abstract boolean performPanelShortcut(
int
int
android.view.KeyEvent
int)

public boolean requestFeature(
int)

public abstract void restoreHierarchyState(
android.os.Bundle)

public abstract android.os.Bundle saveHierarchyState()

public void setAttributes(
android.view.WindowManager$LayoutParams)

public abstract void setBackgroundDrawable(
android.graphics.drawable.Drawable)

public void setBackgroundDrawableResource(
int)

public void setCallback(
android.view.Window$Callback)

public abstract void setChildDrawable(
int
android.graphics.drawable.Drawable)

public abstract void setChildInt(
int
int)

public void setContainer(
android.view.Window)

public abstract void setContentView(
int)

public abstract void setContentView(
android.view.View)

public abstract void setContentView(
android.view.View
android.view.ViewGroup$LayoutParams)

protected void setDefaultWindowFormat(
int)

public abstract void setFeatureDrawable(
int
android.graphics.drawable.Drawable)

public abstract void setFeatureDrawableAlpha(
int
int)

public abstract void setFeatureDrawableResource(
int
int)

public abstract void setFeatureDrawableUri(
int
android.net.Uri)

public abstract void setFeatureInt(
int
int)

public void setFlags(
int
int)

public void setFormat(
int)

public void setGravity(
int)

public void setLayout(
int
int)

public abstract void setTitle(
java.lang.CharSequence)

public abstract void setTitleColor(
int)

public void setType(
int)

public abstract void setVolumeControlStream(
int)

public void setWindowManager(
android.view.WindowManager
android.os.IBinder
java.lang.String)

public abstract boolean superDispatchKeyEvent(
android.view.KeyEvent)

public abstract boolean superDispatchTouchEvent(
android.view.MotionEvent)

public abstract boolean superDispatchTrackballEvent(
android.view.MotionEvent)

public abstract void takeKeyEvents(
boolean)

public abstract void togglePanel(
int
android.view.KeyEvent)

________________CLASS________________


final class android.view.WindowLeaked extends android.util.AndroidRuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =BadTokenException )
@dalvik.annotation.EnclosingClass (value =Landroid/view/WindowManager; )
public class android.view.WindowManager$BadTokenException extends java.lang.RuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/WindowManager$LayoutParams; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/view/WindowManager$LayoutParams;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.view.WindowManager$LayoutParams$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.view.WindowManager$LayoutParams createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.view.WindowManager$LayoutParams[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/WindowManager; )
@dalvik.annotation.InnerClass (accessFlags =9 name =LayoutParams )
public class android.view.WindowManager$LayoutParams extends android.view.ViewGroup$LayoutParams implements android.os.Parcelable

----------------FIELDS----------------

public static final int ALPHA_CHANGED

public static final int ANIMATION_CHANGED
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/view/WindowManager$LayoutParams;>; )
public static final android.os.Parcelable$Creator CREATOR

public static final int DIM_AMOUNT_CHANGED

public static final int FIRST_APPLICATION_WINDOW

public static final int FIRST_SUB_WINDOW

public static final int FIRST_SYSTEM_WINDOW

public static final int FLAGS_CHANGED

public static final int FLAG_BLUR_BEHIND

public static final int FLAG_DIM_BEHIND

public static final int FLAG_DITHER

public static final int FLAG_FORCE_NOT_FULLSCREEN

public static final int FLAG_FULLSCREEN

public static final int FLAG_IGNORE_CHEEK_PRESSES

public static final int FLAG_KEEP_SCREEN_ON

public static final int FLAG_LAYOUT_INSET_DECOR

public static final int FLAG_LAYOUT_IN_SCREEN

public static final int FLAG_LAYOUT_NO_LIMITS

public static final int FLAG_NOT_FOCUSABLE

public static final int FLAG_NOT_TOUCHABLE

public static final int FLAG_NOT_TOUCH_MODAL

public static final int FLAG_SCALED

public static final int FLAG_SECURE

public static final int FLAG_SYSTEM_ERROR

public static final int FLAG_TOUCHABLE_WHEN_WAKING

public static final int FORMAT_CHANGED

public static final int LAST_APPLICATION_WINDOW

public static final int LAST_SUB_WINDOW

public static final int LAST_SYSTEM_WINDOW

public static final int LAYOUT_CHANGED

public static final int MEMORY_TYPE_CHANGED

public static final int MEMORY_TYPE_GPU

public static final int MEMORY_TYPE_HARDWARE

public static final int MEMORY_TYPE_NORMAL

public static final int MEMORY_TYPE_PUSH_BUFFERS

public static final int TITLE_CHANGED

public static final int TYPE_APPLICATION

public static final int TYPE_APPLICATION_MEDIA

public static final int TYPE_APPLICATION_PANEL

public static final int TYPE_APPLICATION_STARTING

public static final int TYPE_APPLICATION_SUB_PANEL

public static final int TYPE_BASE_APPLICATION

public static final int TYPE_CHANGED

public static final int TYPE_KEYGUARD

public static final int TYPE_KEYGUARD_DIALOG

public static final int TYPE_PHONE

public static final int TYPE_PRIORITY_PHONE

public static final int TYPE_SEARCH_BAR

public static final int TYPE_STATUS_BAR

public static final int TYPE_STATUS_BAR_PANEL

public static final int TYPE_SYSTEM_ALERT

public static final int TYPE_SYSTEM_DIALOG

public static final int TYPE_SYSTEM_ERROR

public static final int TYPE_SYSTEM_OVERLAY

public static final int TYPE_TOAST

public float alpha

public float dimAmount

public int flags

public int format

public int gravity

public float horizontalMargin

public float horizontalWeight

private java.lang.CharSequence mTitle

public int memoryType

public java.lang.String packageName

public android.os.IBinder token

public int type

public float verticalMargin

public float verticalWeight

public int windowAnimations

public int x

public int y
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
int)

public void <init>(
int
int)

public void <init>(
int
int
int)

public void <init>(
int
int
int
int
int)

public void <init>(
int
int
int
int
int
int
int)

public void <init>(
android.os.Parcel)

public final int copyFrom(
android.view.WindowManager$LayoutParams)

public java.lang.String debug(
java.lang.String)

public int describeContents()

public final java.lang.CharSequence getTitle()

public final void setTitle(
java.lang.CharSequence)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public class android.view.WindowManagerImpl extends java.lang.Object implements android.view.WindowManager

----------------FIELDS----------------

public static final int ADD_APP_EXITING

public static final int ADD_BAD_APP_TOKEN

public static final int ADD_BAD_SUBWINDOW_TOKEN

public static final int ADD_DUPLICATE_ADD

public static final int ADD_FLAG_APP_VISIBLE

public static final int ADD_FLAG_IN_TOUCH_MODE

public static final int ADD_MULTIPLE_SINGLETON

public static final int ADD_NOT_APP_TOKEN

public static final int ADD_OKAY

public static final int ADD_PERMISSION_DENIED

public static final int ADD_STARTING_NOT_NEEDED

public static final int RELAYOUT_FIRST_TIME

public static final int RELAYOUT_IN_TOUCH_MODE

private static android.view.WindowManagerImpl mWindowManager

private android.view.WindowManager$LayoutParams[] mParams

private android.view.ViewRoot[] mRoots

private android.view.View[] mViews
----------------METHODS----------------

static void <clinit>()

public void <init>()

private void addView(
android.view.View
android.view.ViewGroup$LayoutParams
boolean)

private int findViewLocked(
android.view.View
boolean)

public static android.view.WindowManagerImpl getDefault()

private static void removeItem(
java.lang.Object[]
java.lang.Object[]
int)

public void addView(
android.view.View)

public void addView(
android.view.View
android.view.ViewGroup$LayoutParams)

public void addViewNesting(
android.view.View
android.view.ViewGroup$LayoutParams)

public void closeAll()

public void closeAll(
android.os.IBinder
java.lang.String
java.lang.String)

 void finishRemoveViewLocked(
android.view.View
int)

public android.view.Display getDefaultDisplay()

public void removeView(
android.view.View)

public void removeViewImmediate(
android.view.View)

 android.view.View removeViewLocked(
int)

public void updateViewLayout(
android.view.View
android.view.ViewGroup$LayoutParams)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/WindowManagerPolicy; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnKeyguardExitResult )
public abstract interface class android.view.WindowManagerPolicy$OnKeyguardExitResult extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onKeyguardExitResult(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =WindowState )
@dalvik.annotation.EnclosingClass (value =Landroid/view/WindowManagerPolicy; )
public abstract interface class android.view.WindowManagerPolicy$WindowState extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void computeFrameLw(
int
int
int
int
int
int
int
int)

public abstract boolean fillsScreenLw(
int
int
boolean)

public abstract android.view.WindowManagerPolicy$WindowState getAppStartingWindow()

public abstract android.view.IApplicationToken getAppToken()

public abstract android.view.WindowManager$LayoutParams getAttrs()

public abstract android.graphics.Rect getFrameLw()

public abstract boolean hasAppShownWindows()

public abstract boolean hasAppStartingIcon()

public abstract boolean hasDrawnLw()

public abstract void hideLw()

public abstract boolean isDisplayedLw()

public abstract void setCoveredInsetsLw(
int
int
int
int)

public abstract void setFrameLw(
int
int
int
int)

public abstract void showLw()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/WindowManagerPolicy$OnKeyguardExitResult;Landroid/view/WindowManagerPolicy$WindowState; )
public abstract interface class android.view.WindowManagerPolicy extends java.lang.Object

----------------FIELDS----------------

public static final int ACTION_GO_TO_SLEEP

public static final int ACTION_PASS_TO_USER

public static final int ACTION_POKE_USER_ACTIVITY

public static final int FLAG_ALT

public static final int FLAG_ALT_GR

public static final int FLAG_BRIGHT_HERE

public static final int FLAG_CAPS_LOCK

public static final int FLAG_LAUNCHER

public static final int FLAG_MENU

public static final int FLAG_SHIFT

public static final int FLAG_WAKE

public static final int FLAG_WAKE_DROPPED

public static final int FLAG_WOKE_HERE

public static final int OFF_BECAUSE_OF_TIMEOUT

public static final int OFF_BECAUSE_OF_USER

public static final int TRANSIT_ACTIVITY_CLOSE

public static final int TRANSIT_ACTIVITY_OPEN

public static final int TRANSIT_ENTER

public static final int TRANSIT_EXIT

public static final int TRANSIT_HIDE

public static final int TRANSIT_NONE

public static final int TRANSIT_PREVIEW_DONE

public static final int TRANSIT_SHOW

public static final int TRANSIT_TASK_CLOSE

public static final int TRANSIT_TASK_OPEN

public static final int TRANSIT_TASK_TO_BACK

public static final int TRANSIT_TASK_TO_FRONT

public static final int USE_LAST_ROTATION

public static final boolean WATCH_POINTER
----------------METHODS----------------

public abstract android.view.View addStartingWindow(
android.os.IBinder
java.lang.String
int
java.lang.CharSequence
int
int)

public abstract void adjustConfigurationLw(
android.content.res.Configuration)

public abstract void adjustWindowParamsLw(
android.view.WindowManager$LayoutParams)

public abstract void animatingWindowLw(
android.view.WindowManagerPolicy$WindowState
android.view.WindowManager$LayoutParams)

public abstract void beginAnimationLw(
int
int)

public abstract void beginLayoutLw(
int
int)

public abstract int checkAddPermission(
android.view.WindowManager$LayoutParams)

public abstract void enableKeyguard(
boolean)

public abstract void enableScreenAfterBoot()

public abstract void exitKeyguardSecurely(
android.view.WindowManagerPolicy$OnKeyguardExitResult)

public abstract boolean finishAnimationLw()

public abstract void finishLayoutLw()

public abstract void getCoveredInsetHintLw(
android.view.WindowManager$LayoutParams
android.graphics.Rect)

public abstract boolean inKeyguardRestrictedKeyInputMode()

public abstract void init(
android.content.Context
android.view.IWindowManager
android.os.LocalPowerManager)

public abstract boolean interceptKeyTi(
android.view.WindowManagerPolicy$WindowState
int
int
boolean
int)

public abstract int interceptKeyTq(
android.view.RawInputEvent
boolean)

public abstract boolean isAppSwitchKeyTqTiLwLi(
int)

public abstract boolean isCheekPressedAgainstScreen(
android.view.MotionEvent)

public abstract boolean isMovementKeyTi(
int)

public abstract boolean isWakeAbsMovementTq(
int
int
android.view.RawInputEvent)

public abstract boolean isWakeRelMovementTq(
int
int
android.view.RawInputEvent)

public abstract boolean keyguardIsShowingTq()

public abstract void layoutWindowLw(
android.view.WindowManagerPolicy$WindowState
android.view.WindowManager$LayoutParams
android.view.WindowManagerPolicy$WindowState)

public abstract int prepareAddWindowLw(
android.view.WindowManagerPolicy$WindowState
android.view.WindowManager$LayoutParams)

public abstract boolean preprocessInputEventTq(
android.view.RawInputEvent)

public abstract void removeStartingWindow(
android.os.IBinder
android.view.View)

public abstract void removeWindowLw(
android.view.WindowManagerPolicy$WindowState)

public abstract int rotationForOrientation(
int)

public abstract void screenTurnedOff(
int)

public abstract void screenTurnedOn()

public abstract int selectAnimationLw(
android.view.WindowManagerPolicy$WindowState
int)

public abstract void setCurrentOrientation(
int)

public abstract int subWindowTypeToLayerLw(
int)

public abstract void systemReady()

public abstract int windowTypeToLayerLw(
int)

________________CLASS________________


public abstract interface class android.view.animation.Interpolator extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract float getInterpolation(
float)

________________CLASS________________


public class android.view.animation.AccelerateDecelerateInterpolator extends java.lang.Object implements android.view.animation.Interpolator

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
android.content.Context
android.util.AttributeSet)

public float getInterpolation(
float)

________________CLASS________________


public class android.view.animation.AccelerateInterpolator extends java.lang.Object implements android.view.animation.Interpolator

----------------FIELDS----------------

private float mFactor
----------------METHODS----------------

public void <init>()

public void <init>(
float)

public void <init>(
android.content.Context
android.util.AttributeSet)

public float getInterpolation(
float)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/animation/Animation$AnimationListener;Landroid/view/animation/Animation$Description; )
public abstract class android.view.animation.Animation extends java.lang.Object

----------------FIELDS----------------

public static final int ABSOLUTE

public static final int INFINITE

public static final int RELATIVE_TO_PARENT

public static final int RELATIVE_TO_SELF

public static final int RESTART

public static final int REVERSE

public static final int START_ON_FIRST_FRAME

public static final int ZORDER_BOTTOM

public static final int ZORDER_NORMAL

public static final int ZORDER_TOP

 boolean mCycleFlip

 long mDuration

 boolean mEnded

 boolean mFillAfter

 boolean mFillBefore

 boolean mInitialized

 android.view.animation.Interpolator mInterpolator

 android.view.animation.Animation$AnimationListener mListener

private boolean mMore

 int mRepeatCount

 int mRepeatMode

 int mRepeated

 long mStartOffset

 long mStartTime

 boolean mStarted

private int mZAdjustment
----------------METHODS----------------

public void <init>()

public void <init>(
android.content.Context
android.util.AttributeSet)

protected void applyTransformation(
float
android.view.animation.Transformation)

protected void ensureInterpolator()

public long getDuration()

public boolean getFillAfter()

public boolean getFillBefore()

public android.view.animation.Interpolator getInterpolator()

public int getRepeatCount()

public int getRepeatMode()

public long getStartOffset()

public long getStartTime()

public boolean getTransformation(
long
android.view.animation.Transformation)

public int getZAdjustment()

public boolean hasEnded()

public boolean hasStarted()

public void initialize(
int
int
int
int)

public boolean isInitialized()

public void reset()

protected float resolveSize(
int
float
int
int)

public void restrictDuration(
long)

public void scaleCurrentDuration(
float)

public void setAnimationListener(
android.view.animation.Animation$AnimationListener)

public void setDuration(
long)

public void setFillAfter(
boolean)

public void setFillBefore(
boolean)

public void setInterpolator(
android.content.Context
int)

public void setInterpolator(
android.view.animation.Interpolator)

public void setRepeatCount(
int)

public void setRepeatMode(
int)

public void setStartOffset(
long)

public void setStartTime(
long)

public void setZAdjustment(
int)

public void start()

public void startNow()

public boolean willChangeBounds()

public boolean willChangeTransformationMatrix()

________________CLASS________________


public class android.view.animation.AlphaAnimation extends android.view.animation.Animation

----------------FIELDS----------------

private float mFromAlpha

private float mToAlpha
----------------METHODS----------------

public void <init>(
float
float)

public void <init>(
android.content.Context
android.util.AttributeSet)

protected void applyTransformation(
float
android.view.animation.Transformation)

public boolean willChangeBounds()

public boolean willChangeTransformationMatrix()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =AnimationListener )
@dalvik.annotation.EnclosingClass (value =Landroid/view/animation/Animation; )
public abstract interface class android.view.animation.Animation$AnimationListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onAnimationEnd(
android.view.animation.Animation)

public abstract void onAnimationRepeat(
android.view.animation.Animation)

public abstract void onAnimationStart(
android.view.animation.Animation)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =12 name =Description )
@dalvik.annotation.EnclosingClass (value =Landroid/view/animation/Animation; )
public class android.view.animation.Animation$Description extends java.lang.Object

----------------FIELDS----------------

public int type

public float value
----------------METHODS----------------

protected void <init>()

static android.view.animation.Animation$Description parseValue(
android.util.TypedValue)

________________CLASS________________


public class android.view.animation.AnimationSet extends android.view.animation.Animation

----------------FIELDS----------------

private static final int PROPERTY_DURATION_MASK

private static final int PROPERTY_FILL_AFTER_MASK

private static final int PROPERTY_FILL_BEFORE_MASK

private static final int PROPERTY_MORPH_MATRIX_MASK

private static final int PROPERTY_REPEAT_MODE_MASK

private static final int PROPERTY_SHARE_INTERPOLATOR_MASK

private static final int PROPERTY_START_OFFSET_MASK
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/view/animation/Animation;>; )
private java.util.ArrayList mAnimations

private int mFlags

private long mLastEnd

private long[] mStoredOffsets

private android.view.animation.Transformation mTempTransformation
----------------METHODS----------------

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
boolean)

private void init()

private void setFlag(
int
boolean)

public void addAnimation(
android.view.animation.Animation)
@dalvik.annotation.Signature (value =()Ljava/util/List<Landroid/view/animation/Animation;>; )
public java.util.List getAnimations()

public long getDuration()

public long getStartTime()

public boolean getTransformation(
long
android.view.animation.Transformation)

public void initialize(
int
int
int
int)

 void restoreChildrenStartOffset()

public void restrictDuration(
long)

 void saveChildrenStartOffset(
long)

public void scaleCurrentDuration(
float)

public void setDuration(
long)

public void setFillAfter(
boolean)

public void setFillBefore(
boolean)

public void setRepeatMode(
int)

public void setStartOffset(
long)

public void setStartTime(
long)

public boolean willChangeTransformationMatrix()

________________CLASS________________


public class android.view.animation.AnimationUtils extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private static android.view.animation.Animation createAnimationFromXml(
android.content.Context
org.xmlpull.v1.XmlPullParser)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private static android.view.animation.Animation createAnimationFromXml(
android.content.Context
org.xmlpull.v1.XmlPullParser
android.view.animation.AnimationSet
android.util.AttributeSet)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private static android.view.animation.Interpolator createInterpolatorFromXml(
android.content.Context
org.xmlpull.v1.XmlPullParser)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private static android.view.animation.LayoutAnimationController createLayoutAnimationFromXml(
android.content.Context
org.xmlpull.v1.XmlPullParser)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private static android.view.animation.LayoutAnimationController createLayoutAnimationFromXml(
android.content.Context
org.xmlpull.v1.XmlPullParser
android.util.AttributeSet)

public static long currentAnimationTimeMillis()
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public static android.view.animation.Animation loadAnimation(
android.content.Context
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public static android.view.animation.Interpolator loadInterpolator(
android.content.Context
int)
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public static android.view.animation.LayoutAnimationController loadLayoutAnimation(
android.content.Context
int)

public static android.view.animation.Animation makeInAnimation(
android.content.Context
boolean)

public static android.view.animation.Animation makeInChildBottomAnimation(
android.content.Context)

public static android.view.animation.Animation makeOutAnimation(
android.content.Context
boolean)

________________CLASS________________


public class android.view.animation.CycleInterpolator extends java.lang.Object implements android.view.animation.Interpolator

----------------FIELDS----------------

private float mCycles
----------------METHODS----------------

public void <init>(
float)

public void <init>(
android.content.Context
android.util.AttributeSet)

public float getInterpolation(
float)

________________CLASS________________


public class android.view.animation.DecelerateInterpolator extends java.lang.Object implements android.view.animation.Interpolator

----------------FIELDS----------------

private float mFactor
----------------METHODS----------------

public void <init>()

public void <init>(
float)

public void <init>(
android.content.Context
android.util.AttributeSet)

public float getInterpolation(
float)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/animation/LayoutAnimationController; )
@dalvik.annotation.InnerClass (accessFlags =9 name =AnimationParameters )
public class android.view.animation.LayoutAnimationController$AnimationParameters extends java.lang.Object

----------------FIELDS----------------

public int count

public int index
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/animation/GridLayoutAnimationController; )
@dalvik.annotation.InnerClass (accessFlags =9 name =AnimationParameters )
public class android.view.animation.GridLayoutAnimationController$AnimationParameters extends android.view.animation.LayoutAnimationController$AnimationParameters

----------------FIELDS----------------

public int column

public int columnsCount

public int row

public int rowsCount
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/animation/LayoutAnimationController$1;Landroid/view/animation/LayoutAnimationController$DelayedAnimation;Landroid/view/animation/LayoutAnimationController$AnimationParameters; )
public class android.view.animation.LayoutAnimationController extends java.lang.Object

----------------FIELDS----------------

public static final int ORDER_NORMAL

public static final int ORDER_RANDOM

public static final int ORDER_REVERSE

protected android.view.animation.Animation mAnimation

private float mDelay

private long mDuration

protected android.view.animation.Interpolator mInterpolator

private long mMaxDelay

private int mOrder

protected java.util.Random mRandomizer
----------------METHODS----------------

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.view.animation.Animation)

public void <init>(
android.view.animation.Animation
float)

public android.view.animation.Animation getAnimation()

public final android.view.animation.Animation getAnimationForView(
android.view.View)

public float getDelay()

protected long getDelayForView(
android.view.View)

public android.view.animation.Interpolator getInterpolator()

public int getOrder()

protected int getTransformedIndex(
android.view.animation.LayoutAnimationController$AnimationParameters)

public boolean isDone()

public void setAnimation(
android.content.Context
int)

public void setAnimation(
android.view.animation.Animation)

public void setDelay(
float)

public void setInterpolator(
android.content.Context
int)

public void setInterpolator(
android.view.animation.Interpolator)

public void setOrder(
int)

public void start()

public boolean willOverlap()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/view/animation/GridLayoutAnimationController$AnimationParameters; )
public class android.view.animation.GridLayoutAnimationController extends android.view.animation.LayoutAnimationController

----------------FIELDS----------------

public static final int DIRECTION_BOTTOM_TO_TOP

public static final int DIRECTION_HORIZONTAL_MASK

public static final int DIRECTION_LEFT_TO_RIGHT

public static final int DIRECTION_RIGHT_TO_LEFT

public static final int DIRECTION_TOP_TO_BOTTOM

public static final int DIRECTION_VERTICAL_MASK

public static final int PRIORITY_COLUMN

public static final int PRIORITY_NONE

public static final int PRIORITY_ROW

private float mColumnDelay

private int mDirection

private int mDirectionPriority

private float mRowDelay
----------------METHODS----------------

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.view.animation.Animation)

public void <init>(
android.view.animation.Animation
float
float)

private int getTransformedColumnIndex(
android.view.animation.GridLayoutAnimationController$AnimationParameters)

private int getTransformedRowIndex(
android.view.animation.GridLayoutAnimationController$AnimationParameters)

public float getColumnDelay()

protected long getDelayForView(
android.view.View)

public int getDirection()

public int getDirectionPriority()

public float getRowDelay()

public void setColumnDelay(
float)

public void setDirection(
int)

public void setDirectionPriority(
int)

public void setRowDelay(
float)

public boolean willOverlap()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/animation/LayoutAnimationController; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.view.animation.LayoutAnimationController$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/view/animation/LayoutAnimationController; )
@dalvik.annotation.InnerClass (accessFlags =10 name =DelayedAnimation )
 class android.view.animation.LayoutAnimationController$DelayedAnimation extends android.view.animation.Animation

----------------FIELDS----------------

private final android.view.animation.Animation mAnimation

private final long mDelay
----------------METHODS----------------

private void <init>(
long
android.view.animation.Animation)

 void <init>(
long
android.view.animation.Animation
android.view.animation.LayoutAnimationController$1)

public long getDuration()

public boolean getFillAfter()

public boolean getFillBefore()

public android.view.animation.Interpolator getInterpolator()

public int getRepeatMode()

public long getStartOffset()

public long getStartTime()

public boolean getTransformation(
long
android.view.animation.Transformation)

public void initialize(
int
int
int
int)

public boolean isInitialized()

public void reset()

public void scaleCurrentDuration(
float)

public void setDuration(
long)

public void setFillAfter(
boolean)

public void setFillBefore(
boolean)

public void setInterpolator(
android.view.animation.Interpolator)

public void setRepeatMode(
int)

public void setStartOffset(
long)

public void setStartTime(
long)

public boolean willChangeBounds()

public boolean willChangeTransformationMatrix()

________________CLASS________________


public class android.view.animation.LinearInterpolator extends java.lang.Object implements android.view.animation.Interpolator

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
android.content.Context
android.util.AttributeSet)

public float getInterpolation(
float)

________________CLASS________________


public class android.view.animation.RotateAnimation extends android.view.animation.Animation

----------------FIELDS----------------

private float mFromDegrees

private float mPivotX

private int mPivotXType

private float mPivotXValue

private float mPivotY

private int mPivotYType

private float mPivotYValue

private float mToDegrees
----------------METHODS----------------

public void <init>(
float
float)

public void <init>(
float
float
float
float)

public void <init>(
float
float
int
float
int
float)

public void <init>(
android.content.Context
android.util.AttributeSet)

protected void applyTransformation(
float
android.view.animation.Transformation)

public void initialize(
int
int
int
int)

________________CLASS________________


public class android.view.animation.ScaleAnimation extends android.view.animation.Animation

----------------FIELDS----------------

private float mFromX

private float mFromY

private float mPivotX

private int mPivotXType

private float mPivotXValue

private float mPivotY

private int mPivotYType

private float mPivotYValue

private float mToX

private float mToY
----------------METHODS----------------

public void <init>(
float
float
float
float)

public void <init>(
float
float
float
float
float
float)

public void <init>(
float
float
float
float
int
float
int
float)

public void <init>(
android.content.Context
android.util.AttributeSet)

protected void applyTransformation(
float
android.view.animation.Transformation)

public void initialize(
int
int
int
int)

________________CLASS________________


public class android.view.animation.Transformation extends java.lang.Object

----------------FIELDS----------------

public static int TYPE_ALPHA

public static int TYPE_BOTH

public static int TYPE_IDENTITY

public static int TYPE_MATRIX

protected float mAlpha

protected android.graphics.Matrix mMatrix

protected int mTransformationType
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void clear()

public void compose(
android.view.animation.Transformation)

public float getAlpha()

public android.graphics.Matrix getMatrix()

public int getTransformationType()

public void set(
android.view.animation.Transformation)

public void setAlpha(
float)

public void setTransformationType(
int)

public java.lang.String toString()

________________CLASS________________


public class android.view.animation.TranslateAnimation extends android.view.animation.Animation

----------------FIELDS----------------

private float mFromXDelta

private int mFromXType

private float mFromXValue

private float mFromYDelta

private int mFromYType

private float mFromYValue

private float mToXDelta

private int mToXType

private float mToXValue

private float mToYDelta

private int mToYType

private float mToYValue
----------------METHODS----------------

public void <init>(
float
float
float
float)

public void <init>(
int
float
int
float
int
float
int
float)

public void <init>(
android.content.Context
android.util.AttributeSet)

protected void applyTransformation(
float
android.view.animation.Transformation)

public void initialize(
int
int
int
int)

________________CLASS________________


 class android.webkit.BrowserFrame extends android.os.Handler

----------------FIELDS----------------

static final int FRAME_COMPLETED

static final int FRAME_LOADTYPE_BACK

static final int FRAME_LOADTYPE_FORWARD

static final int FRAME_LOADTYPE_INDEXEDBACKFORWARD

static final int FRAME_LOADTYPE_REDIRECT

static final int FRAME_LOADTYPE_RELOAD

static final int FRAME_LOADTYPE_RELOADALLOWINGSTALEDATA

static final int FRAME_LOADTYPE_REPLACE

static final int FRAME_LOADTYPE_SAME

static final int FRAME_LOADTYPE_STANDARD

private static final java.lang.String LOGTAG

private static final int MAX_OUTSTANDING_REQUESTS

static final int POLICY_FUNCTION

static final int POLICY_IGNORE

static final int POLICY_USE

private static final int TRANSITION_SWITCH_THRESHOLD

static android.webkit.JWebCoreJavaBridge sJavaBridge

private final android.webkit.CallbackProxy mCallbackProxy

private boolean mCommitted

private java.lang.String mCompletedUrl

private final android.content.Context mContext

private java.lang.String mCurrentUrl

private final android.webkit.WebViewDatabase mDatabase

private boolean mFirstLayoutDone

private boolean mIsMainFrame

private java.util.HashMap mJSInterfaceMap

private boolean mLoadInitFromJava

private int mLoadType

 int mNativeFrame

private final android.webkit.WebSettings mSettings

private final android.webkit.WebViewCore mWebViewCore
----------------METHODS----------------

public void <init>(
android.content.Context
android.webkit.WebViewCore
android.webkit.CallbackProxy
android.webkit.WebSettings)

private void closeWindow(
android.webkit.WebViewCore)

private android.webkit.BrowserFrame createWindow(
boolean
boolean)

private void decidePolicyForFormResubmission(
int)

private void didReceiveIcon(
android.graphics.Bitmap)

private native java.lang.String documentAsText()

private native java.lang.String externalRepresentation()

private native java.util.HashMap getFormTextData()

private native java.lang.String[] getUsernamePassword()

private native boolean hasPasswordField()

private void loadFinished(
java.lang.String
int
boolean)

private void loadStarted(
java.lang.String
android.graphics.Bitmap
int
boolean)

private native void nativeAddJavascriptInterface(
int
java.lang.Object
java.lang.String)

private native void nativeCallPolicyFunction(
int
int)

private native void nativeCreateFrame(
android.content.res.AssetManager
android.webkit.WebBackForwardList)

private native void nativeCreateView(
android.webkit.WebViewCore)

private native void nativeDetachView()

private native void nativeLoadData(
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

private native void nativeLoadUrl(
java.lang.String)

private void reportError(
int
java.lang.String
java.lang.String)

private void requestFocus()

private native void setCacheDisabled(
boolean)

private void setProgress(
int)

private void setTitle(
java.lang.String)

private native void setUsernamePassword(
java.lang.String
java.lang.String)

private android.webkit.LoadListener startLoadingResource(
int
java.lang.String
java.lang.String
java.util.HashMap
java.lang.String
int
boolean
boolean)

private void transitionToCommitted(
int
boolean)

private void updateVisitedHistory(
java.lang.String
boolean)

private void windowObjectCleared(
int)

public void addJavascriptInterface(
java.lang.Object
java.lang.String)

public native boolean cacheDisabled()

 void certificate(
android.net.http.SslCertificate)

public native void clearCache()

 boolean committed()

 java.lang.String currentUrl()

public void destroy()

 void didFirstLayout(
java.lang.String)

public void documentAsText(
android.os.Message)

public native boolean documentHasImages()

public void externalRepresentation(
android.os.Message)

 boolean firstLayoutDone()

 android.webkit.CallbackProxy getCallbackProxy()

 java.lang.String getUserAgentString()

public native void goBackOrForward(
int)

public void handleMessage(
android.os.Message)

public boolean handleUrl(
java.lang.String)

public void loadData(
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

 int loadType()

public void loadUrl(
java.lang.String)

public native void nativeDestroyFrame()

public native void reload(
boolean)

public native void stopLoading()

public native java.lang.String stringByEvaluatingJavaScriptFromString(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Chunk )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/ByteArrayBuilder; )
public class android.webkit.ByteArrayBuilder$Chunk extends java.lang.Object

----------------FIELDS----------------

public byte[] mArray

public int mLength
----------------METHODS----------------

public void <init>(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/webkit/ByteArrayBuilder$Chunk; )
 class android.webkit.ByteArrayBuilder extends java.lang.Object

----------------FIELDS----------------

private static final int DEFAULT_CAPACITY
@dalvik.annotation.Signature (value =Ljava/util/LinkedList<Landroid/webkit/ByteArrayBuilder$Chunk;>; )
private java.util.LinkedList mChunks

private int mMinCapacity
@dalvik.annotation.Signature (value =Ljava/util/LinkedList<Landroid/webkit/ByteArrayBuilder$Chunk;>; )
private java.util.LinkedList mPool
----------------METHODS----------------

public void <init>()

public void <init>(
int)

private android.webkit.ByteArrayBuilder$Chunk appendChunk(
int)

private void init(
int)

private android.webkit.ByteArrayBuilder$Chunk obtainChunk(
int)

public void append(
byte[])

public void append(
byte[]
int
int)

public android.webkit.ByteArrayBuilder$Chunk getFirstChunk()

public boolean isEmpty()

public void releaseChunk(
android.webkit.ByteArrayBuilder$Chunk)

________________CLASS________________


abstract class android.webkit.StreamLoader extends android.os.Handler

----------------FIELDS----------------

private static final int MSG_DATA

private static final int MSG_END

private static final int MSG_HEADERS

private static final int MSG_STATUS

public static final java.lang.String NO_STORE

protected long mContentLength

private byte[] mData

protected java.io.InputStream mDataStream

protected android.webkit.LoadListener mHandler
----------------METHODS----------------

 void <init>(
android.webkit.LoadListener)

private void closeStreamAndSendEndData()

private boolean sendData()

private void sendHeaders()

protected abstract void buildHeaders(
android.net.http.Headers)

public void handleMessage(
android.os.Message)

public void load()

protected abstract boolean setupStreamAndSendStatus()

________________CLASS________________


 class android.webkit.CacheLoader extends android.webkit.StreamLoader

----------------FIELDS----------------

 android.webkit.CacheManager$CacheResult mCacheResult
----------------METHODS----------------

 void <init>(
android.webkit.LoadListener
android.webkit.CacheManager$CacheResult)

protected void buildHeaders(
android.net.http.Headers)

protected boolean setupStreamAndSendStatus()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
final class android.webkit.CacheManager$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =CacheResult )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/CacheManager; )
public class android.webkit.CacheManager$CacheResult extends java.lang.Object

----------------FIELDS----------------

 long contentLength

 java.lang.String encoding

 java.lang.String etag

 long expires

 int httpStatusCode

 java.io.InputStream inStream

 java.lang.String lastModified

 java.lang.String localPath

 java.lang.String location

 java.lang.String mimeType

 java.io.File outFile

 java.io.OutputStream outStream
----------------METHODS----------------

public void <init>()

public long getContentLength()

public java.lang.String getETag()

public java.lang.String getEncoding()

public long getExpires()

public int getHttpStatusCode()

public java.io.InputStream getInputStream()

public java.lang.String getLastModified()

public java.lang.String getLocalPath()

public java.lang.String getLocation()

public java.lang.String getMimeType()

public java.io.OutputStream getOutputStream()

public void setEncoding(
java.lang.String)

public void setInputStream(
java.io.InputStream)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/webkit/CacheManager$CacheResult; )
public final class android.webkit.CacheManager extends java.lang.Object

----------------FIELDS----------------

private static long CACHE_THRESHOLD

private static long CACHE_TRIM_AMOUNT

static final java.lang.String HEADER_KEY_IFMODIFIEDSINCE

static final java.lang.String HEADER_KEY_IFNONEMATCH

private static final java.lang.String LOGTAG

private static final java.lang.String MAX_AGE

private static final java.lang.String NO_CACHE

private static final java.lang.String NO_STORE

private static java.io.File mBaseDir

private static android.webkit.WebViewDatabase mDataBase

private static boolean mDisabled

private static int mRefCount
----------------METHODS----------------

static void <clinit>()

public void <init>()

static java.io.File access$000()

static android.webkit.WebViewDatabase access$100()

private static void appendAsHex(
int
java.lang.StringBuffer)

public static boolean cacheDisabled()

static boolean cacheEmpty()

public static android.webkit.CacheManager$CacheResult createCacheFile(
java.lang.String
int
android.net.http.Headers
java.lang.String
boolean)

static boolean disableTransaction()

static boolean enableTransaction()

public static boolean endCacheTransaction()
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;)Landroid/webkit/CacheManager$CacheResult; )
public static android.webkit.CacheManager$CacheResult getCacheFile(
java.lang.String
java.util.Map)

public static java.io.File getCacheFileBaseDir()

static void init(
android.content.Context)

private static android.webkit.CacheManager$CacheResult parseHeaders(
int
android.net.http.Headers
java.lang.String)

static boolean removeAllCacheFiles()

public static void saveCacheFile(
java.lang.String
android.webkit.CacheManager$CacheResult)

static void setCacheDisabled(
boolean)

private static void setupFiles(
java.lang.String
android.webkit.CacheManager$CacheResult)

public static boolean startCacheTransaction()

static void trimCacheIfNeeded()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/CallbackProxy; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.webkit.CallbackProxy$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/CallbackProxy; )
@dalvik.annotation.InnerClass (accessFlags =2 name =ResultTransport )
@dalvik.annotation.Signature (value =<E:Ljava/lang/Object;>Ljava/lang/Object; )
 class android.webkit.CallbackProxy$ResultTransport extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =TE; )
private java.lang.Object mResult

final android.webkit.CallbackProxy this$0
----------------METHODS----------------

private void <init>(
android.webkit.CallbackProxy)

 void <init>(
android.webkit.CallbackProxy
android.webkit.CallbackProxy$1)
@dalvik.annotation.Signature (value =()TE; )
public java.lang.Object getResult()
@dalvik.annotation.Signature (value =(TE;)V )
public void setResult(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/webkit/CallbackProxy$1;Landroid/webkit/CallbackProxy$ResultTransport; )
 class android.webkit.CallbackProxy extends android.os.Handler

----------------FIELDS----------------

private static final int ASYNC_KEYEVENTS

private static final int AUTH_REQUEST

private static final int CLOSE_WINDOW

private static final int CREATE_WINDOW

private static final int DOWNLOAD_FILE

private static final int JS_ALERT

private static final int JS_CONFIRM

private static final int JS_PROMPT

private static final int JS_UNLOAD

private static final int LOAD_RESOURCE

private static final java.lang.String LOGTAG

private static final int NOTIFY

private static final int OVERRIDE_URL

private static final int PAGE_FINISHED

private static final int PAGE_STARTED

private static final int PROGRESS

private static final int RECEIVED_CERTIFICATE

private static final int RECEIVED_ICON

private static final int RECEIVED_TITLE

private static final int REPORT_ERROR

private static final int REQUEST_FOCUS

private static final int RESEND_POST_DATA

private static final int SAVE_PASSWORD

private static final int SCALE_CHANGED

private static final int SSL_ERROR

private static final int SWITCH_OUT_HISTORY

private static final int TOO_MANY_REDIRECTS

private static final int UPDATE_VISITED

private final android.webkit.WebBackForwardList mBackForwardList

private final android.content.Context mContext

private volatile android.webkit.DownloadListener mDownloadListener

private volatile int mLatestProgress

private boolean mProgressUpdatePending

private volatile android.webkit.WebChromeClient mWebChromeClient

private long mWebCoreThreadTime

private final android.webkit.WebView mWebView

private volatile android.webkit.WebViewClient mWebViewClient
----------------METHODS----------------

public void <init>(
android.content.Context
android.webkit.WebView)

public android.webkit.WebView createWindow(
boolean
boolean)

public void doUpdateVisitedHistory(
java.lang.String
boolean)

public android.webkit.WebBackForwardList getBackForwardList()

public int getProgress()

public void handleMessage(
android.os.Message)

public void onCloseWindow(
android.webkit.WebView)

public boolean onDownloadStart(
java.lang.String
java.lang.String
java.lang.String
java.lang.String
long)

public void onFormResubmission(
android.os.Message
android.os.Message)

public void onJsAlert(
java.lang.String
java.lang.String)

public boolean onJsBeforeUnload(
java.lang.String
java.lang.String)

public boolean onJsConfirm(
java.lang.String
java.lang.String)

public java.lang.String onJsPrompt(
java.lang.String
java.lang.String
java.lang.String)

public void onLoadResource(
java.lang.String)

public void onPageFinished(
java.lang.String)

public void onPageStarted(
java.lang.String
android.graphics.Bitmap)

public void onProgressChanged(
int)

public void onReceivedCertificate(
android.net.http.SslCertificate)

public void onReceivedError(
int
java.lang.String
java.lang.String)

public void onReceivedHttpAuthRequest(
android.webkit.HttpAuthHandler
java.lang.String
java.lang.String)

public void onReceivedIcon(
android.graphics.Bitmap)

public void onReceivedSslError(
android.webkit.SslErrorHandler
android.net.http.SslError)

public void onReceivedTitle(
java.lang.String)

public void onRequestFocus()

public boolean onSavePassword(
java.lang.String
java.lang.String
java.lang.String
android.os.Message)

public void onScaleChanged(
float
float)

public void onTooManyRedirects(
android.os.Message
android.os.Message)

public void onUnhandledKeyEvent(
android.view.KeyEvent)

public void setDownloadListener(
android.webkit.DownloadListener)

public void setWebChromeClient(
android.webkit.WebChromeClient)

public void setWebViewClient(
android.webkit.WebViewClient)

public boolean shouldOverrideUrlLoading(
java.lang.String)

 void switchOutDrawHistory()

public boolean uiOverrideKeyEvent(
android.view.KeyEvent)

public boolean uiOverrideUrlLoading(
java.lang.String)

________________CLASS________________


 class android.webkit.ContentLoader extends android.webkit.StreamLoader

----------------FIELDS----------------

private java.lang.String mContentType

private android.content.Context mContext

private java.lang.String mUrl
----------------METHODS----------------

 void <init>(
java.lang.String
android.webkit.LoadListener
android.content.Context)

public static void requestUrl(
java.lang.String
android.webkit.LoadListener
android.content.Context)

protected void buildHeaders(
android.net.http.Headers)

protected boolean setupStreamAndSendStatus()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/CookieManager; )
@dalvik.annotation.InnerClass (accessFlags =8 name =Cookie )
 class android.webkit.CookieManager$Cookie extends java.lang.Object

----------------FIELDS----------------

static final byte MODE_DELETED

static final byte MODE_NEW

static final byte MODE_NORMAL

static final byte MODE_REPLACED

 java.lang.String domain

 long expires

 long lastAcessTime

 long lastUpdateTime

 byte mode

 java.lang.String name

 java.lang.String path

 boolean secure

 java.lang.String value
----------------METHODS----------------

 void <init>()

 void <init>(
java.lang.String
java.lang.String)

 boolean domainMatch(
java.lang.String)

 boolean exactMatch(
android.webkit.CookieManager$Cookie)

 boolean pathMatch(
java.lang.String)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/webkit/CookieManager$Cookie; )
public final class android.webkit.CookieManager extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String[] BAD_COUNTRY_2LDS

private static final char COMMA

private static final java.lang.String DOMAIN

private static final char EQUAL

private static final java.lang.String EXPIRES

private static final java.lang.String HTTPS

private static final java.lang.String HTTP_ONLY

private static final int HTTP_ONLY_LENGTH

private static final java.lang.String LOGTAG

private static final java.lang.String MAX_AGE

private static final int MAX_COOKIE_COUNT_PER_BASE_DOMAIN

private static final int MAX_COOKIE_LENGTH

private static final int MAX_DOMAIN_COUNT

private static final int MAX_RAM_COOKIES_COUNT

private static final int MAX_RAM_DOMAIN_COUNT

private static final java.lang.String PATH

private static final char PATH_DELIM

private static final char PERIOD

private static final char QUESTION_MARK

private static final char QUOTATION

private static final java.lang.String SECURE

private static final int SECURE_LENGTH

private static final char SEMICOLON

private static final char WHITE_SPACE

private static android.webkit.CookieManager sRef

private boolean mAcceptCookie
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Ljava/util/ArrayList<Landroid/webkit/CookieManager$Cookie;>;>; )
private java.util.Map mCookieMap
----------------METHODS----------------

static void <clinit>()

private void <init>()

private java.lang.String getBaseDomain(
java.lang.String)

private java.lang.String[] getHostAndPath(
android.net.WebAddress)

public static android.webkit.CookieManager getInstance()
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/ArrayList<Landroid/webkit/CookieManager$Cookie;>; )
private java.util.ArrayList parseCookie(
java.lang.String
java.lang.String
java.lang.String)

public boolean acceptCookie()
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
protected java.lang.Object clone()

 void deleteACookie(
android.webkit.CookieManager$Cookie)
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Landroid/webkit/CookieManager$Cookie;>; )
 java.util.ArrayList deleteLRUDomain()

public java.lang.String getCookie(
android.net.WebAddress)

public java.lang.String getCookie(
java.lang.String)
@dalvik.annotation.Signature (value =(J)Ljava/util/ArrayList<Landroid/webkit/CookieManager$Cookie;>; )
 java.util.ArrayList getUpdatedCookiesSince(
long)

public boolean hasCookies()

public void removeAllCookie()

public void removeExpiredCookie()

public void removeSessionCookie()

public void setAcceptCookie(
boolean)

public void setCookie(
android.net.WebAddress
java.lang.String)

public void setCookie(
java.lang.String
java.lang.String)

 void syncedACookie(
android.webkit.CookieManager$Cookie)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/webkit/WebSyncManager$1;Landroid/webkit/WebSyncManager$SyncHandler; )
abstract class android.webkit.WebSyncManager extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

protected static final java.lang.String LOGTAG

private static int SYNC_LATER_INTERVAL

private static final int SYNC_MESSAGE

private static int SYNC_NOW_INTERVAL

protected android.webkit.WebViewDatabase mDataBase

protected android.os.Handler mHandler

private int mStartSyncRefCount

private java.lang.Thread mSyncThread

private java.lang.String mThreadName
----------------METHODS----------------

static void <clinit>()

protected void <init>(
android.content.Context
java.lang.String)

static int access$000()
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
protected java.lang.Object clone()

protected void onSyncInit()

public void resetSync()

public void run()

public void startSync()

public void stopSync()

public void sync()

abstract void syncFromRamToFlash()

________________CLASS________________


public final class android.webkit.CookieSyncManager extends android.webkit.WebSyncManager

----------------FIELDS----------------

private static android.webkit.CookieSyncManager sRef

private long mLastUpdate
----------------METHODS----------------

private void <init>(
android.content.Context)

public static android.webkit.CookieSyncManager createInstance(
android.content.Context)

public static android.webkit.CookieSyncManager getInstance()
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/webkit/CookieManager$Cookie;>;)V )
private void syncFromRamToFlash(
java.util.ArrayList)

 void clearAllCookies()

 void clearExpiredCookies(
long)

 void clearSessionCookies()
@dalvik.annotation.Signature (value =(Ljava/lang/String;)Ljava/util/ArrayList<Landroid/webkit/CookieManager$Cookie;>; )
 java.util.ArrayList getCookiesForDomain(
java.lang.String)

 boolean hasCookies()

public volatile void resetSync()

public volatile void run()

public volatile void startSync()

public volatile void stopSync()

public volatile void sync()

protected void syncFromRamToFlash()

________________CLASS________________


 class android.webkit.DataLoader extends android.webkit.StreamLoader

----------------FIELDS----------------

private java.lang.String mContentType
----------------METHODS----------------

 void <init>(
java.lang.String
android.webkit.LoadListener)

public static void requestUrl(
java.lang.String
android.webkit.LoadListener)

protected void buildHeaders(
android.net.http.Headers)

protected boolean setupStreamAndSendStatus()

________________CLASS________________


public class android.webkit.DateSorter extends java.lang.Object

----------------FIELDS----------------

public static final int DAY_COUNT

private static final java.lang.String LOGTAG

private long[] mBins

 java.util.Calendar mCal

 java.util.Date mDate

private java.lang.String[] mLabels
----------------METHODS----------------

public void <init>(
android.content.Context)

private java.util.Calendar beginningOfDay(
java.util.Calendar)

public long getBoundary(
int)

public int getIndex(
long)

public java.lang.String getLabel(
int)

________________CLASS________________


public abstract interface class android.webkit.DownloadListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onDownloadStart(
java.lang.String
java.lang.String
java.lang.String
java.lang.String
long)

________________CLASS________________


 class android.webkit.FileLoader extends android.webkit.StreamLoader

----------------FIELDS----------------

private android.content.Context mContext

private boolean mIsAsset

private java.lang.String mPath
----------------METHODS----------------

 void <init>(
java.lang.String
android.webkit.LoadListener
android.content.Context
boolean)

public static void requestUrl(
java.lang.String
android.webkit.LoadListener
android.content.Context
boolean)

protected void buildHeaders(
android.net.http.Headers)

protected boolean setupStreamAndSendStatus()

________________CLASS________________


 class android.webkit.FrameLoader extends java.lang.Object

----------------FIELDS----------------

private static java.lang.String ACCEPT_LANGUAGE

private static final java.lang.String CONTENT_TYPE

static final java.lang.String HEADER_STR

private static final java.lang.String LOGTAG

private static final int URI_PROTOCOL

private static final java.lang.String mAboutBlank

protected int mCacheMode

protected java.lang.String mContentType
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>; )
protected java.util.Map mHeaders

protected boolean mIsHighPriority

protected android.webkit.LoadListener mListener

protected java.lang.String mMethod

protected android.webkit.Network mNetwork

protected java.lang.String mPostData

protected java.lang.String mReferrer

protected java.lang.String mUserAgent
----------------METHODS----------------

static void <clinit>()

 void <init>(
android.webkit.LoadListener
java.lang.String
java.lang.String
boolean)

static boolean handleLocalFile(
java.lang.String
android.webkit.LoadListener)

private void populateHeaders()

private void populateStaticHeaders()

public boolean executeLoad()

public android.webkit.LoadListener getLoadListener()

protected boolean handleCache()

protected boolean handleHTTPLoad(
boolean)

protected boolean handleUrlIntercept()

public void setCacheMode(
int)

public void setContentTypeForPost(
java.lang.String)

public void setHeaders(
java.util.HashMap)

public void setPostData(
java.lang.String)

public void setReferrer(
java.lang.String)

protected void startCacheLoad(
android.webkit.CacheManager$CacheResult)

________________CLASS________________


public class android.webkit.HttpAuthHandler extends android.os.Handler

----------------FIELDS----------------

private static final java.lang.String LOGTAG

private final int AUTH_CANCEL

private final int AUTH_PROCEED
@dalvik.annotation.Signature (value =Ljava/util/LinkedList<Landroid/webkit/LoadListener;>; )
private java.util.LinkedList mLoaderQueue

private android.webkit.Network mNetwork
----------------METHODS----------------

 void <init>(
android.webkit.Network)

private void processNextLoader()

public void cancel()

 void handleAuthRequest(
android.webkit.LoadListener)

public void handleMessage(
android.os.Message)

public void proceed(
java.lang.String
java.lang.String)

 void reset(
android.webkit.BrowserFrame)

public boolean useHttpAuthUsernamePassword()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/HttpDateTime; )
 class android.webkit.HttpDateTime$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/HttpDateTime; )
@dalvik.annotation.InnerClass (accessFlags =10 name =TimeOfDay )
 class android.webkit.HttpDateTime$TimeOfDay extends java.lang.Object

----------------FIELDS----------------

 int hour

 int minute

 int second
----------------METHODS----------------

private void <init>()

 void <init>(
android.webkit.HttpDateTime$1)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/webkit/HttpDateTime$1;Landroid/webkit/HttpDateTime$TimeOfDay; )
 class android.webkit.HttpDateTime extends java.lang.Object

----------------FIELDS----------------

private static final java.util.regex.Pattern HTTP_DATE_ANSIC_PATTERN

private static final java.lang.String HTTP_DATE_ANSIC_REGEXP

private static final java.util.regex.Pattern HTTP_DATE_RFC_PATTERN

private static final java.lang.String HTTP_DATE_RFC_REGEXP
----------------METHODS----------------

static void <clinit>()

 void <init>()

private static int getDate(
java.lang.String)

private static int getMonth(
java.lang.String)

private static android.webkit.HttpDateTime$TimeOfDay getTime(
java.lang.String)

private static int getYear(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public static java.lang.Long parse(
java.lang.String)

________________CLASS________________


final class android.webkit.JWebCoreJavaBridge extends android.os.Handler

----------------FIELDS----------------

private static final int FUNCPTR_MESSAGE

private static final java.lang.String LOGTAG

private static final int TIMER_MESSAGE

private boolean mHasInstantTimer

private int mNativeBridge

private int mPauseTimerRefCount
----------------METHODS----------------

public void <init>()

private java.lang.String cookies(
java.lang.String)

private boolean cookiesEnabled()

private native void nativeConstructor()

private native void nativeFinalize()

private native void nativeServiceFuncPtrQueue()

private void setCookies(
java.lang.String
java.lang.String
java.lang.String)

private native void setDeferringTimers(
boolean)

private void setSharedTimer(
long)

private native void sharedTimerFired()

private void signalServiceFuncPtrQueue()

private void stopSharedTimer()

protected void finalize()

public void handleMessage(
android.os.Message)

public void pause()

public void resume()

public native void setCacheSize(
int)

________________CLASS________________


public class android.webkit.JsResult extends java.lang.Object

----------------FIELDS----------------

private final boolean mDefaultValue

protected final android.webkit.CallbackProxy mProxy

private boolean mReady

protected boolean mResult

private boolean mTriedToNotifyBeforeReady
----------------METHODS----------------

 void <init>(
android.webkit.CallbackProxy
boolean)

public final void cancel()

public final void confirm()

final boolean getResult()

 void handleDefault()

final void setReady()

protected final void wakeUp()

________________CLASS________________


public class android.webkit.JsPromptResult extends android.webkit.JsResult

----------------FIELDS----------------

private java.lang.String mStringResult
----------------METHODS----------------

 void <init>(
android.webkit.CallbackProxy)

public void confirm(
java.lang.String)

 java.lang.String getStringResult()

 void handleDefault()

________________CLASS________________


 class android.webkit.LoadListener extends android.os.Handler implements android.net.http.EventHandler

----------------FIELDS----------------

private static final java.util.regex.Pattern CONTENT_TYPE_PATTERN

private static final int HTTP_AUTH

private static final int HTTP_FOUND

private static final int HTTP_MOVED_PERMANENTLY

private static final int HTTP_NOT_FOUND

private static final int HTTP_NOT_MODIFIED

private static final int HTTP_OK

private static final int HTTP_PROXY_AUTH

private static final int HTTP_SEE_OTHER

private static final int HTTP_TEMPORARY_REDIRECT

private static final java.lang.String LOGTAG

private static final int MSG_CONTENT_DATA

private static final int MSG_CONTENT_ERROR

private static final int MSG_CONTENT_FINISHED

private static final int MSG_CONTENT_HEADERS

private static final int MSG_LOCATION_CHANGED

private static final int MSG_LOCATION_CHANGED_REQUEST

private static int sNativeLoaderCount

private boolean mAuthFailed

private android.net.http.HttpAuthHeader mAuthHeader

private android.webkit.BrowserFrame mBrowserFrame

private android.webkit.CacheLoader mCacheLoader

private android.webkit.CacheManager$CacheResult mCacheResult

private boolean mCancelled

public long mContentLength

private android.content.Context mContext

private final android.webkit.ByteArrayBuilder mDataBuilder

private java.lang.String mEncoding

private java.lang.String mErrorDescription

private int mErrorID

private android.net.http.Headers mHeaders

private boolean mIsHighPriority

private boolean mIsMainPageLoader
@dalvik.annotation.Signature (value =Ljava/util/Vector<Landroid/os/Message;>; )
private java.util.Vector mMessageQueue

private java.lang.String mMethod

private java.lang.String mMimeType

private int mNativeLoader

private java.lang.String mOriginalUrl

private boolean mPermanent

private java.lang.String mPostData

private android.net.http.RequestHandle mRequestHandle
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>; )
private java.util.Map mRequestHeaders

private android.net.http.SslError mSslError

private int mStatusCode

private java.lang.String mStatusText

private boolean mSynchronous

private java.lang.String mTransferEncoding

private android.net.WebAddress mUri

private java.lang.String mUrl
----------------METHODS----------------

static void <clinit>()

 void <init>(
android.content.Context
android.webkit.BrowserFrame
java.lang.String
int
boolean
boolean)

private void clearNativeLoader()

private void commitHeaders()

private void commitLoad()

private int createNativeResponse()

private void doRedirect()

private java.lang.String getErrorDescription()

private int getErrorID()

public static android.webkit.LoadListener getLoadListener(
android.content.Context
android.webkit.BrowserFrame
java.lang.String
int
boolean
boolean)

public static int getNativeLoaderCount()

private void guessMimeType()

private java.lang.String guessMimeTypeFromExtension()

private boolean ignoreCallbacks()

private native void nativeAddData(
byte[]
int)

private native int nativeCreateResponse(
java.lang.String
int
java.lang.String
java.lang.String
long
java.lang.String
long)

private native void nativeError(
int
java.lang.String
java.lang.String)

private native void nativeFinished()

private native void nativeReceivedResponse(
int)

private native java.lang.String nativeRedirectedToUrl(
java.lang.String
java.lang.String
int)

private native void nativeSetResponseHeader(
int
java.lang.String
java.lang.String)

private android.net.http.HttpAuthHeader parseAuthHeader(
java.lang.String)

private void parseContentTypeHeader(
java.lang.String)

private void sendMessageInternal(
android.os.Message)

static boolean willLoadFromCache(
java.lang.String)

 void attachRequestHandle(
android.net.http.RequestHandle)

 boolean authCredentialsInvalid()

public void cancel()

public boolean cancelled()

public void certificate(
android.net.http.SslCertificate)
@dalvik.annotation.Signature (value =(Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;)Z )
 boolean checkCache(
java.util.Map)

 long contentLength()

public void data(
byte[]
int)

 void detachRequestHandle()

 void downloadFile()

public void endData()

public void error(
int
java.lang.String)

 android.content.Context getContext()

 android.webkit.BrowserFrame getFrame()

 android.net.WebAddress getWebAddress()

 void handleAuthResponse(
java.lang.String
java.lang.String)

public void handleMessage(
android.os.Message)

public void handleSslErrorRequest(
android.net.http.SslError)

 void handleSslErrorResponse(
boolean)

public void headers(
android.net.http.Headers)

 java.lang.String host()

 boolean isSynchronous()

 void loadSynchronousMessages()

 java.lang.String mimeType()

 void notifyError()

 java.lang.String originalUrl()

 boolean proxyAuthenticate()

 java.lang.String realm()

 void resetCancel()

 void setCacheLoader(
android.webkit.CacheLoader)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;Ljava/lang/String;Z)V )
 void setRequestData(
java.lang.String
java.util.Map
java.lang.String
boolean)

 void setUrl(
java.lang.String)

 android.net.http.SslError sslError()

public void status(
int
int
int
java.lang.String)

 void tearDown()

 java.lang.String url()

________________CLASS________________


public class android.webkit.MimeTypeMap extends java.lang.Object

----------------FIELDS----------------

private static android.webkit.MimeTypeMap sMimeTypeMap
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>; )
private java.util.HashMap mExtensionToMimeTypeMap
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>; )
private java.util.HashMap mMimeTypeToExtensionMap
----------------METHODS----------------

private void <init>()

public static java.lang.String getFileExtensionFromUrl(
java.lang.String)

public static android.webkit.MimeTypeMap getSingleton()

private void loadEntry(
java.lang.String
java.lang.String
boolean)

public java.lang.String getExtensionFromMimeType(
java.lang.String)

public java.lang.String getMimeTypeFromExtension(
java.lang.String)

public boolean hasExtension(
java.lang.String)

public boolean hasMimeType(
java.lang.String)

________________CLASS________________


 class android.webkit.Network extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String LOGTAG

private static android.webkit.Network sNetwork

private static int sPlatformNotificationEnableRefCount

private static boolean sPlatformNotifications

private android.webkit.HttpAuthHandler mHttpAuthHandler

private java.lang.String mProxyPassword

private java.lang.String mProxyUsername

private android.net.http.RequestQueue mRequestQueue

private android.webkit.SslErrorHandler mSslErrorHandler
----------------METHODS----------------

private void <init>(
android.content.Context)

public static void disablePlatformNotifications()

public static void enablePlatformNotifications()

public static android.webkit.Network getInstance(
android.content.Context)

public void clearUserSslPrefTable()

public java.lang.String getProxyHostname()

public java.lang.String getProxyPassword()

public java.lang.String getProxyUsername()

public void handleAuthRequest(
android.webkit.LoadListener)

public void handleSslErrorRequest(
android.webkit.LoadListener)

public boolean isValidProxySet()
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;Ljava/lang/String;Landroid/webkit/LoadListener;Z)Z )
public boolean requestURL(
java.lang.String
java.util.Map
java.lang.String
android.webkit.LoadListener
boolean)

public void resetHandlersAndStopLoading(
android.webkit.BrowserFrame)

public boolean restoreState(
android.os.Bundle)

public boolean saveState(
android.os.Bundle)

public void setProxyPassword(
java.lang.String)

public void setProxyUsername(
java.lang.String)

public void startTiming()

public void stopTiming()

________________CLASS________________


 class android.webkit.PerfChecker extends java.lang.Object

----------------FIELDS----------------

private static final long mResponseThreshold

private long mTime
----------------METHODS----------------

public void <init>()

public void responseAlert(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/Plugin; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.webkit.Plugin$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =PreferencesClickHandler )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/Plugin; )
public abstract interface class android.webkit.Plugin$PreferencesClickHandler extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void handleClickEvent(
android.content.Context)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/Plugin; )
@dalvik.annotation.InnerClass (accessFlags =2 name =DefaultClickHandler )
 class android.webkit.Plugin$DefaultClickHandler extends java.lang.Object implements android.webkit.Plugin$PreferencesClickHandler, android.content.DialogInterface$OnClickListener

----------------FIELDS----------------

private android.app.AlertDialog mDialog

final android.webkit.Plugin this$0
----------------METHODS----------------

private void <init>(
android.webkit.Plugin)

 void <init>(
android.webkit.Plugin
android.webkit.Plugin$1)

public void handleClickEvent(
android.content.Context)

public void onClick(
android.content.DialogInterface
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/webkit/Plugin$1;Landroid/webkit/Plugin$DefaultClickHandler;Landroid/webkit/Plugin$PreferencesClickHandler; )
public class android.webkit.Plugin extends java.lang.Object

----------------FIELDS----------------

private java.lang.String mDescription

private java.lang.String mFileName

private android.webkit.Plugin$PreferencesClickHandler mHandler

private java.lang.String mName

private java.lang.String mPath
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

static java.lang.String access$100(
android.webkit.Plugin)

static java.lang.String access$200(
android.webkit.Plugin)

public void dispatchClickEvent(
android.content.Context)

public java.lang.String getDescription()

public java.lang.String getFileName()

public java.lang.String getName()

public java.lang.String getPath()

public void setClickHandler(
android.webkit.Plugin$PreferencesClickHandler)

public void setDescription(
java.lang.String)

public void setFileName(
java.lang.String)

public void setName(
java.lang.String)

public void setPath(
java.lang.String)

public java.lang.String toString()

________________CLASS________________


public class android.webkit.PluginList extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/webkit/Plugin;>; )
private java.util.ArrayList mPlugins
----------------METHODS----------------

public void <init>()

public void addPlugin(
android.webkit.Plugin)

public void clear()

public java.util.List getList()

public void pluginClicked(
android.content.Context
int)

public void removePlugin(
android.webkit.Plugin)

________________CLASS________________


public class android.webkit.SslErrorHandler extends android.os.Handler

----------------FIELDS----------------

private static final java.lang.String LOGTAG

private final int HANDLE_RESPONSE
@dalvik.annotation.Signature (value =Ljava/util/LinkedList<Landroid/webkit/LoadListener;>; )
private java.util.LinkedList mLoaderQueue

private android.webkit.Network mNetwork

private android.os.Bundle mSslPrefTable
----------------METHODS----------------

 void <init>(
android.webkit.Network)

private boolean processNextLoader()

public void cancel()

 void clear()

 void fastProcessQueuedSslErrors()

public void handleMessage(
android.os.Message)

 void handleSslErrorRequest(
android.webkit.LoadListener)

 void handleSslErrorResponse(
boolean)

public void proceed()

 void reset(
android.webkit.BrowserFrame)

 boolean restoreState(
android.os.Bundle)

 boolean saveState(
android.os.Bundle)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/TextDialog; )
 class android.webkit.TextDialog$1 extends android.os.Handler

----------------FIELDS----------------

final android.webkit.TextDialog this$0
----------------METHODS----------------

 void <init>(
android.webkit.TextDialog)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/TextView$1;Landroid/widget/TextView$MenuHandler;Landroid/widget/TextView$BufferType;Landroid/widget/TextView$Blink;Landroid/widget/TextView$ChangeWatcher;Landroid/widget/TextView$CharWrapper;Landroid/widget/TextView$SavedState; )
@android.widget.RemoteViews$RemoteView
public class android.widget.TextView extends android.view.View implements android.view.ViewTreeObserver$OnPreDrawListener

----------------FIELDS----------------

private static final int ANIMATED_SCROLL_GAP

private static final int BLINK

private static final int DECIMAL

private static final android.text.Spanned EMPTY_SPANNED

private static final int EMS

private static final int ID_COPY

private static final int ID_COPY_URL

private static final int ID_CUT

private static final int ID_PASTE

private static final int ID_SELECT_ALL

private static final int LINES

private static final int MONOSPACE

private static final android.text.InputFilter[] NO_FILTERS

private static final int PIXELS

private static final int PREDRAW_DONE

private static final int PREDRAW_NOT_REGISTERED

private static final int PREDRAW_PENDING

private static int PRIORITY

private static final int SANS

private static final int SERIF

private static final int SIGNED

private static final android.text.BoringLayout$Metrics UNKNOWN_BORING

private static final int VERY_WIDE

private static android.graphics.RectF sTempRect

private int mAutoLinkMask

private android.widget.TextView$Blink mBlink

private android.text.BoringLayout$Metrics mBoring

private android.widget.TextView$BufferType mBufferType

private android.widget.TextView$ChangeWatcher mChangeWatcher

private android.widget.TextView$CharWrapper mCharWrapper

private android.graphics.Rect mCompoundRect

private int mCurHintTextColor

private int mCurTextColor

private boolean mCursorVisible

private int mDesiredHeightAtMeasure

private android.graphics.drawable.Drawable mDrawableBottom

private int mDrawableHeightLeft

private int mDrawableHeightRight

private android.graphics.drawable.Drawable mDrawableLeft

private int mDrawablePadding

private android.graphics.drawable.Drawable mDrawableRight

private int mDrawableSizeBottom

private int mDrawableSizeLeft

private int mDrawableSizeRight

private int mDrawableSizeTop

private android.graphics.drawable.Drawable mDrawableTop

private int mDrawableWidthBottom

private int mDrawableWidthTop

private boolean mDrawables

private boolean mEatTouchRelease

private android.text.Editable$Factory mEditableFactory

private android.text.TextUtils$TruncateAt mEllipsize

private java.lang.CharSequence mError

private boolean mErrorWasChanged

private android.text.InputFilter[] mFilters

private boolean mFreezesText

private boolean mFrozenWithFocus

private int mGravity

private int mHighlightColor

private android.graphics.Paint mHighlightPaint

private android.graphics.Path mHighlightPath

private boolean mHighlightPathBogus

private java.lang.CharSequence mHint

private android.text.BoringLayout$Metrics mHintBoring

private android.text.Layout mHintLayout

private android.content.res.ColorStateList mHintTextColor

private boolean mHorizontallyScrolling

private boolean mIncludePad

private android.text.method.KeyListener mInput

private long mLastScroll

private android.text.Layout mLayout

private android.content.res.ColorStateList mLinkTextColor

private boolean mLinksClickable
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/text/TextWatcher;>; )
private java.util.ArrayList mListeners

private int mMaxMode

private int mMaxWidth

private int mMaxWidthMode

private int mMaximum

private int mMinMode

private int mMinWidth

private int mMinWidthMode

private int mMinimum

private android.text.method.MovementMethod mMovement

private android.widget.PopupWindow mPopup

private int mPreDrawState

private android.text.BoringLayout mSavedHintLayout

private android.text.BoringLayout mSavedLayout

private android.widget.Scroller mScroller

private boolean mSelectAllOnFocus

private boolean mSelectionMoved

private float mShadowDx

private float mShadowDy

private float mShadowRadius

private long mShowCursor

private boolean mSingleLine

private float mSpacingAdd

private float mSpacingMult

private android.text.Spannable$Factory mSpannableFactory
@android.view.ViewDebug$ExportedProperty
private java.lang.CharSequence mText

private android.content.res.ColorStateList mTextColor

private android.text.TextPaint mTextPaint

private android.text.method.TransformationMethod mTransformation

private java.lang.CharSequence mTransformed
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static void access$1000(
android.widget.TextView
java.lang.CharSequence
int
int
int)

static void access$1100(
android.widget.TextView
android.text.Editable)

static boolean access$1202(
android.widget.TextView
boolean)

static void access$1300(
android.widget.TextView
int
int
int)

static void access$1400(
android.widget.TextView)

static java.lang.CharSequence access$1500(
android.widget.TextView)

static android.text.Layout access$1600(
android.widget.TextView)

static void access$1700(
android.widget.TextView)

static boolean access$1900(
android.widget.TextView
int)

static void access$300(
android.widget.TextView
java.lang.CharSequence
int
int
int)

static int access$400(
android.widget.TextView)

static void access$500(
android.widget.TextView)

static boolean access$602(
android.widget.TextView
boolean)

static long access$702(
android.widget.TextView
long)

static void access$800(
android.widget.TextView)

static void access$900(
android.widget.TextView)

private void assumeLayout()

private boolean bringPointIntoView(
int)

private boolean bringTextIntoView()

private boolean canCopy()

private boolean canCut()

private boolean canPaste()

private boolean canSelectAll()

private void checkForRelayout()

private void checkForResize()

private void chooseSize(
android.widget.PopupWindow
java.lang.CharSequence
android.widget.TextView)

private static int desired(
android.text.Layout)

private void fixFocusableAndClickableSettings()

private int getBottomVerticalOffset(
boolean)

private int getDesiredHeight()

private int getDesiredHeight(
android.text.Layout
boolean)

private int getErrorX()

private int getErrorY()

private void getInterestingRect(
android.graphics.Rect
int
int
int
int)

public static int getTextColor(
android.content.Context
android.content.res.TypedArray
int)

public static android.content.res.ColorStateList getTextColors(
android.content.Context
android.content.res.TypedArray)

private int getVerticalOffset(
boolean)

private void hideError()

private void invalidateCursor()

private void invalidateCursor(
int
int
int)

private void invalidateCursorPath()

private void makeBlink()

private void nullLayouts()

private boolean onMenu(
int)

private void registerForPreDraw()

private void sendAfterTextChanged(
android.text.Editable)

private void sendBeforeTextChanged(
java.lang.CharSequence
int
int
int)

private void sendOnTextChanged(
java.lang.CharSequence
int
int
int)

private void setFilters(
android.text.Editable
android.text.InputFilter[])

private void setRawTextSize(
float)

private void setText(
java.lang.CharSequence
android.widget.TextView$BufferType
boolean
int)

private void setTypefaceByIndex(
int
int)

private void showError()

private void updateTextColors()

public void addTextChangedListener(
android.text.TextWatcher)

public final void append(
java.lang.CharSequence)

public void append(
java.lang.CharSequence
int
int)

protected int computeHorizontalScrollRange()

public void computeScroll()

protected int computeVerticalScrollRange()

public void debug(
int)

protected void drawableStateChanged()

public final int getAutoLinkMask()

public int getBaseline()

public int getCompoundDrawablePadding()

public android.graphics.drawable.Drawable[] getCompoundDrawables()

public int getCompoundPaddingBottom()

public int getCompoundPaddingLeft()

public int getCompoundPaddingRight()

public int getCompoundPaddingTop()

public final int getCurrentHintTextColor()

public final int getCurrentTextColor()

protected boolean getDefaultEditable()

protected android.text.method.MovementMethod getDefaultMovementMethod()

public android.text.TextUtils$TruncateAt getEllipsize()

public java.lang.CharSequence getError()

public int getExtendedPaddingBottom()

public int getExtendedPaddingTop()

public android.text.InputFilter[] getFilters()

public void getFocusedRect(
android.graphics.Rect)

public boolean getFreezesText()

public int getGravity()
@android.view.ViewDebug$CapturedViewProperty
public java.lang.CharSequence getHint()

public final android.content.res.ColorStateList getHintTextColors()

public final android.text.method.KeyListener getKeyListener()

public final android.text.Layout getLayout()

public int getLineBounds(
int
android.graphics.Rect)

public int getLineCount()

public int getLineHeight()

public final android.content.res.ColorStateList getLinkTextColors()

public final boolean getLinksClickable()

public final android.text.method.MovementMethod getMovementMethod()

public android.text.TextPaint getPaint()

public int getPaintFlags()

public int getSelectionEnd()

public int getSelectionStart()
@android.view.ViewDebug$CapturedViewProperty
public java.lang.CharSequence getText()

public final android.content.res.ColorStateList getTextColors()

public float getTextScaleX()

public float getTextSize()

public int getTotalPaddingBottom()

public int getTotalPaddingLeft()

public int getTotalPaddingRight()

public int getTotalPaddingTop()

public final android.text.method.TransformationMethod getTransformationMethod()

public android.graphics.Typeface getTypeface()

public android.text.style.URLSpan[] getUrls()

public boolean hasSelection()

public int length()

protected void makeNewLayout(
int
int
android.text.BoringLayout$Metrics
android.text.BoringLayout$Metrics
int
boolean)

protected void onCreateContextMenu(
android.view.ContextMenu)

protected void onDetachedFromWindow()

protected void onDraw(
android.graphics.Canvas)

protected void onFocusChanged(
boolean
int
android.graphics.Rect)

public boolean onKeyDown(
int
android.view.KeyEvent)

public boolean onKeyShortcut(
int
android.view.KeyEvent)

public boolean onKeyUp(
int
android.view.KeyEvent)

protected void onMeasure(
int
int)

public boolean onPreDraw()

public void onRestoreInstanceState(
android.os.Parcelable)

public android.os.Parcelable onSaveInstanceState()

protected void onTextChanged(
java.lang.CharSequence
int
int
int)

public boolean onTouchEvent(
android.view.MotionEvent)

public boolean onTrackballEvent(
android.view.MotionEvent)

public void onWindowFocusChanged(
boolean)

public boolean performLongClick()

public void removeTextChangedListener(
android.text.TextWatcher)

public final void setAutoLinkMask(
int)

public void setCompoundDrawablePadding(
int)

public void setCompoundDrawables(
android.graphics.drawable.Drawable
android.graphics.drawable.Drawable
android.graphics.drawable.Drawable
android.graphics.drawable.Drawable)

public void setCompoundDrawablesWithIntrinsicBounds(
android.graphics.drawable.Drawable
android.graphics.drawable.Drawable
android.graphics.drawable.Drawable
android.graphics.drawable.Drawable)

public void setCursorVisible(
boolean)

public final void setEditableFactory(
android.text.Editable$Factory)

public void setEllipsize(
android.text.TextUtils$TruncateAt)

public void setEms(
int)

public void setError(
java.lang.CharSequence)

public void setError(
java.lang.CharSequence
android.graphics.drawable.Drawable)

public void setFilters(
android.text.InputFilter[])

protected boolean setFrame(
int
int
int
int)

public void setFreezesText(
boolean)

public void setGravity(
int)

public void setHeight(
int)

public void setHighlightColor(
int)

public final void setHint(
int)

public final void setHint(
java.lang.CharSequence)

public final void setHintTextColor(
int)

public final void setHintTextColor(
android.content.res.ColorStateList)

public void setHorizontallyScrolling(
boolean)

public void setIncludeFontPadding(
boolean)

public void setKeyListener(
android.text.method.KeyListener)

public void setLineSpacing(
float
float)

public void setLines(
int)

public final void setLinkTextColor(
int)

public final void setLinkTextColor(
android.content.res.ColorStateList)

public final void setLinksClickable(
boolean)

public void setMaxEms(
int)

public void setMaxHeight(
int)

public void setMaxLines(
int)

public void setMaxWidth(
int)

public void setMinEms(
int)

public void setMinHeight(
int)

public void setMinLines(
int)

public void setMinWidth(
int)

public final void setMovementMethod(
android.text.method.MovementMethod)

public void setPadding(
int
int
int
int)

public void setPaintFlags(
int)

public void setScroller(
android.widget.Scroller)

public void setSelectAllOnFocus(
boolean)

public void setShadowLayer(
float
float
float
int)

public void setSingleLine()

public void setSingleLine(
boolean)

public final void setSpannableFactory(
android.text.Spannable$Factory)

public final void setText(
int)

public final void setText(
int
android.widget.TextView$BufferType)

public final void setText(
java.lang.CharSequence)

public void setText(
java.lang.CharSequence
android.widget.TextView$BufferType)

public final void setText(
char[]
int
int)

public void setTextAppearance(
android.content.Context
int)

public void setTextColor(
int)

public void setTextColor(
android.content.res.ColorStateList)

public final void setTextKeepState(
java.lang.CharSequence)

public final void setTextKeepState(
java.lang.CharSequence
android.widget.TextView$BufferType)

public void setTextScaleX(
float)

public void setTextSize(
float)

public void setTextSize(
int
float)

public final void setTransformationMethod(
android.text.method.TransformationMethod)

public void setTypeface(
android.graphics.Typeface)

public void setTypeface(
android.graphics.Typeface
int)

public void setWidth(
int)

________________CLASS________________


public class android.widget.EditText extends android.widget.TextView

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

public void extendSelection(
int)

protected boolean getDefaultEditable()

protected android.text.method.MovementMethod getDefaultMovementMethod()

public android.text.Editable getText()

public volatile java.lang.CharSequence getText()

public void selectAll()

public void setSelection(
int)

public void setSelection(
int
int)

public void setText(
java.lang.CharSequence
android.widget.TextView$BufferType)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/Filter; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =FilterListener )
public abstract interface class android.widget.Filter$FilterListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onFilterComplete(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/AutoCompleteTextView$1;Landroid/widget/AutoCompleteTextView$Validator;Landroid/widget/AutoCompleteTextView$DropDownListView;Landroid/widget/AutoCompleteTextView$DropDownItemClickListener; )
public class android.widget.AutoCompleteTextView extends android.widget.EditText implements android.widget.Filter$FilterListener

----------------FIELDS----------------

private static final int HINT_VIEW_ID

private android.widget.ListAdapter mAdapter

private final android.widget.AutoCompleteTextView$DropDownItemClickListener mDropDownItemClickListener

private android.widget.AutoCompleteTextView$DropDownListView mDropDownList

private android.graphics.drawable.Drawable mDropDownListHighlight

private android.widget.Filter mFilter

private int mHintResource

private java.lang.CharSequence mHintText

private android.widget.AdapterView$OnItemClickListener mItemClickListener

private android.widget.AdapterView$OnItemSelectedListener mItemSelectedListener

private android.widget.PopupWindow mPopup

private boolean mTextChanged

private int mThreshold

private android.widget.AutoCompleteTextView$Validator mValidator
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static void access$100(
android.widget.AutoCompleteTextView
android.view.View
int
long)

private int buildDropDown()

private android.view.View getHintView(
android.content.Context)

private void performCompletion(
android.view.View
int
long)

protected java.lang.CharSequence convertSelectionToString(
java.lang.Object)

public void dismissDropDown()

public boolean enoughToFilter()

 void finishInit()

public android.widget.ListAdapter getAdapter()

protected android.widget.Filter getFilter()

public android.widget.AdapterView$OnItemClickListener getItemClickListener()

public android.widget.AdapterView$OnItemSelectedListener getItemSelectedListener()

public int getThreshold()

public android.widget.AutoCompleteTextView$Validator getValidator()

public boolean isPopupShowing()

public void onFilterComplete(
int)

protected void onFocusChanged(
boolean
int
android.graphics.Rect)

public boolean onKeyDown(
int
android.view.KeyEvent)

public boolean onKeyUp(
int
android.view.KeyEvent)

protected void onTextChanged(
java.lang.CharSequence
int
int
int)

public void onWindowFocusChanged(
boolean)

public void performCompletion()

protected void performFiltering(
java.lang.CharSequence
int)

public void performValidation()

protected void replaceText(
java.lang.CharSequence)
@dalvik.annotation.Signature (value =<T::Landroid/widget/ListAdapter;:Landroid/widget/Filterable;>(TT;)V )
public void setAdapter(
android.widget.ListAdapter)

public void setCompletionHint(
java.lang.CharSequence)

protected boolean setFrame(
int
int
int
int)

public void setOnItemClickListener(
android.widget.AdapterView$OnItemClickListener)

public void setOnItemSelectedListener(
android.widget.AdapterView$OnItemSelectedListener)

public void setThreshold(
int)

public void setValidator(
android.widget.AutoCompleteTextView$Validator)

public void showDropDown()

________________CLASS________________


 class android.webkit.TextDialog extends android.widget.AutoCompleteTextView

----------------FIELDS----------------

private static int LONGPRESS

private static final android.text.InputFilter[] NO_FILTERS

private char[] mCharacter

private long mDownTime

private boolean mGotEnterDown

private android.os.Handler mHandler

private int mHeightSpec

private int mMaxLength

private int mNodePointer

private java.lang.String mPreChange

private boolean mScrollToAccommodateCursor

private boolean mSingle

private boolean mTrackballDown

private android.webkit.WebView mWebView

private int mWidthSpec
----------------METHODS----------------

static void <clinit>()

 void <init>(
android.content.Context
android.webkit.WebView)

static int access$000()

static boolean access$100(
android.webkit.TextDialog)

static boolean access$102(
android.webkit.TextDialog
boolean)

private void sendDomEvent(
android.view.KeyEvent)

public boolean dispatchKeyEvent(
android.view.KeyEvent)

 boolean isSameTextField(
int)

public boolean onPreDraw()

protected void onTextChanged(
java.lang.CharSequence
int
int
int)

public boolean onTrackballEvent(
android.view.MotionEvent)

 void remove()

public boolean requestRectangleOnScreen(
android.graphics.Rect)

 void setInPassword(
boolean)

 void setMaxLength(
int)

 void setNodePointer(
int)

 void setRect(
int
int
int
int)

public void setSingleLine(
boolean)

 void setText(
java.lang.CharSequence
int
int)

 void setTextAndKeepSelection(
java.lang.String)

 void updateCachedTextfield()

________________CLASS________________


public final class android.webkit.URLUtil extends java.lang.Object

----------------FIELDS----------------

static final java.lang.String ASSET_BASE

private static final java.util.regex.Pattern CONTENT_DISPOSITION_PATTERN

static final java.lang.String FILE_BASE

private static final java.lang.String LOGTAG

static final java.lang.String PROXY_BASE
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static java.lang.String composeSearchUrl(
java.lang.String
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public static byte[] decode(
byte[])

public static final java.lang.String guessFileName(
java.lang.String
java.lang.String
java.lang.String)

public static java.lang.String guessUrl(
java.lang.String)

public static boolean isAboutUrl(
java.lang.String)

public static boolean isAssetUrl(
java.lang.String)

public static boolean isContentUrl(
java.lang.String)

public static boolean isCookielessProxyUrl(
java.lang.String)

public static boolean isDataUrl(
java.lang.String)

public static boolean isFileUrl(
java.lang.String)

public static boolean isHttpUrl(
java.lang.String)

public static boolean isHttpsUrl(
java.lang.String)

public static boolean isJavaScriptUrl(
java.lang.String)

public static boolean isNetworkUrl(
java.lang.String)

public static boolean isValidUrl(
java.lang.String)

private static java.lang.String parseContentDisposition(
java.lang.String)

private static int parseHex(
byte)

public static java.lang.String stripAnchor(
java.lang.String)

________________CLASS________________


public abstract interface class android.webkit.UrlInterceptHandler extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;)Landroid/webkit/CacheManager$CacheResult; )
public abstract android.webkit.CacheManager$CacheResult service(
java.lang.String
java.util.Map)

________________CLASS________________


public final class android.webkit.UrlInterceptRegistry extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String LOGTAG

private static boolean mDisabled

private static java.util.LinkedList mHandlerList
----------------METHODS----------------

static void <clinit>()

public void <init>()

private static java.util.LinkedList getHandlers()
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;)Landroid/webkit/CacheManager$CacheResult; )
public static android.webkit.CacheManager$CacheResult getSurrogate(
java.lang.String
java.util.Map)

public static boolean registerHandler(
android.webkit.UrlInterceptHandler)

public static void setUrlInterceptDisabled(
boolean)

public static boolean unregisterHandler(
android.webkit.UrlInterceptHandler)

public static boolean urlInterceptDisabled()

________________CLASS________________


public class android.webkit.WebBackForwardList extends java.lang.Object implements java.lang.Cloneable, java.io.Serializable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/webkit/WebHistoryItem;>; )
private java.util.ArrayList mArray

private boolean mClearPending

private int mCurrentIndex
----------------METHODS----------------

 void <init>()

private static native void nativeClose(
int)

private void removeHistoryItem(
int)

static synchronized native void restoreIndex(
int
int)

 void addHistoryItem(
android.webkit.WebHistoryItem)

protected android.webkit.WebBackForwardList clone()
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
protected volatile java.lang.Object clone()

 void close(
int)

 boolean getClearPending()

public int getCurrentIndex()

public android.webkit.WebHistoryItem getCurrentItem()

public android.webkit.WebHistoryItem getItemAtIndex(
int)

public int getSize()

 void setClearPending()

 void setCurrentIndex(
int)

________________CLASS________________


public class android.webkit.WebChromeClient extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void onCloseWindow(
android.webkit.WebView)

public boolean onCreateWindow(
android.webkit.WebView
boolean
boolean
android.os.Message)

public boolean onJsAlert(
android.webkit.WebView
java.lang.String
java.lang.String
android.webkit.JsResult)

public boolean onJsBeforeUnload(
android.webkit.WebView
java.lang.String
java.lang.String
android.webkit.JsResult)

public boolean onJsConfirm(
android.webkit.WebView
java.lang.String
java.lang.String
android.webkit.JsResult)

public boolean onJsPrompt(
android.webkit.WebView
java.lang.String
java.lang.String
java.lang.String
android.webkit.JsPromptResult)

public void onProgressChanged(
android.webkit.WebView
int)

public void onReceivedIcon(
android.webkit.WebView
android.graphics.Bitmap)

public void onReceivedTitle(
android.webkit.WebView
java.lang.String)

public void onRequestFocus(
android.webkit.WebView)

________________CLASS________________


public class android.webkit.WebHistoryItem extends java.lang.Object implements java.lang.Cloneable

----------------FIELDS----------------

private static int sNextId

private android.graphics.Bitmap mFavicon

private byte[] mFlattenedData

private final int mId

private java.lang.String mOriginalUrl

private java.lang.String mTitle

private java.lang.String mUrl
----------------METHODS----------------

static void <clinit>()

private void <init>()

private void <init>(
android.webkit.WebHistoryItem)

 void <init>(
byte[])

private native void inflate(
int
byte[])

private void update(
java.lang.String
java.lang.String
java.lang.String
android.graphics.Bitmap
byte[])

protected android.webkit.WebHistoryItem clone()
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
protected volatile java.lang.Object clone()

public android.graphics.Bitmap getFavicon()

 byte[] getFlattenedData()

public int getId()

public java.lang.String getOriginalUrl()

public java.lang.String getTitle()

public java.lang.String getUrl()

 void inflate(
int)

 void setFavicon(
android.graphics.Bitmap)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebIconDatabase; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.webkit.WebIconDatabase$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.webkit.WebIconDatabase$EventHandler$1 extends android.os.Handler

----------------FIELDS----------------

final android.webkit.WebIconDatabase$EventHandler this$1
----------------METHODS----------------

 void <init>(
android.webkit.WebIconDatabase$EventHandler)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebIconDatabase$EventHandler; )
@dalvik.annotation.InnerClass (accessFlags =2 name =IconResult )
 class android.webkit.WebIconDatabase$EventHandler$IconResult extends java.lang.Object

----------------FIELDS----------------

private final android.graphics.Bitmap mIcon

private final android.webkit.WebIconDatabase$IconListener mListener

private final java.lang.String mUrl

final android.webkit.WebIconDatabase$EventHandler this$1
----------------METHODS----------------

 void <init>(
android.webkit.WebIconDatabase$EventHandler
java.lang.String
android.graphics.Bitmap
android.webkit.WebIconDatabase$IconListener)

 void dispatch()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =EventHandler )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebIconDatabase; )
@dalvik.annotation.MemberClasses (value =Landroid/webkit/WebIconDatabase$EventHandler$IconResult; )
 class android.webkit.WebIconDatabase$EventHandler extends android.os.Handler

----------------FIELDS----------------

static final int CLOSE

private static final int ICON_RESULT

static final int OPEN

static final int RELEASE_ICON

static final int REMOVE_ALL

static final int REQUEST_ICON

static final int RETAIN_ICON

private android.os.Handler mHandler
@dalvik.annotation.Signature (value =Ljava/util/Vector<Landroid/os/Message;>; )
private java.util.Vector mMessages

final android.webkit.WebIconDatabase this$0
----------------METHODS----------------

private void <init>(
android.webkit.WebIconDatabase)

 void <init>(
android.webkit.WebIconDatabase
android.webkit.WebIconDatabase$1)

static void access$700(
android.webkit.WebIconDatabase$EventHandler
android.os.Message)

static void access$800(
android.webkit.WebIconDatabase$EventHandler)

private void createHandler()

private void postMessage(
android.os.Message)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =IconListener )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebIconDatabase; )
public abstract interface class android.webkit.WebIconDatabase$IconListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onReceivedIcon(
java.lang.String
android.graphics.Bitmap)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/webkit/WebIconDatabase$1;Landroid/webkit/WebIconDatabase$IconListener;Landroid/webkit/WebIconDatabase$EventHandler; )
public final class android.webkit.WebIconDatabase extends java.lang.Object

----------------FIELDS----------------

private static android.webkit.WebIconDatabase sIconDatabase

private final android.webkit.WebIconDatabase$EventHandler mEventHandler
----------------METHODS----------------

private void <init>()

static void access$100(
java.lang.String)

static void access$200()

static void access$300()

static android.graphics.Bitmap access$400(
java.lang.String)

static void access$500(
java.lang.String)

static void access$600(
java.lang.String)

public static android.webkit.WebIconDatabase getInstance()

private static native void nativeClose()

private static native android.graphics.Bitmap nativeIconForPageUrl(
java.lang.String)

private static native void nativeOpen(
java.lang.String)

private static native void nativeReleaseIconForPageUrl(
java.lang.String)

private static native void nativeRemoveAllIcons()

private static native void nativeRetainIconForPageUrl(
java.lang.String)

public void close()

 void createHandler()

public void open(
java.lang.String)

public void releaseIconForPageUrl(
java.lang.String)

public void removeAllIcons()

public void requestIconForPageUrl(
java.lang.String
android.webkit.WebIconDatabase$IconListener)

public void retainIconForPageUrl(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebSettings; )
 class android.webkit.WebSettings$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.webkit.WebSettings$EventHandler$1 extends android.os.Handler

----------------FIELDS----------------

final android.webkit.WebSettings$EventHandler this$1
----------------METHODS----------------

 void <init>(
android.webkit.WebSettings$EventHandler)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebSettings; )
@dalvik.annotation.InnerClass (accessFlags =2 name =EventHandler )
 class android.webkit.WebSettings$EventHandler extends java.lang.Object

----------------FIELDS----------------

static final int PRIORITY

static final int SYNC

private android.os.Handler mHandler

final android.webkit.WebSettings this$0
----------------METHODS----------------

private void <init>(
android.webkit.WebSettings)

 void <init>(
android.webkit.WebSettings
android.webkit.WebSettings$1)

static void access$300(
android.webkit.WebSettings$EventHandler)

static boolean access$600(
android.webkit.WebSettings$EventHandler
android.os.Message)

static void access$700(
android.webkit.WebSettings$EventHandler)

private void createHandler()

private boolean sendMessage(
android.os.Message)

private void setRenderPriority()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/webkit/WebSettings$LayoutAlgorithm;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =LayoutAlgorithm )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebSettings; )
public final class android.webkit.WebSettings$LayoutAlgorithm extends java.lang.Enum

----------------FIELDS----------------

private static final android.webkit.WebSettings$LayoutAlgorithm[] $VALUES

public static final android.webkit.WebSettings$LayoutAlgorithm NARROW_COLUMNS

public static final android.webkit.WebSettings$LayoutAlgorithm NORMAL

public static final android.webkit.WebSettings$LayoutAlgorithm SINGLE_COLUMN
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.webkit.WebSettings$LayoutAlgorithm valueOf(
java.lang.String)

public static android.webkit.WebSettings$LayoutAlgorithm[] values()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebSettings; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/webkit/WebSettings$RenderPriority;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =RenderPriority )
public final class android.webkit.WebSettings$RenderPriority extends java.lang.Enum

----------------FIELDS----------------

private static final android.webkit.WebSettings$RenderPriority[] $VALUES

public static final android.webkit.WebSettings$RenderPriority HIGH

public static final android.webkit.WebSettings$RenderPriority LOW

public static final android.webkit.WebSettings$RenderPriority NORMAL
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.webkit.WebSettings$RenderPriority valueOf(
java.lang.String)

public static android.webkit.WebSettings$RenderPriority[] values()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/webkit/WebSettings$TextSize;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =TextSize )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebSettings; )
public final class android.webkit.WebSettings$TextSize extends java.lang.Enum

----------------FIELDS----------------

private static final android.webkit.WebSettings$TextSize[] $VALUES

public static final android.webkit.WebSettings$TextSize LARGER

public static final android.webkit.WebSettings$TextSize LARGEST

public static final android.webkit.WebSettings$TextSize NORMAL

public static final android.webkit.WebSettings$TextSize SMALLER

public static final android.webkit.WebSettings$TextSize SMALLEST

 int value
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.webkit.WebSettings$TextSize valueOf(
java.lang.String)

public static android.webkit.WebSettings$TextSize[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/webkit/WebSettings$1;Landroid/webkit/WebSettings$EventHandler;Landroid/webkit/WebSettings$RenderPriority;Landroid/webkit/WebSettings$TextSize;Landroid/webkit/WebSettings$LayoutAlgorithm; )
public class android.webkit.WebSettings extends java.lang.Object

----------------FIELDS----------------

private static java.lang.String ANDROID_USERAGENT

private static final java.lang.String DESKTOP_USERAGENT

private static final java.lang.String IPHONE_USERAGENT

public static final int LOAD_CACHE_ELSE_NETWORK

public static final int LOAD_CACHE_ONLY

public static final int LOAD_DEFAULT

public static final int LOAD_NORMAL

public static final int LOAD_NO_CACHE

private boolean mBlockNetworkImage

private android.webkit.BrowserFrame mBrowserFrame

private java.lang.String mCursiveFontFamily

private int mDefaultFixedFontSize

private int mDefaultFontSize

private java.lang.String mDefaultTextEncoding

private final android.webkit.WebSettings$EventHandler mEventHandler

private java.lang.String mFantasyFontFamily

private java.lang.String mFixedFontFamily

private boolean mJavaScriptCanOpenWindowsAutomatically

private boolean mJavaScriptEnabled

private android.webkit.WebSettings$LayoutAlgorithm mLayoutAlgorithm

private boolean mLightTouchEnabled

private boolean mLoadsImagesAutomatically

private int mMinimumFontSize

private int mMinimumLogicalFontSize

private boolean mNavDump

private boolean mNeedInitialFocus

private int mOverrideCacheMode

private boolean mPluginsEnabled

private java.lang.String mPluginsPath

private android.webkit.WebSettings$RenderPriority mRenderPriority

private java.lang.String mSansSerifFontFamily

private boolean mSaveFormData

private boolean mSavePassword

private java.lang.String mSerifFontFamily

private java.lang.String mStandardFontFamily

private boolean mSupportMultipleWindows

private boolean mSupportZoom

private boolean mSyncPending

private android.webkit.WebSettings$TextSize mTextSize

private boolean mUseDoubleTree

private boolean mUseWideViewport

private java.lang.String mUserAgent
----------------METHODS----------------

 void <init>(
android.content.Context)

static android.webkit.BrowserFrame access$000(
android.webkit.WebSettings)

static void access$100(
android.webkit.WebSettings
int)

static boolean access$202(
android.webkit.WebSettings
boolean)

static android.webkit.WebSettings$RenderPriority access$400(
android.webkit.WebSettings)

private native void nativeSync(
int)

private int pin(
int)

private void postSync()

public boolean getBlockNetworkImage()

public int getCacheMode()

public java.lang.String getCursiveFontFamily()

public int getDefaultFixedFontSize()

public int getDefaultFontSize()

public java.lang.String getDefaultTextEncodingName()

public java.lang.String getFantasyFontFamily()

public java.lang.String getFixedFontFamily()

public boolean getJavaScriptCanOpenWindowsAutomatically()

public boolean getJavaScriptEnabled()

public android.webkit.WebSettings$LayoutAlgorithm getLayoutAlgorithm()

public boolean getLightTouchEnabled()

public boolean getLoadsImagesAutomatically()

public int getMinimumFontSize()

public int getMinimumLogicalFontSize()

public boolean getNavDump()

 boolean getNeedInitialFocus()

public boolean getPluginsEnabled()

public java.lang.String getPluginsPath()

public java.lang.String getSansSerifFontFamily()

public boolean getSaveFormData()

public boolean getSavePassword()

public java.lang.String getSerifFontFamily()

public java.lang.String getStandardFontFamily()

public android.webkit.WebSettings$TextSize getTextSize()

public boolean getUseDoubleTree()

public boolean getUseWideViewPort()

public int getUserAgent()

 java.lang.String getUserAgentString()

public void setBlockNetworkImage(
boolean)

public void setCacheMode(
int)

public void setCursiveFontFamily(
java.lang.String)

public void setDefaultFixedFontSize(
int)

public void setDefaultFontSize(
int)

public void setDefaultTextEncodingName(
java.lang.String)

public void setFantasyFontFamily(
java.lang.String)

public void setFixedFontFamily(
java.lang.String)

public void setJavaScriptCanOpenWindowsAutomatically(
boolean)

public void setJavaScriptEnabled(
boolean)

public void setLayoutAlgorithm(
android.webkit.WebSettings$LayoutAlgorithm)

public void setLightTouchEnabled(
boolean)

public void setLoadsImagesAutomatically(
boolean)

public void setMinimumFontSize(
int)

public void setMinimumLogicalFontSize(
int)

public void setNavDump(
boolean)

public void setNeedInitialFocus(
boolean)

public void setPluginsEnabled(
boolean)

public void setPluginsPath(
java.lang.String)

public void setRenderPriority(
android.webkit.WebSettings$RenderPriority)

public void setSansSerifFontFamily(
java.lang.String)

public void setSaveFormData(
boolean)

public void setSavePassword(
boolean)

public void setSerifFontFamily(
java.lang.String)

public void setStandardFontFamily(
java.lang.String)

public void setSupportMultipleWindows(
boolean)

public void setSupportZoom(
boolean)

public void setTextSize(
android.webkit.WebSettings$TextSize)

public void setUseDoubleTree(
boolean)

public void setUseWideViewPort(
boolean)

public void setUserAgent(
int)

public boolean supportMultipleWindows()

public boolean supportZoom()

 void syncSettingsAndCreateHandler(
android.webkit.BrowserFrame)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebSyncManager; )
 class android.webkit.WebSyncManager$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebSyncManager; )
@dalvik.annotation.InnerClass (accessFlags =2 name =SyncHandler )
 class android.webkit.WebSyncManager$SyncHandler extends android.os.Handler

----------------FIELDS----------------

final android.webkit.WebSyncManager this$0
----------------METHODS----------------

private void <init>(
android.webkit.WebSyncManager)

 void <init>(
android.webkit.WebSyncManager
android.webkit.WebSyncManager$1)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.webkit.WebView$1 extends java.lang.Object implements android.content.DialogInterface$OnCancelListener

----------------FIELDS----------------

final android.webkit.WebView this$0

final android.os.Message val$resumeMsg
----------------METHODS----------------

 void <init>(
android.webkit.WebView
android.os.Message)

public void onCancel(
android.content.DialogInterface)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.webkit.WebView$2 extends java.lang.Object implements android.content.DialogInterface$OnClickListener

----------------FIELDS----------------

final android.webkit.WebView this$0

final android.os.Message val$neverRemember
----------------METHODS----------------

 void <init>(
android.webkit.WebView
android.os.Message)

public void onClick(
android.content.DialogInterface
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.webkit.WebView$3 extends java.lang.Object implements android.content.DialogInterface$OnClickListener

----------------FIELDS----------------

final android.webkit.WebView this$0

final android.os.Message val$remember
----------------METHODS----------------

 void <init>(
android.webkit.WebView
android.os.Message)

public void onClick(
android.content.DialogInterface
int)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.webkit.WebView$4 extends java.lang.Object implements android.content.DialogInterface$OnClickListener

----------------FIELDS----------------

final android.webkit.WebView this$0

final android.os.Message val$resumeMsg
----------------METHODS----------------

 void <init>(
android.webkit.WebView
android.os.Message)

public void onClick(
android.content.DialogInterface
int)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.webkit.WebView$5 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.webkit.WebView this$0
----------------METHODS----------------

 void <init>(
android.webkit.WebView)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.webkit.WebView$6 extends java.lang.Object implements android.view.View$OnClickListener

----------------FIELDS----------------

final android.webkit.WebView this$0
----------------METHODS----------------

 void <init>(
android.webkit.WebView)

public void onClick(
android.view.View)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.webkit.WebView$7 extends java.lang.Object implements android.view.View$OnClickListener

----------------FIELDS----------------

final android.webkit.WebView this$0
----------------METHODS----------------

 void <init>(
android.webkit.WebView)

public void onClick(
android.view.View)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.webkit.WebView$8 extends java.lang.Object implements android.view.View$OnClickListener

----------------FIELDS----------------

final android.webkit.WebView this$0
----------------METHODS----------------

 void <init>(
android.webkit.WebView)

public void onClick(
android.view.View)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/RelativeLayout$LayoutParams; )
@android.widget.RemoteViews$RemoteView
public class android.widget.RelativeLayout extends android.view.ViewGroup

----------------FIELDS----------------

public static final int ABOVE

public static final int ALIGN_BASELINE

public static final int ALIGN_BOTTOM

public static final int ALIGN_LEFT

public static final int ALIGN_PARENT_BOTTOM

public static final int ALIGN_PARENT_LEFT

public static final int ALIGN_PARENT_RIGHT

public static final int ALIGN_PARENT_TOP

public static final int ALIGN_RIGHT

public static final int ALIGN_TOP

public static final int BELOW

public static final int CENTER_HORIZONTAL

public static final int CENTER_IN_PARENT

public static final int CENTER_VERTICAL

public static final int LEFT_OF

public static final int RIGHT_OF

public static final int TRUE

private static final int VERB_COUNT

private android.view.View mBaselineView

private final android.graphics.Rect mContentBounds

private int mGravity

private boolean mHasBaselineAlignedChild

private int mIgnoreGravity

private final android.graphics.Rect mSelfBounds
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private void alignBaseline(
android.view.View
android.widget.RelativeLayout$LayoutParams)

private void applySizeRules(
android.widget.RelativeLayout$LayoutParams
int
int)

private void centerHorizontal(
android.view.View
android.widget.RelativeLayout$LayoutParams
int)

private void centerVertical(
android.view.View
android.widget.RelativeLayout$LayoutParams
int)

private int getChildMeasureSpec(
int
int
int
int
int
int
int
int)

private android.view.View getRelatedView(
int[]
int)

private int getRelatedViewBaseline(
int[]
int)

private android.widget.RelativeLayout$LayoutParams getRelatedViewParams(
int[]
int)

private void initFromAttributes(
android.content.Context
android.util.AttributeSet)

private void measureChild(
android.view.View
android.widget.RelativeLayout$LayoutParams
int
int)

private void positionChild(
android.view.View
android.widget.RelativeLayout$LayoutParams
int
int)

protected boolean checkLayoutParams(
android.view.ViewGroup$LayoutParams)

protected android.view.ViewGroup$LayoutParams generateDefaultLayoutParams()

public volatile android.view.ViewGroup$LayoutParams generateLayoutParams(
android.util.AttributeSet)

protected android.view.ViewGroup$LayoutParams generateLayoutParams(
android.view.ViewGroup$LayoutParams)

public android.widget.RelativeLayout$LayoutParams generateLayoutParams(
android.util.AttributeSet)

public int getBaseline()

protected void onLayout(
boolean
int
int
int
int)

protected void onMeasure(
int
int)

public void setGravity(
int)

public void setHorizontalGravity(
int)

public void setIgnoreGravity(
int)

public void setVerticalGravity(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =ExtendedZoomControls )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebView; )
 class android.webkit.WebView$ExtendedZoomControls extends android.widget.RelativeLayout

----------------FIELDS----------------

 android.widget.ZoomControls mZoomControls

 android.widget.ImageView mZoomMagnify

final android.webkit.WebView this$0
----------------METHODS----------------

public void <init>(
android.webkit.WebView
android.content.Context
android.util.AttributeSet)

private void fade(
int
float
float)

public boolean hasFocus()

public void hide()

public void setIsZoomMagnifyEnabled(
boolean)

public void setOnZoomInClickListener(
android.view.View$OnClickListener)

public void setOnZoomMagnifyClickListener(
android.view.View$OnClickListener)

public void setOnZoomOutClickListener(
android.view.View$OnClickListener)

public void show(
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebView; )
@dalvik.annotation.InnerClass (accessFlags =2 name =FocusNode )
 class android.webkit.WebView$FocusNode extends java.lang.Object

----------------FIELDS----------------

public android.graphics.Rect mBounds

public int mFramePointer

public boolean mIsAnchor

public boolean mIsPassword

public boolean mIsRtlText

public boolean mIsTextArea

public boolean mIsTextField

public int mMaxLength

public java.lang.String mName

public int mNodePointer

public int mRootTextGeneration

public int mSelectionEnd

public int mSelectionStart

public java.lang.String mText

public int mTextSize

final android.webkit.WebView this$0
----------------METHODS----------------

public void <init>(
android.webkit.WebView)

private void setAll(
boolean
boolean
boolean
boolean
boolean
int
int
int
int
int
int
int
int
java.lang.String
java.lang.String
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebView; )
@dalvik.annotation.InnerClass (accessFlags =1 name =HitTestResult )
public class android.webkit.WebView$HitTestResult extends java.lang.Object

----------------FIELDS----------------

public static final int ANCHOR_TYPE

public static final int EDIT_TEXT_TYPE

public static final int EMAIL_TYPE

public static final int GEO_TYPE

public static final int IMAGE_ANCHOR_TYPE

public static final int IMAGE_TYPE

public static final int PHONE_TYPE

public static final int SRC_ANCHOR_TYPE

public static final int SRC_IMAGE_ANCHOR_TYPE

public static final int UNKNOWN_TYPE

private java.lang.String mExtra

private int mType

final android.webkit.WebView this$0
----------------METHODS----------------

 void <init>(
android.webkit.WebView)

static void access$000(
android.webkit.WebView$HitTestResult
int)

static void access$100(
android.webkit.WebView$HitTestResult
java.lang.String)

static int access$200(
android.webkit.WebView$HitTestResult)

private void setExtra(
java.lang.String)

private void setType(
int)

public java.lang.String getExtra()

public int getType()

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.webkit.WebView$InvokeListBox$1 extends java.lang.Object implements android.content.DialogInterface$OnClickListener

----------------FIELDS----------------

final android.webkit.WebView$InvokeListBox this$1

final android.webkit.WebView$InvokeListBox$MyArrayListAdapter val$adapter

final android.widget.ListView val$listView
----------------METHODS----------------

 void <init>(
android.webkit.WebView$InvokeListBox
android.webkit.WebView$InvokeListBox$MyArrayListAdapter
android.widget.ListView)

public void onClick(
android.content.DialogInterface
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.webkit.WebView$InvokeListBox$2 extends java.lang.Object implements android.widget.AdapterView$OnItemClickListener

----------------FIELDS----------------

final android.webkit.WebView$InvokeListBox this$1

final android.app.AlertDialog val$dialog
----------------METHODS----------------

 void <init>(
android.webkit.WebView$InvokeListBox
android.app.AlertDialog)

public void onItemClick(
android.widget.AdapterView
android.view.View
int
long)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =Container )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebView$InvokeListBox; )
 class android.webkit.WebView$InvokeListBox$Container extends java.lang.Object

----------------FIELDS----------------

 boolean mEnabled

 int mId

 java.lang.String mString

final android.webkit.WebView$InvokeListBox this$1
----------------METHODS----------------

private void <init>(
android.webkit.WebView$InvokeListBox)

 void <init>(
android.webkit.WebView$InvokeListBox
android.webkit.WebView$1)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>Landroid/widget/BaseAdapter;Landroid/widget/Filterable; )
@dalvik.annotation.MemberClasses (value =Landroid/widget/ArrayAdapter$1;Landroid/widget/ArrayAdapter$ArrayFilter; )
public class android.widget.ArrayAdapter extends android.widget.BaseAdapter implements android.widget.Filterable

----------------FIELDS----------------

private android.content.Context mContext

private int mDropDownResource

private int mFieldId
@dalvik.annotation.Signature (value =Landroid/widget/ArrayAdapter<TT;>.ArrayFilter; )
private android.widget.ArrayAdapter$ArrayFilter mFilter

private android.view.LayoutInflater mInflater

private final java.lang.Object mLock

private boolean mNotifyOnChange
@dalvik.annotation.Signature (value =Ljava/util/List<TT;>; )
private java.util.List mObjects
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<TT;>; )
private java.util.ArrayList mOriginalValues

private int mResource
----------------METHODS----------------

public void <init>(
android.content.Context
int)

public void <init>(
android.content.Context
int
int)
@dalvik.annotation.Signature (value =(Landroid/content/Context;IILjava/util/List<TT;>;)V )
public void <init>(
android.content.Context
int
int
java.util.List)
@dalvik.annotation.Signature (value =(Landroid/content/Context;II[TT;)V )
public void <init>(
android.content.Context
int
int
java.lang.Object[])
@dalvik.annotation.Signature (value =(Landroid/content/Context;ILjava/util/List<TT;>;)V )
public void <init>(
android.content.Context
int
java.util.List)
@dalvik.annotation.Signature (value =(Landroid/content/Context;I[TT;)V )
public void <init>(
android.content.Context
int
java.lang.Object[])

static java.util.ArrayList access$100(
android.widget.ArrayAdapter)

static java.util.ArrayList access$102(
android.widget.ArrayAdapter
java.util.ArrayList)

static java.lang.Object access$200(
android.widget.ArrayAdapter)

static java.util.List access$300(
android.widget.ArrayAdapter)

static java.util.List access$302(
android.widget.ArrayAdapter
java.util.List)
@dalvik.annotation.Signature (value =(Landroid/content/Context;II)Landroid/widget/ArrayAdapter<Ljava/lang/CharSequence;>; )
public static android.widget.ArrayAdapter createFromResource(
android.content.Context
int
int)

private android.view.View createViewFromResource(
int
android.view.View
android.view.ViewGroup
int)
@dalvik.annotation.Signature (value =(Landroid/content/Context;IILjava/util/List<TT;>;)V )
private void init(
android.content.Context
int
int
java.util.List)
@dalvik.annotation.Signature (value =(TT;)V )
public void add(
java.lang.Object)

public void clear()

public android.content.Context getContext()

public int getCount()

public android.view.View getDropDownView(
int
android.view.View
android.view.ViewGroup)

public android.widget.Filter getFilter()
@dalvik.annotation.Signature (value =(I)TT; )
public java.lang.Object getItem(
int)

public long getItemId(
int)
@dalvik.annotation.Signature (value =(TT;)I )
public int getPosition(
java.lang.Object)

public android.view.View getView(
int
android.view.View
android.view.ViewGroup)
@dalvik.annotation.Signature (value =(TT;I)V )
public void insert(
java.lang.Object
int)

public void notifyDataSetChanged()
@dalvik.annotation.Signature (value =(TT;)V )
public void remove(
java.lang.Object)

public void setDropDownViewResource(
int)

public void setNotifyOnChange(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =MyArrayListAdapter )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebView$InvokeListBox; )
@dalvik.annotation.Signature (value =Landroid/widget/ArrayAdapter<Landroid/webkit/WebView$InvokeListBox$Container;>; )
 class android.webkit.WebView$InvokeListBox$MyArrayListAdapter extends android.widget.ArrayAdapter

----------------FIELDS----------------

final android.webkit.WebView$InvokeListBox this$1
----------------METHODS----------------

public void <init>(
android.webkit.WebView$InvokeListBox
android.content.Context
android.webkit.WebView$InvokeListBox$Container[]
boolean)

private android.webkit.WebView$InvokeListBox$Container item(
int)

public boolean areAllItemsEnabled()

public long getItemId(
int)

public boolean hasStableIds()

public boolean isEnabled(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =InvokeListBox )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebView; )
@dalvik.annotation.MemberClasses (value =Landroid/webkit/WebView$InvokeListBox$MyArrayListAdapter;Landroid/webkit/WebView$InvokeListBox$Container; )
 class android.webkit.WebView$InvokeListBox extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

private java.lang.String[] mArray

private android.webkit.WebView$InvokeListBox$Container[] mContainers

private boolean[] mEnableArray

private boolean mMultiple

private int[] mSelectedArray

private int mSelection

final android.webkit.WebView this$0
----------------METHODS----------------

private void <init>(
android.webkit.WebView
java.lang.String[]
boolean[]
int)

 void <init>(
android.webkit.WebView
java.lang.String[]
boolean[]
int
android.webkit.WebView$1)

private void <init>(
android.webkit.WebView
java.lang.String[]
boolean[]
int[])

 void <init>(
android.webkit.WebView
java.lang.String[]
boolean[]
int[]
android.webkit.WebView$1)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebView; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =PictureListener )
public abstract interface class android.webkit.WebView$PictureListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onNewPicture(
android.webkit.WebView
android.graphics.Picture)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebView; )
@dalvik.annotation.InnerClass (accessFlags =0 name =PrivateHandler )
 class android.webkit.WebView$PrivateHandler extends android.os.Handler

----------------FIELDS----------------

final android.webkit.WebView this$0
----------------METHODS----------------

 void <init>(
android.webkit.WebView)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebView; )
@dalvik.annotation.InnerClass (accessFlags =2 name =UpdateTextEntryAdapter )
 class android.webkit.WebView$UpdateTextEntryAdapter extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

private java.lang.String mName

private android.os.Message mUpdateMessage

private java.lang.String mUrl

final android.webkit.WebView this$0
----------------METHODS----------------

public void <init>(
android.webkit.WebView
java.lang.String
java.lang.String
android.os.Message)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1 name =WebViewTransport )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebView; )
public class android.webkit.WebView$WebViewTransport extends java.lang.Object

----------------FIELDS----------------

private android.webkit.WebView mWebview

final android.webkit.WebView this$0
----------------METHODS----------------

public void <init>(
android.webkit.WebView)

public android.webkit.WebView getWebView()

public void setWebView(
android.webkit.WebView)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/AbsoluteLayout$LayoutParams; )
@android.widget.RemoteViews$RemoteView
public class android.widget.AbsoluteLayout extends android.view.ViewGroup

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

protected boolean checkLayoutParams(
android.view.ViewGroup$LayoutParams)

protected android.view.ViewGroup$LayoutParams generateDefaultLayoutParams()

public android.view.ViewGroup$LayoutParams generateLayoutParams(
android.util.AttributeSet)

protected android.view.ViewGroup$LayoutParams generateLayoutParams(
android.view.ViewGroup$LayoutParams)

protected void onLayout(
boolean
int
int
int
int)

protected void onMeasure(
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/webkit/WebView$InvokeListBox;Landroid/webkit/WebView$PrivateHandler;Landroid/webkit/WebView$UpdateTextEntryAdapter;Landroid/webkit/WebView$FocusNode;Landroid/webkit/WebView$HitTestResult;Landroid/webkit/WebView$PictureListener;Landroid/webkit/WebView$WebViewTransport;Landroid/webkit/WebView$ExtendedZoomControls; )
public class android.webkit.WebView extends android.widget.AbsoluteLayout implements android.view.ViewTreeObserver$OnGlobalFocusChangeListener, android.view.ViewGroup$OnHierarchyChangeListener

----------------FIELDS----------------

static final boolean DEBUG

private static final float DEFAULT_MAX_ZOOM_SCALE

private static final float DEFAULT_MIN_ZOOM_SCALE

static final int DID_FIRST_LAYOUT_MSG_ID

private static final int DOUBLE_TAP_TIMEOUT

private static final boolean ENABLE_COPY_PASTE

private static final int FIRST_SCROLL_ZOOM

private static final int LAST_SCROLL_ZOOM

static final java.lang.String LOGTAG

static final boolean LOGV_ENABLED

private static final int LONG_PRESS_TIMEOUT

static final int LONG_PRESS_TRACKBALL

static final int MARK_NODE_INVALID_ID

private static final int MAX_DURATION

private static final float MAX_SLOPE_FOR_DIAG

private static final int MIN_BREAK_SNAP_CROSS_DISTANCE

private static final int MIN_FLING_TIME

private static final int MIN_LOCK_SNAP_REVERSE_DISTANCE

private static final int NEVER_REMEMBER_PASSWORD

static final int NEW_PICTURE_MSG_ID

static final int NOTIFY_FOCUS_SET_MSG_ID

private static final int PAGE_SCROLL_OVERLAP

static final int RECOMPUTE_FOCUS_MSG_ID

private static final int RELEASE_SINGLE_TAP

private static final int REMEMBER_PASSWORD

private static final int RESUME_WEBCORE_UPDATE

public static final java.lang.String SCHEME_GEO

public static final java.lang.String SCHEME_MAILTO

public static final java.lang.String SCHEME_TEL

static final int SCROLL_BY_MSG_ID

static final int SCROLL_TO_MSG_ID

private static final int SCROLL_ZOOM_ANIMATION_IN

private static final int SCROLL_ZOOM_ANIMATION_OUT

private static final int SCROLL_ZOOM_DURATION

private static final int SCROLL_ZOOM_FINGER_BUFFER

private static final int SCROLL_ZOOM_GRID

private static final int SCROLL_ZOOM_OUT

private static final int SELECT_CURSOR_OFFSET

private static final long SET_KIT_FOCUS_DELAY

private static final int SNAP_NONE

private static final int SNAP_X

private static final int SNAP_X_LOCK

private static final int SNAP_Y

private static final int SNAP_Y_LOCK

static final int SPAWN_SCROLL_TO_MSG_ID

private static final int STD_SPEED

private static final int SWITCH_TO_ENTER

private static final int SWITCH_TO_LONGPRESS

private static final int SWITCH_TO_SHORTPRESS

static final int SYNC_SCROLL_TO_MSG_ID

private static final int TAP_TIMEOUT

private static final int TOUCH_DONE_MODE

private static final int TOUCH_DOUBLECLICK_MODE

private static final int TOUCH_DRAG_MODE

private static final int TOUCH_DRAG_START_MODE

private static final int TOUCH_INIT_MODE

private static final int TOUCH_SHORTPRESS_MODE

private static final int TOUCH_SHORTPRESS_START_MODE

private static final int TOUCH_SLOP_SQUARE

private static final int TRACKBALL_KEY_TIMEOUT

private static final int TRACKBALL_MULTIPLIER

private static final int TRACKBALL_SCALE

private static final int TRACKBALL_SCROLL_COUNT

private static final int TRACKBALL_TIMEOUT

private static final int TRACKBALL_WAIT

static final int UPDATE_CLIPBOARD

static final int UPDATE_TEXTFIELD_TEXT_MSG_ID

private static final int UPDATE_TEXT_ENTRY_ADAPTER

static final int UPDATE_TEXT_ENTRY_MSG_ID

static final int WEBCORE_INITIALIZED_MSG_ID

private static final int ZOOM_ANIMATION_LENGTH

private static final long ZOOM_CONTROLS_TIMEOUT

static final int ZOOM_OUT_WIDTH

private static android.webkit.PluginList sPluginList

private float mActualScale

private boolean mAltIsPressed

private int mBackgroundColor

private final android.webkit.CallbackProxy mCallbackProxy

private android.net.http.SslCertificate mCertificate

private int mContentHeight

private int mContentWidth

private final android.webkit.WebViewDatabase mDatabase

private long mDownTime

private boolean mDrawFocusRing

private boolean mDrawHistory

private boolean mExtendSelection

private android.webkit.WebViewCore$FocusData mFocusData

private android.webkit.WebView$FocusNode mFocusNode

private boolean mGlobalFocusChangeListenerAdded

private boolean mGotDown

private boolean mGotKeyDown

 boolean mHeightCanMeasure

private int mHistoryHeight

private android.graphics.Picture mHistoryPicture

private int mHistoryWidth

private int mInitialScale

private float mInvActualScale

private float mInvFinalZoomScale

private float mInvInitialZoomScale

private android.graphics.Rect mLastFocusBounds

private long mLastFocusTime

 int mLastHeightSent

private int mLastScrollX

private int mLastScrollY

private long mLastTouchTime

private float mLastTouchX

private float mLastTouchY

private android.graphics.Rect mLastVisibleRectSent

 int mLastWidthSent

private float mLastZoomScrollRawX

private float mLastZoomScrollRawY

private boolean mMapTrackballToArrowKeys

private float mMaxZoomScale

private float mMinZoomScale

private int mNativeClass

private boolean mNeedsUpdateTextEntry

private boolean mOverlayHorizontalScrollbar

private boolean mOverlayVerticalScrollbar

private android.webkit.WebView$PictureListener mPictureListener

final android.os.Handler mPrivateHandler

private android.widget.Scroller mScroller

private int mSelectX

private int mSelectY

private boolean mShiftIsPressed

private boolean mSnapPositive

private int mSnapScrollMode

private android.webkit.TextDialog mTextEntry

private int mTextGeneration

private int mTouchMode

private boolean mTrackTrackball

private boolean mTrackballDown

private long mTrackballFirstTime

private long mTrackballLastTime

private float mTrackballRemainsX

private float mTrackballRemainsY

private long mTrackballUpTime

private int mTrackballXMove

private int mTrackballYMove

private boolean mUserScroll

 android.view.VelocityTracker mVelocityTracker

private android.webkit.WebViewCore mWebViewCore

 boolean mWidthCanMeasure

private boolean mWrapContent

private java.lang.Runnable mZoomControlRunnable

private android.webkit.WebView$ExtendedZoomControls mZoomControls

private float mZoomScale

private float mZoomScrollInvLimit

private float mZoomScrollLimit

private long mZoomScrollStart

private int mZoomScrollX

private int mZoomScrollY

private long mZoomStart
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static void access$1000(
android.webkit.WebView)

static void access$1100(
android.webkit.WebView)

static void access$1200(
android.webkit.WebView)

static void access$1300(
android.webkit.WebView
int
int)

static boolean access$1400(
android.webkit.WebView)

static boolean access$1402(
android.webkit.WebView
boolean)

static boolean access$1500(
android.webkit.WebView
int
int)

static android.webkit.WebViewCore access$1600(
android.webkit.WebView)

static void access$1700(
android.webkit.WebView
int
int)

static float access$1800(
android.webkit.WebView)

static float access$1802(
android.webkit.WebView
float)

static int access$1900(
android.webkit.WebView)

static void access$2000(
android.webkit.WebView
int
int
boolean)

static android.webkit.WebView$PictureListener access$2100(
android.webkit.WebView)

static void access$2200(
android.webkit.WebView
int)

static boolean access$2300(
android.webkit.WebView)

static android.webkit.TextDialog access$2400(
android.webkit.WebView)

static int access$2500(
android.webkit.WebView)

static int access$2600(
android.webkit.WebView)

static float access$2702(
android.webkit.WebView
float)

static float access$2802(
android.webkit.WebView
float)

static boolean access$2900(
android.webkit.WebView)

static android.webkit.WebViewDatabase access$300(
android.webkit.WebView)

static int access$3000(
android.webkit.WebView)

static void access$3100(
android.webkit.WebView
float
boolean)

static void access$3200(
android.webkit.WebView
int)

static void access$3300(
android.webkit.WebView
boolean)

static void access$3400(
android.webkit.WebView)

static boolean access$3502(
android.webkit.WebView
boolean)

static boolean access$3602(
android.webkit.WebView
boolean)

static android.content.Context access$3800(
android.webkit.WebView)

static android.content.Context access$3900(
android.webkit.WebView)

static android.content.Context access$400(
android.webkit.WebView)

static android.content.Context access$4000(
android.webkit.WebView)

static android.webkit.WebView$ExtendedZoomControls access$500(
android.webkit.WebView)

static java.lang.Runnable access$600(
android.webkit.WebView)

static long access$700()

static void access$800(
android.webkit.WebView)

static int access$900(
android.webkit.WebView)

static int access$902(
android.webkit.WebView
int)

private void calcOurContentVisibleRect(
android.graphics.Rect)

private void calcOurVisibleRect(
android.graphics.Rect)

private boolean canZoomScrollOut()

private void clearMatches()

private void clearTextEntry()

private static int computeDuration(
int
int)

private void contentSizeChanged(
boolean)

private int contentToView(
int)

private android.webkit.WebView$ExtendedZoomControls createZoomControls()

public static void disablePlatformNotifications()

private void doFling()

private void doShortPress()

private void doTrackball(
long)

private void drawCoreAndFocusRing(
android.graphics.Canvas
int
boolean)

private void drawMagnifyFrame(
android.graphics.Canvas
android.graphics.Rect
android.graphics.Paint)

public static void enablePlatformNotifications()

private boolean extendScroll(
int)

public static java.lang.String findAddress(
java.lang.String)

private void findAll(
java.lang.String
android.os.Message)

private void findFirst(
java.lang.String
android.os.Message)

private void findNext(
java.lang.String
android.os.Message)

private void findPrevious(
java.lang.String
android.os.Message)

public static android.webkit.PluginList getPluginList()

private int getScaledMaxXScroll()

private int getScaledMaxYScroll()

private int getViewHeight()

private int getViewWidth()

private void goBackOrForward(
int
boolean)

private boolean inEditingMode()

private void init()

private int keyCodeToSoundsEffect(
int)

private void moveZoomScrollWindow(
float
float)

private native void nativeClearFocus(
int
int)

private native void nativeCreate(
int)

private native void nativeDebugDump()

private native void nativeDestroy()

private native void nativeDrawFocusRing(
android.graphics.Canvas)

private native void nativeDrawSelection(
android.graphics.Canvas
int
int
boolean)

private native android.graphics.Rect nativeGetFocusRingBounds()

private native android.graphics.Rect nativeGetNavBounds()

private native android.graphics.Region nativeGetSelection()

private native boolean nativeHasSrcUrl()

private native boolean nativeIsImage(
int
int)

private native void nativeMarkNodeInvalid(
int)

private native void nativeMotionUp(
int
int
int
boolean)

private native boolean nativeMoveFocus(
int
int
boolean)

private native void nativeMoveSelection(
int
int
boolean)

private native void nativeNotifyFocusSet(
boolean)

private native void nativeRecomputeFocus()

private native void nativeRecordButtons()

private native void nativeResetFocus()

private native void nativeResetNavClipBounds()

private native void nativeSelectBestAt(
android.graphics.Rect)

private native void nativeSetFollowedLink(
boolean)

private native void nativeSetHeightCanMeasure(
boolean)

private native void nativeSetNavBounds(
android.graphics.Rect)

private native void nativeSetNavClipBounds(
android.graphics.Rect)

private native void nativeUpdateCachedTextfield(
java.lang.String
int)

private native boolean nativeUpdateFocusNode()

private boolean navHandledKey(
int
int
boolean
long)

private static int pinLoc(
int
int
int)

private int pinLocX(
int)

private int pinLocY(
int)

private boolean pinScrollBy(
int
int
boolean)

private boolean pinScrollTo(
int
int
boolean)

private void recordNewContentSize(
int
int
boolean)

private int scaleTrackballX(
float
int)

private int scaleTrackballY(
float
int)

private void scrollZoomDraw(
android.graphics.Canvas)

private android.graphics.Rect scrollZoomFrame(
int
int
float)

private float scrollZoomGridScale(
float)

private float scrollZoomMagScale(
float)

private float scrollZoomX(
float)

private float scrollZoomY(
float)

private void sendFinalFocus(
int
int
int
int)

private void sendKitFocus()

private void sendMotionUp(
int
int
int
int
int
int
int
boolean
boolean)

private android.graphics.Rect sendOurVisibleRect()

private boolean sendViewSizeZoom()

private void setContentScrollBy(
int
int)

private boolean setContentScrollTo(
int
int)

private void setFocusData(
int
int
int
int
int
int
boolean)

private void setNewZoomScale(
float
boolean)

private void setTextEntryRect(
int
int
int
int)

private void setZoomScrollIn()

private void spawnContentScrollTo(
int
int)

private void startZoomScrollOut()

private void updateSelection()

private void updateTextEntry()

private void viewInvalidate()

private void zoomScrollOut()

private void zoomScrollTap(
float
float)

private boolean zoomWithPreview(
float)

public void addJavascriptInterface(
java.lang.Object
java.lang.String)

public boolean canGoBack()

public boolean canGoBackOrForward(
int)

public boolean canGoForward()

public android.graphics.Picture capturePicture()

public void clearCache(
boolean)

public void clearFormData()

public void clearHistory()

public void clearSslPreferences()

public void clearView()

protected int computeHorizontalScrollRange()

public void computeScroll()

protected int computeVerticalScrollRange()

public android.webkit.WebBackForwardList copyBackForwardList()

public void debugDump()

 void deleteSelection(
int
int)

public void destroy()

public boolean dispatchKeyEvent(
android.view.KeyEvent)

public void documentAsText(
android.os.Message)

public void documentHasImages(
android.os.Message)

 boolean drawHistory()

public void externalRepresentation(
android.os.Message)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public void flingScroll(
int
int)

public android.net.http.SslCertificate getCertificate()

public int getContentHeight()

public android.graphics.Bitmap getFavicon()

public android.webkit.WebView$HitTestResult getHitTestResult()

public java.lang.String[] getHttpAuthUsernamePassword(
java.lang.String
java.lang.String)

public java.lang.String getOriginalUrl()

public int getProgress()

public float getScale()

public android.webkit.WebSettings getSettings()

public java.lang.String getTitle()

public java.lang.String getUrl()

 android.webkit.WebViewCore getWebViewCore()

public android.view.View getZoomControls()

public void goBack()

public void goBackOrForward(
int)

public void goForward()

public void invokeZoomPicker()

public void loadData(
java.lang.String
java.lang.String
java.lang.String)

public void loadDataWithBaseURL(
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

public void loadUrl(
java.lang.String)

 void moveSelection(
float
float)

protected void onAttachedToWindow()

public void onChildViewAdded(
android.view.View
android.view.View)

public void onChildViewRemoved(
android.view.View
android.view.View)

protected void onDetachedFromWindow()

protected void onDraw(
android.graphics.Canvas)

protected void onFocusChanged(
boolean
int
android.graphics.Rect)

public void onGlobalFocusChanged(
android.view.View
android.view.View)

public boolean onKeyDown(
int
android.view.KeyEvent)

public boolean onKeyUp(
int
android.view.KeyEvent)

protected void onMeasure(
int
int)

 boolean onSavePassword(
java.lang.String
java.lang.String
java.lang.String
android.os.Message)

protected void onScrollChanged(
int
int
int
int)

protected void onSizeChanged(
int
int
int
int)

public boolean onTouchEvent(
android.view.MotionEvent)

public boolean onTrackballEvent(
android.view.MotionEvent)

public void onWindowFocusChanged(
boolean)

public boolean overlayHorizontalScrollbar()

public boolean overlayVerticalScrollbar()

public boolean pageDown(
boolean)

public boolean pageUp(
boolean)

 void passToJavaScript(
java.lang.String
android.view.KeyEvent)

public void pauseTimers()

public boolean performLongClick()

public void refreshPlugins(
boolean)

public void reload()

 void replaceTextfieldText(
int
int
java.lang.String
int
int)

public boolean requestChildRectangleOnScreen(
android.view.View
android.graphics.Rect
boolean)

public boolean requestFocus(
int
android.graphics.Rect)

public void requestFocusNodeHref(
android.os.Message)

public void requestImageRef(
android.os.Message)

 void requestListBox(
java.lang.String[]
boolean[]
int)

 void requestListBox(
java.lang.String[]
boolean[]
int[])

 void resetTrackballTime()

public android.webkit.WebBackForwardList restoreState(
android.os.Bundle)

public void resumeTimers()

public void savePassword(
java.lang.String
java.lang.String
java.lang.String)

public android.webkit.WebBackForwardList saveState(
android.os.Bundle)

public void setBackgroundColor(
int)

public void setCertificate(
android.net.http.SslCertificate)

public void setDownloadListener(
android.webkit.DownloadListener)

public void setHorizontalScrollbarOverlay(
boolean)

public void setHttpAuthUsernamePassword(
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

public void setInitialScale(
int)

public void setLayoutParams(
android.view.ViewGroup$LayoutParams)

public void setMapTrackballToArrowKeys(
boolean)

public void setPictureListener(
android.webkit.WebView$PictureListener)

public void setScrollBarStyle(
int)

 void setSelection(
int
int)

public void setVerticalScrollbarOverlay(
boolean)

public void setWebChromeClient(
android.webkit.WebChromeClient)

public void setWebViewClient(
android.webkit.WebViewClient)

 void shortPressOnTextField()

public void stopLoading()

 void switchOutDrawHistory()

 void updateCachedTextfield(
java.lang.String)

 int viewToContent(
int)

public boolean zoomIn()

public boolean zoomOut()

________________CLASS________________


public class android.webkit.WebViewClient extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void doUpdateVisitedHistory(
android.webkit.WebView
java.lang.String
boolean)

public void onFormResubmission(
android.webkit.WebView
android.os.Message
android.os.Message)

public void onLoadResource(
android.webkit.WebView
java.lang.String)

public void onPageFinished(
android.webkit.WebView
java.lang.String)

public void onPageStarted(
android.webkit.WebView
java.lang.String
android.graphics.Bitmap)

public void onReceivedError(
android.webkit.WebView
int
java.lang.String
java.lang.String)

public void onReceivedHttpAuthRequest(
android.webkit.WebView
android.webkit.HttpAuthHandler
java.lang.String
java.lang.String)

public void onReceivedSslError(
android.webkit.WebView
android.webkit.SslErrorHandler
android.net.http.SslError)

public void onScaleChanged(
android.webkit.WebView
float
float)

public void onTooManyRedirects(
android.webkit.WebView
android.os.Message
android.os.Message)

public void onUnhandledKeyEvent(
android.webkit.WebView
android.view.KeyEvent)

public boolean shouldOverrideKeyEvent(
android.webkit.WebView
android.view.KeyEvent)

public boolean shouldOverrideUrlLoading(
android.webkit.WebView
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebViewCore; )
 class android.webkit.WebViewCore$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.webkit.WebViewCore$EventHub$1 extends android.os.Handler

----------------FIELDS----------------

final android.webkit.WebViewCore$EventHub this$1
----------------METHODS----------------

 void <init>(
android.webkit.WebViewCore$EventHub)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebViewCore; )
@dalvik.annotation.InnerClass (accessFlags =0 name =EventHub )
 class android.webkit.WebViewCore$EventHub extends java.lang.Object

----------------FIELDS----------------

static final int ADD_JS_INTERFACE

static final int BLOCK_FOCUS_CHANGE_UNTIL_KEY_UP

static final int CLEAR_CACHE

static final int CLEAR_HISTORY

static final int CLEAR_MATCHES

static final int CLEAR_SSL_PREF_TABLE

static final int DELETE_SELECTION

private static final int DESTROY

static final int DOC_HAS_IMAGES

static final int DUMP_WEBKIT

static final int FIND

static final int FIND_ALL

static final int GET_SELECTION

static final int GO_BACK_FORWARD

static final int KEY_DOWN

static final int KEY_UP

static final int LISTBOX_CHOICES

static final int LOAD_DATA

static final int LOAD_URL

static final int NO_FOCUS_CHANGE_BLOCK

static final int PASS_TO_JS

static final int PAUSE_TIMERS

static final int REFRESH_PLUGINS

static final int RELOAD

static final int REPLACE_TEXT

static final int REQUEST_DOC_AS_TEXT

static final int REQUEST_EXT_REPRESENTATION

static final int REQUEST_FOCUS_HREF

static final int REQUEST_IMAGE_HREF

static final int RESTORE_STATE

static final int RESUME_TIMERS

static final int SAVE_DOCUMENT_STATE

static final int SET_BACKGROUND_COLOR

static final int SET_FINAL_FOCUS

static final int SET_KIT_FOCUS

static final int SET_SELECTION

static final int SET_SNAP_ANCHOR

static final int SET_VISIBLE_RECT

static final int SINGLE_LISTBOX_CHOICE

static final int STOP_LOADING

static final int SYNC_SCROLL

static final int TOUCH_UP

static final int UNBLOCK_FOCUS

static final int UPDATE_CACHE_AND_TEXT_ENTRY

static final int VIEW_SIZE_CHANGED

static final int WEBKIT_DRAW

private boolean mBlockMessages

private android.os.Handler mHandler
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/os/Message;>; )
private java.util.ArrayList mMessages

private int mSavedPriority

private int mTid

final android.webkit.WebViewCore this$0
----------------METHODS----------------

private void <init>(
android.webkit.WebViewCore)

 void <init>(
android.webkit.WebViewCore
android.webkit.WebViewCore$1)

static int access$1500(
android.webkit.WebViewCore$EventHub)

static int access$1502(
android.webkit.WebViewCore$EventHub
int)

static int access$1600(
android.webkit.WebViewCore$EventHub)

static void access$200(
android.webkit.WebViewCore$EventHub)

static void access$4700(
android.webkit.WebViewCore$EventHub
android.os.Message)

static void access$4800(
android.webkit.WebViewCore$EventHub
android.os.Message
long)

static void access$4900(
android.webkit.WebViewCore$EventHub
int)

static void access$5000(
android.webkit.WebViewCore$EventHub)

static void access$5100(
android.webkit.WebViewCore$EventHub
android.os.Message)

static void access$5200(
android.webkit.WebViewCore$EventHub)

private void blockMessages()

private void removeMessages()

private void removeMessages(
int)

private void sendMessage(
android.os.Message)

private void sendMessageAtFrontOfQueue(
android.os.Message)

private void sendMessageDelayed(
android.os.Message
long)

private void transferMessages()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =FocusData )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebViewCore; )
 class android.webkit.WebViewCore$FocusData extends java.lang.Object

----------------FIELDS----------------

 int mBuildGeneration

 int mFrame

 boolean mIgnoreNullFocus

 int mMoveGeneration

 int mNode

 int mX

 int mY
----------------METHODS----------------

 void <init>()

 void <init>(
android.webkit.WebViewCore$FocusData)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebViewCore; )
@dalvik.annotation.InnerClass (accessFlags =8 name =TouchUpData )
 class android.webkit.WebViewCore$TouchUpData extends java.lang.Object

----------------FIELDS----------------

 int mBuildGeneration

 int mFrame

 boolean mIsClick

 int mMoveGeneration

 int mNode

 boolean mRetry

 int mSize

 int mX

 int mY
----------------METHODS----------------

 void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.webkit.WebViewCore$WebCoreThread$1 extends android.os.Handler

----------------FIELDS----------------

final android.webkit.WebViewCore$WebCoreThread this$0
----------------METHODS----------------

 void <init>(
android.webkit.WebViewCore$WebCoreThread)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/WebViewCore; )
@dalvik.annotation.InnerClass (accessFlags =10 name =WebCoreThread )
 class android.webkit.WebViewCore$WebCoreThread extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

private static final int BLOCK_CACHE_TICKER

private static final int CACHE_TICKER

private static final int CACHE_TICKER_INTERVAL

private static final int INITIALIZE

private static final int REDUCE_PRIORITY

private static final int RESUME_CACHE_TICKER

private static final int RESUME_PRIORITY

private static boolean mCacheTickersBlocked
----------------METHODS----------------

static void <clinit>()

private void <init>()

 void <init>(
android.webkit.WebViewCore$1)

static boolean access$500()

static boolean access$502(
boolean)

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/webkit/WebViewCore$1;Landroid/webkit/WebViewCore$EventHub;Landroid/webkit/WebViewCore$TouchUpData;Landroid/webkit/WebViewCore$FocusData;Landroid/webkit/WebViewCore$WebCoreThread; )
final class android.webkit.WebViewCore extends java.lang.Object

----------------FIELDS----------------

static final boolean DEBUG

private static final java.lang.String LOGTAG

static final boolean LOGV_ENABLED

static final int SCROLL_BITS

static final java.lang.String THREAD_NAME

static final int ZOOM_BITS

private static android.os.Handler sWebCoreHandler

private android.webkit.BrowserFrame mBrowserFrame

private final android.webkit.CallbackProxy mCallbackProxy

private android.graphics.Picture mContentPictureA

private android.graphics.Picture mContentPictureB

private final android.content.Context mContext

private int mCurrentViewHeight

private int mCurrentViewWidth

private boolean mDrawIsScheduled

 boolean mEndScaleZoom

private final android.webkit.WebViewCore$EventHub mEventHub

private int mNativeClass

private java.lang.Object mPictureSync

private int mRestoredScale

private int mRestoredX

private int mRestoredY

final android.graphics.DrawFilter mScrollFilter

private final android.webkit.WebSettings mSettings

private int mViewportHeight

private int mViewportInitialScale

private int mViewportMaximumScale

private int mViewportMinimumScale

private boolean mViewportUserScalable

private int mViewportWidth

private android.webkit.WebView mWebView

private int mWebkitScrollX

private int mWebkitScrollY

final android.graphics.DrawFilter mZoomFilter
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context
android.webkit.WebView
android.webkit.CallbackProxy)

static void access$1000(
android.webkit.WebViewCore
int
android.view.KeyEvent)

static void access$1100(
android.webkit.WebViewCore
int
android.view.KeyEvent)

static void access$1200(
android.webkit.WebViewCore
int
int
float)

static void access$1300(
android.webkit.WebViewCore
int
int
int
int)

static void access$1400(
android.webkit.WebViewCore
int)

static android.webkit.CallbackProxy access$1700(
android.webkit.WebViewCore)

static void access$1800(
android.webkit.WebViewCore
int
int
int
int
int
int
java.lang.String
int
int)

static void access$1900(
android.webkit.WebViewCore
int
int
int
int
int
java.lang.String
int
int
boolean
boolean
boolean
boolean)

static void access$2000(
android.webkit.WebViewCore
int
int
int
int)

static boolean access$2100(
android.webkit.WebViewCore
java.lang.String
boolean
boolean)

static int access$2200(
android.webkit.WebViewCore
java.lang.String)

static void access$2300(
android.webkit.WebViewCore)

static android.content.Context access$2400(
android.webkit.WebViewCore)

static void access$2500(
android.webkit.WebViewCore
int
int
int
int
int
int
int
boolean
boolean)

static void access$2600(
android.webkit.WebViewCore
int
int
int
int
boolean)

static void access$2700(
android.webkit.WebViewCore)

static void access$2800(
android.webkit.WebViewCore
int
int
int
int
int
int
boolean)

static java.lang.String access$2900(
android.webkit.WebViewCore
int
int)

static android.os.Handler access$300()

static java.lang.String access$3000(
android.webkit.WebViewCore
int
int)

static android.os.Handler access$302(
android.os.Handler)

static void access$3100(
android.webkit.WebViewCore)

static void access$3200(
android.webkit.WebViewCore)

static void access$3300(
android.webkit.WebViewCore)

static void access$3400(
android.webkit.WebViewCore
int
int)

static void access$3500(
android.webkit.WebViewCore
int
int
int
int
int
int)

static void access$3600(
android.webkit.WebViewCore
int
int
int
int
int
int)

static void access$3700(
android.webkit.WebViewCore
boolean[]
int)

static void access$3800(
android.webkit.WebViewCore
int)

static void access$3900(
android.webkit.WebViewCore
int)

static void access$400(
android.webkit.WebViewCore)

static java.lang.String access$4000(
android.webkit.WebViewCore
android.graphics.Region)

static android.webkit.WebView access$4100(
android.webkit.WebViewCore)

static void access$4200(
android.webkit.WebViewCore)

static int access$4302(
android.webkit.WebViewCore
int)

static int access$4402(
android.webkit.WebViewCore
int)

static void access$4500(
android.webkit.WebViewCore
boolean)

static boolean access$4602(
android.webkit.WebViewCore
boolean)

static void access$600(
android.webkit.WebViewCore)

static android.webkit.BrowserFrame access$700(
android.webkit.WebViewCore)

static android.webkit.BrowserFrame access$702(
android.webkit.WebViewCore
android.webkit.BrowserFrame)

static int access$802(
android.webkit.WebViewCore
int)

static void access$900(
android.webkit.WebViewCore
java.lang.String)

private void contentScrollBy(
int
int)

private void contentScrollTo(
int
int)

private void contentSpawnScrollTo(
int
int)

private void didFirstLayout(
java.lang.String)

static void endCacheTransaction()

private void initialize()

private void keyDown(
int
android.view.KeyEvent)

private void keyUp(
int
android.view.KeyEvent)

private void loadUrl(
java.lang.String)

private native void nativeClearMatches()

private native void nativeDeleteSelection(
int
int
int
int
int
int)

private native void nativeDraw(
android.graphics.Picture)

private native void nativeDump()

private native boolean nativeFind(
java.lang.String
boolean
boolean)

static native java.lang.String nativeFindAddress(
java.lang.String)

private native int nativeFindAll(
java.lang.String)

private native int nativeGetContentMinPrefWidth()

private native java.lang.String nativeGetSelection(
android.graphics.Region)

private native boolean nativeKeyUp(
int
int)

private native void nativeRefreshPlugins(
boolean)

private native void nativeReplaceTextfieldText(
int
int
int
int
int
int
java.lang.String
int
int)

private native java.lang.String nativeRetrieveHref(
int
int)

private native java.lang.String nativeRetrieveImageRef(
int
int)

private native void nativeSaveDocumentState(
int
int
int
int)

private native void nativeSendListBoxChoice(
int)

private native void nativeSendListBoxChoices(
boolean[]
int)

private native void nativeSetBackgroundColor(
int)

private native void nativeSetFinalFocus(
int
int
int
int
boolean)

private native void nativeSetKitFocus(
int
int
int
int
int
int
boolean)

private native void nativeSetSelection(
int
int
int
int
int
int)

private native void nativeSetSize(
int
int
int
float)

private native void nativeSetSnapAnchor(
int
int)

private native void nativeSetVisibleRect(
int
int
int
int)

private native void nativeSnapToAnchor()

private native void nativeTouchUp(
int
int
int
int
int
int
int
boolean
boolean)

private native void nativeUnblockFocus()

private native void nativeUpdateFrameCache()

private native void passToJs(
int
int
int
int
int
java.lang.String
int
int
boolean
boolean
boolean
boolean)

public static void pauseTimers()

static void pauseUpdate(
android.webkit.WebViewCore)

private void requestListBox(
java.lang.String[]
boolean[]
int)

private void requestListBox(
java.lang.String[]
boolean[]
int[])

private void restoreScale(
int)

private void restoreState(
int)

public static void resumeTimers()

static void resumeUpdate(
android.webkit.WebViewCore)

private void sendMarkNodeInvalid(
int)

private void sendNotifyFocusSet()

private void sendNotifyProgressFinished()

private void sendRecomputeFocus()

private void sendUpdateTextEntry()

private void sendViewInvalidate()

private native void setViewportSettingsFromNative()

static void startCacheTransaction()

private void updateTextfield(
int
boolean
java.lang.String
int)

private void viewSizeChanged(
int
int
float)

private void webkitDraw()

 void clearContentPicture()

 void contentInvalidate()

 android.graphics.Picture copyContentPicture()

 void destroy()

 void drawContentPicture(
android.graphics.Canvas
int
boolean
boolean)

 android.webkit.BrowserFrame getBrowserFrame()

public android.webkit.WebSettings getSettings()

 android.webkit.WebView getWebView()

 void initializeSubwindow()

protected void jsAlert(
java.lang.String
java.lang.String)

protected boolean jsConfirm(
java.lang.String
java.lang.String)

protected java.lang.String jsPrompt(
java.lang.String
java.lang.String
java.lang.String)

protected boolean jsUnload(
java.lang.String
java.lang.String)

 void removeMessages()

 void removeMessages(
int)

 void sendMessage(
int)

 void sendMessage(
int
int)

 void sendMessage(
int
int
int)

 void sendMessage(
int
int
int
java.lang.Object)

 void sendMessage(
int
int
java.lang.Object)

 void sendMessage(
int
java.lang.Object)

 void sendMessage(
android.os.Message)

 void sendMessageDelayed(
int
java.lang.Object
long)

 void stopLoading()

________________CLASS________________


public class android.webkit.WebViewDatabase extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String CACHE_CONTENTLENGTH_COL

private static final java.lang.String CACHE_DATABASE_FILE

private static final int CACHE_DATABASE_VERSION

private static final java.lang.String CACHE_ENCODING_COL

private static final java.lang.String CACHE_ETAG_COL

private static final java.lang.String CACHE_EXPIRES_COL

private static final java.lang.String CACHE_FILE_PATH_COL

private static final java.lang.String CACHE_HTTP_STATUS_COL

private static final java.lang.String CACHE_LAST_MODIFY_COL

private static final java.lang.String CACHE_LOCATION_COL

private static final java.lang.String CACHE_MIMETYPE_COL

private static final java.lang.String CACHE_URL_COL

private static final java.lang.String COOKIES_DOMAIN_COL

private static final java.lang.String COOKIES_EXPIRES_COL

private static final java.lang.String COOKIES_NAME_COL

private static final java.lang.String COOKIES_PATH_COL

private static final java.lang.String COOKIES_SECURE_COL

private static final java.lang.String COOKIES_VALUE_COL

private static final java.lang.String DATABASE_FILE

private static final int DATABASE_VERSION

private static final java.lang.String FORMDATA_NAME_COL

private static final java.lang.String FORMDATA_URLID_COL

private static final java.lang.String FORMDATA_VALUE_COL

private static final java.lang.String FORMURL_URL_COL

private static final java.lang.String HTTPAUTH_HOST_COL

private static final java.lang.String HTTPAUTH_PASSWORD_COL

private static final java.lang.String HTTPAUTH_REALM_COL

private static final java.lang.String HTTPAUTH_USERNAME_COL

private static final java.lang.String ID_COL

private static final java.lang.String[] ID_PROJECTION

protected static final java.lang.String LOGTAG

private static final java.lang.String PASSWORD_HOST_COL

private static final java.lang.String PASSWORD_PASSWORD_COL

private static final java.lang.String PASSWORD_USERNAME_COL

private static final int TABLE_COOKIES_ID

private static final int TABLE_FORMDATA_ID

private static final int TABLE_FORMURL_ID

private static final int TABLE_HTTPAUTH_ID

private static final int TABLE_PASSWORD_ID

private static int mCacheContentLengthColIndex

private static android.database.sqlite.SQLiteDatabase mCacheDatabase

private static int mCacheETagColIndex

private static int mCacheEncodingColIndex

private static int mCacheExpiresColIndex

private static int mCacheFilePathColIndex

private static int mCacheHttpStatusColIndex

private static android.database.DatabaseUtils$InsertHelper mCacheInserter

private static int mCacheLastModifyColIndex

private static int mCacheLocationColIndex

private static int mCacheMimeTypeColIndex

private static int mCacheTransactionRefcount

private static int mCacheUrlColIndex

private static android.database.sqlite.SQLiteDatabase mDatabase

private static android.webkit.WebViewDatabase mInstance

private static final java.lang.String[] mTableNames

private final java.lang.Object mCookieLock

private final java.lang.Object mFormLock

private final java.lang.Object mHttpAuthLock

private final java.lang.Object mPasswordLock
----------------METHODS----------------

static void <clinit>()

private void <init>()

private static void bootstrapCacheDatabase()

private static void bootstrapDatabase()

public static android.webkit.WebViewDatabase getInstance(
android.content.Context)

private boolean hasEntries(
int)

private static void upgradeCacheDatabase()

private static void upgradeDatabase()

 void addCache(
java.lang.String
android.webkit.CacheManager$CacheResult)

 void addCookie(
android.webkit.CookieManager$Cookie)

 void clearCache()

 void clearCookies()

 void clearExpiredCookies(
long)

public void clearFormData()

public void clearHttpAuthUsernamePassword()

 void clearSessionCookies()

public void clearUsernamePassword()

 void deleteCookies(
java.lang.String
java.lang.String
java.lang.String)

 boolean endCacheTransaction()

 android.webkit.CacheManager$CacheResult getCache(
java.lang.String)

 long getCacheTotalSize()
@dalvik.annotation.Signature (value =(Ljava/lang/String;)Ljava/util/ArrayList<Landroid/webkit/CookieManager$Cookie;>; )
 java.util.ArrayList getCookiesForDomain(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/lang/String;)Ljava/util/ArrayList<Ljava/lang/String;>; )
 java.util.ArrayList getFormData(
java.lang.String
java.lang.String)

 java.lang.String[] getHttpAuthUsernamePassword(
java.lang.String
java.lang.String)

 java.lang.String[] getUsernamePassword(
java.lang.String)

 boolean hasCache()

 boolean hasCookies()

public boolean hasFormData()

public boolean hasHttpAuthUsernamePassword()

public boolean hasUsernamePassword()

 void removeCache(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>;)V )
 void setFormData(
java.lang.String
java.util.HashMap)

 void setHttpAuthUsernamePassword(
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

 void setUsernamePassword(
java.lang.String
java.lang.String
java.lang.String)

 boolean startCacheTransaction()
@dalvik.annotation.Signature (value =(J)Ljava/util/ArrayList<Ljava/lang/String;>; )
 java.util.ArrayList trimCache(
long)

________________CLASS________________


public final class android.webkit.gears.AndroidGpsLocationProvider extends java.lang.Object implements android.location.LocationListener

----------------FIELDS----------------

private static final java.lang.String TAG

private android.location.LocationManager locationManager

private long nativeObject
----------------METHODS----------------

public void <init>(
android.webkit.WebView
long)

private native void nativeLocationChanged(
android.location.Location
long)

private native void nativeProviderError(
boolean
long)

public void onLocationChanged(
android.location.Location)

public void onProviderDisabled(
java.lang.String)

public void onProviderEnabled(
java.lang.String)

public void onStatusChanged(
java.lang.String
int
android.os.Bundle)

public void shutdown()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =RadioData )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/gears/AndroidRadioDataProvider; )
public final class android.webkit.gears.AndroidRadioDataProvider$RadioData extends java.lang.Object

----------------FIELDS----------------

public java.lang.String carrierName

public int cellId

public int homeMobileCountryCode

public int homeMobileNetworkCode

public int locationAreaCode

public int mobileCountryCode

public int mobileNetworkCode

public int radioType

public int signalStrength
----------------METHODS----------------

private void <init>()

public static android.webkit.gears.AndroidRadioDataProvider$RadioData getInstance(
android.telephony.TelephonyManager
android.telephony.CellLocation
int
android.telephony.ServiceState)

private void setMobileCodes(
java.lang.String
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/webkit/gears/AndroidRadioDataProvider$RadioData; )
public final class android.webkit.gears.AndroidRadioDataProvider extends android.telephony.PhoneStateListener

----------------FIELDS----------------

private static final int RADIO_TYPE_GSM

private static final int RADIO_TYPE_UNKNOWN

private static final int RADIO_TYPE_WCDMA

private static final java.lang.String TAG

private android.telephony.CellLocation cellLocation

private long nativeObject

private android.telephony.ServiceState serviceState

private int signalStrength

private android.telephony.TelephonyManager telephonyManager
----------------METHODS----------------

public void <init>(
android.webkit.WebView
long)

private void notifyListeners()

private static native void onUpdateAvailable(
android.webkit.gears.AndroidRadioDataProvider$RadioData
long)

public void onCellLocationChanged(
android.telephony.CellLocation)

public void onServiceStateChanged(
android.telephony.ServiceState)

public void onSignalStrengthChanged(
int)

public void shutdown()

________________CLASS________________


public class android.webkit.gears.DesktopAndroid extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String ACTION_INSTALL_SHORTCUT

private static final java.lang.String BROWSER

private static final java.lang.String BROWSER_ACTIVITY

private static final java.lang.String EXTRA_SHORTCUT_DUPLICATE

private static int MAX_HEIGHT

private static int MAX_WIDTH

private static final java.lang.String TAG
----------------METHODS----------------

static void <clinit>()

public void <init>()

private static android.graphics.Bitmap getBitmap(
java.lang.String)

public static void setShortcut(
android.webkit.WebView
java.lang.String
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/gears/GearsPluginSettings; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.webkit.gears.GearsPluginSettings$1 extends java.lang.Object implements android.content.ServiceConnection

----------------FIELDS----------------

final android.webkit.gears.GearsPluginSettings this$0
----------------METHODS----------------

 void <init>(
android.webkit.gears.GearsPluginSettings)

public void onServiceConnected(
android.content.ComponentName
android.os.IBinder)

public void onServiceDisconnected(
android.content.ComponentName)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/gears/GearsPluginSettings; )
@dalvik.annotation.InnerClass (accessFlags =2 name =ClickHandler )
 class android.webkit.gears.GearsPluginSettings$ClickHandler extends java.lang.Object implements android.webkit.Plugin$PreferencesClickHandler

----------------FIELDS----------------

final android.webkit.gears.GearsPluginSettings this$0
----------------METHODS----------------

private void <init>(
android.webkit.gears.GearsPluginSettings)

 void <init>(
android.webkit.gears.GearsPluginSettings
android.webkit.gears.GearsPluginSettings$1)

public void handleClickEvent(
android.content.Context)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =StartService )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/gears/GearsPluginSettings; )
 class android.webkit.gears.GearsPluginSettings$StartService extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.webkit.gears.GearsPluginSettings this$0
----------------METHODS----------------

private void <init>(
android.webkit.gears.GearsPluginSettings)

 void <init>(
android.webkit.gears.GearsPluginSettings
android.webkit.gears.GearsPluginSettings$1)

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/webkit/gears/GearsPluginSettings$StartService;Landroid/webkit/gears/GearsPluginSettings$ClickHandler; )
public class android.webkit.gears.GearsPluginSettings extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG

private android.content.Context context

private android.content.ServiceConnection serviceConnection
----------------METHODS----------------

public void <init>(
android.webkit.Plugin)

static android.content.Context access$100(
android.webkit.gears.GearsPluginSettings)

static android.content.Context access$102(
android.webkit.gears.GearsPluginSettings
android.content.Context)

static android.content.ServiceConnection access$300(
android.webkit.gears.GearsPluginSettings)

static void access$400(
android.content.Context)

private static native void runSettingsDialog(
android.content.Context)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/gears/HtmlDialogAndroid; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.webkit.gears.HtmlDialogAndroid$1 extends java.lang.Object implements android.content.ServiceConnection

----------------FIELDS----------------

final android.webkit.gears.HtmlDialogAndroid this$0
----------------METHODS----------------

 void <init>(
android.webkit.gears.HtmlDialogAndroid)

public void onServiceConnected(
android.content.ComponentName
android.os.IBinder)

public void onServiceDisconnected(
android.content.ComponentName)

________________CLASS________________


public class android.webkit.gears.HtmlDialogAndroid extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String DIALOG_INTERFACE

private static final java.lang.String DIALOG_PACKAGE

private static final java.lang.String DIALOG_SERVICE

private static final java.lang.String TAG

private static android.webkit.gears.IGearsDialogService gearsDialogService

private android.content.ServiceConnection defaultServiceConnection
----------------METHODS----------------

public void <init>()

static android.content.ServiceConnection access$000(
android.webkit.gears.HtmlDialogAndroid)

static android.webkit.gears.IGearsDialogService access$102(
android.webkit.gears.IGearsDialogService)

public static boolean bindToService(
android.content.Context
android.content.ServiceConnection)

public static void setGearsDialogService(
android.webkit.gears.IGearsDialogService)

public java.lang.String readHTML(
java.lang.String)

public java.lang.String showDialog(
android.content.Context
java.lang.String
java.lang.String)

public void synchronousBindToService(
android.content.Context)

________________CLASS________________


public final class android.webkit.gears.HttpRequestAndroid extends java.lang.Object

----------------FIELDS----------------

private static final int BUFFER_SIZE

private static final java.lang.String DEFAULT_MIME_TYPE

public static final int HEADERS_MAP_INDEX_KEY

public static final int HEADERS_MAP_INDEX_VALUE

private static final java.lang.String HTTP_LINE_ENDING

public static final java.lang.String KEY_CONTENT_LENGTH

public static final java.lang.String KEY_CONTENT_TYPE

public static final java.lang.String KEY_ETAG

public static final java.lang.String KEY_EXPIRES

public static final java.lang.String KEY_LAST_MODIFIED

public static final java.lang.String KEY_LOCATION

private static final java.lang.String LOG_TAG

private static boolean logEnabled

private boolean abortReceived

private android.webkit.CacheManager$CacheResult cacheResult

private java.lang.String cacheResultUrl

private java.lang.Thread childThread

private java.net.HttpURLConnection connection

private boolean inBlockingOperation

private java.io.InputStream inputStream
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;[Ljava/lang/String;>; )
private java.util.Map requestHeaders
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;[Ljava/lang/String;>; )
private java.util.Map responseHeaders

private java.lang.String responseLine
----------------METHODS----------------

static void <clinit>()

public void <init>()

private void applyRequestHeadersToConnection()

public static void enableLogging(
boolean)

public static java.lang.String getCookieForUrl(
java.lang.String)

private static void log(
java.lang.String)

public static void setCookieForUrl(
java.lang.String
java.lang.String)

private void setResponseHeader(
java.lang.String
java.lang.String)

private void synthesizeHeadersFromCacheResult(
android.webkit.CacheManager$CacheResult)

public boolean appendCacheResult(
byte[]
int)

public boolean connectToRemote()

public boolean createCacheResult(
java.lang.String
int
java.lang.String
java.lang.String)

public java.lang.String getAllResponseHeaders()

public java.lang.String getRequestHeader(
java.lang.String)

public java.lang.String getResponseHeader(
java.lang.String)

public java.lang.String getResponseLine()

public void initChildThread()

public void interrupt()

public boolean open(
java.lang.String
java.lang.String)

public boolean parseHeaders()

public int receive(
byte[])

public boolean saveCacheResult()

public boolean sendPostData(
byte[]
int)

public void setRequestHeader(
java.lang.String
java.lang.String)

public boolean useCacheResult(
java.lang.String)

public boolean useLocalServerResult(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/webkit/gears/IGearsDialogService$Stub; )
public abstract interface class android.webkit.gears.IGearsDialogService extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String showDialog(
java.lang.String
java.lang.String
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/gears/IGearsDialogService$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class android.webkit.gears.IGearsDialogService$Stub$Proxy extends java.lang.Object implements android.webkit.gears.IGearsDialogService

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String showDialog(
java.lang.String
java.lang.String
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/webkit/gears/IGearsDialogService; )
@dalvik.annotation.MemberClasses (value =Landroid/webkit/gears/IGearsDialogService$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class android.webkit.gears.IGearsDialogService$Stub extends android.os.Binder implements android.webkit.gears.IGearsDialogService

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_showDialog
----------------METHODS----------------

public void <init>()

public static android.webkit.gears.IGearsDialogService asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =ServiceRequest )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/gears/UrlInterceptHandlerGears; )
public class android.webkit.gears.UrlInterceptHandlerGears$ServiceRequest extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;[Ljava/lang/String;>; )
private java.util.Map requestHeaders

private java.lang.String url
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;[Ljava/lang/String;>;)V )
public void <init>(
java.lang.String
java.util.Map)

public java.lang.String getRequestHeader(
java.lang.String)

public java.lang.String getUrl()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1 name =ServiceResponse )
@dalvik.annotation.EnclosingClass (value =Landroid/webkit/gears/UrlInterceptHandlerGears; )
public class android.webkit.gears.UrlInterceptHandlerGears$ServiceResponse extends java.lang.Object

----------------FIELDS----------------

private java.lang.String encoding

private java.io.InputStream inputStream

private java.lang.String mimeType
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;[Ljava/lang/String;>; )
private java.util.Map responseHeaders

private int statusCode

private java.lang.String statusLine

final android.webkit.gears.UrlInterceptHandlerGears this$0
----------------METHODS----------------

public void <init>(
android.webkit.gears.UrlInterceptHandlerGears)

public java.lang.String getContentType()

public java.lang.String getEncoding()

public java.io.InputStream getInputStream()

public java.lang.String getMimeType()
@dalvik.annotation.Signature (value =()Ljava/util/Map<Ljava/lang/String;[Ljava/lang/String;>; )
public java.util.Map getResponseHeaders()

public int getStatusCode()

public java.lang.String getStatusLine()

public void setResponseHeader(
java.lang.String
java.lang.String)

 void setResultArray(
int
java.lang.String
java.lang.String
java.lang.String
byte[])

 boolean setResultFile(
int
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/webkit/gears/UrlInterceptHandlerGears$ServiceResponse;Landroid/webkit/gears/UrlInterceptHandlerGears$ServiceRequest; )
public class android.webkit.gears.UrlInterceptHandlerGears extends java.lang.Object implements android.webkit.UrlInterceptHandler

----------------FIELDS----------------

private static final int BUFFER_SIZE

private static final int CACHE_EXPIRY_MS

public static final int HEADERS_MAP_INDEX_KEY

public static final int HEADERS_MAP_INDEX_VALUE

private static final java.lang.String LOG_TAG

private static android.webkit.gears.UrlInterceptHandlerGears instance

private static boolean logEnabled
----------------METHODS----------------

static void <clinit>()

public void <init>()

static void access$000(
android.webkit.gears.UrlInterceptHandlerGears
java.lang.String)

private boolean copyStream(
java.io.InputStream
java.io.OutputStream)

public static void enableLogging(
boolean)

public static android.webkit.gears.UrlInterceptHandlerGears getInstance()

private void log(
java.lang.String)

private static native android.webkit.gears.UrlInterceptHandlerGears$ServiceResponse nativeService(
android.webkit.gears.UrlInterceptHandlerGears$ServiceRequest)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;[Ljava/lang/String;>;)Landroid/webkit/gears/UrlInterceptHandlerGears$ServiceResponse; )
public android.webkit.gears.UrlInterceptHandlerGears$ServiceResponse getServiceResponse(
java.lang.String
java.util.Map)

public void register()
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;)Landroid/webkit/CacheManager$CacheResult; )
public android.webkit.CacheManager$CacheResult service(
java.lang.String
java.util.Map)

public void unregister()

________________CLASS________________


public final class android.webkit.gears.VersionExtractor extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG

private static final java.lang.String URL

private static final java.lang.String VERSION
----------------METHODS----------------

public void <init>()

public static boolean extract(
java.lang.String
long)

private static java.lang.String extractText(
org.w3c.dom.Document
java.lang.String)

private static native void setVersionAndUrl(
java.lang.String
java.lang.String
long)

________________CLASS________________


public final class android.webkit.gears.ZipInflater extends java.lang.Object

----------------FIELDS----------------

private static final int BUFFER_SIZE_BYTES

private static final java.lang.String DATA_PARTITION_ROOT

private static final java.lang.String PATH_NAVIGATION_COMPONENT

private static final long SIZE_MULTIPLIER

private static final java.lang.String TAG
----------------METHODS----------------

static void <clinit>()

public void <init>()

private static final long freeSpace()

public static boolean inflate(
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.widget.AbsListView$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.widget.AbsListView this$0

final android.view.View val$child

final android.widget.AbsListView$PerformClick val$performClick
----------------METHODS----------------

 void <init>(
android.widget.AbsListView
android.view.View
android.widget.AbsListView$PerformClick)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsListView; )
@dalvik.annotation.InnerClass (accessFlags =2 name =WindowRunnnable )
 class android.widget.AbsListView$WindowRunnnable extends java.lang.Object

----------------FIELDS----------------

private int mOriginalAttachCount

final android.widget.AbsListView this$0
----------------METHODS----------------

private void <init>(
android.widget.AbsListView)

 void <init>(
android.widget.AbsListView
android.widget.AbsListView$1)

public void rememberWindowAttachCount()

public boolean sameWindow()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsListView; )
@dalvik.annotation.InnerClass (accessFlags =2 name =CheckForKeyLongPress )
 class android.widget.AbsListView$CheckForKeyLongPress extends android.widget.AbsListView$WindowRunnnable implements java.lang.Runnable

----------------FIELDS----------------

final android.widget.AbsListView this$0
----------------METHODS----------------

private void <init>(
android.widget.AbsListView)

 void <init>(
android.widget.AbsListView
android.widget.AbsListView$1)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsListView; )
@dalvik.annotation.InnerClass (accessFlags =2 name =CheckForLongPress )
 class android.widget.AbsListView$CheckForLongPress extends android.widget.AbsListView$WindowRunnnable implements java.lang.Runnable

----------------FIELDS----------------

final android.widget.AbsListView this$0
----------------METHODS----------------

private void <init>(
android.widget.AbsListView)

 void <init>(
android.widget.AbsListView
android.widget.AbsListView$1)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsListView; )
@dalvik.annotation.InnerClass (accessFlags =16 name =CheckForTap )
final class android.widget.AbsListView$CheckForTap extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.widget.AbsListView this$0
----------------METHODS----------------

 void <init>(
android.widget.AbsListView)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =FlingRunnable )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsListView; )
 class android.widget.AbsListView$FlingRunnable extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

private int mLastFlingY

private android.widget.Scroller mScroller

final android.widget.AbsListView this$0
----------------METHODS----------------

public void <init>(
android.widget.AbsListView)

private void endFling()

public void run()

public void start(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =LayoutParams )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsListView; )
public class android.widget.AbsListView$LayoutParams extends android.view.ViewGroup$LayoutParams

----------------FIELDS----------------

 int viewType
----------------METHODS----------------

public void <init>(
int
int)

public void <init>(
int
int
int)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.view.ViewGroup$LayoutParams)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsListView; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnScrollListener )
public abstract interface class android.widget.AbsListView$OnScrollListener extends java.lang.Object

----------------FIELDS----------------

public static final int SCROLL_STATE_FLING

public static final int SCROLL_STATE_IDLE

public static final int SCROLL_STATE_TOUCH_SCROLL
----------------METHODS----------------

public abstract void onScroll(
android.widget.AbsListView
int
int
int)

public abstract void onScrollStateChanged(
android.widget.AbsListView
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =PerformClick )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsListView; )
 class android.widget.AbsListView$PerformClick extends android.widget.AbsListView$WindowRunnnable implements java.lang.Runnable

----------------FIELDS----------------

 android.view.View mChild

 int mClickMotionPosition

final android.widget.AbsListView this$0
----------------METHODS----------------

private void <init>(
android.widget.AbsListView)

 void <init>(
android.widget.AbsListView
android.widget.AbsListView$1)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =RecycleBin )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsListView; )
 class android.widget.AbsListView$RecycleBin extends java.lang.Object

----------------FIELDS----------------

private android.view.View[] mActiveViews
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/view/View;>; )
private java.util.ArrayList mCurrentScrap

private int mFirstActivePosition

private android.widget.AbsListView$RecyclerListener mRecyclerListener
@dalvik.annotation.Signature (value =[Ljava/util/ArrayList<Landroid/view/View;>; )
private java.util.ArrayList[] mScrapViews

private int mViewTypeCount

final android.widget.AbsListView this$0
----------------METHODS----------------

 void <init>(
android.widget.AbsListView)

static android.widget.AbsListView$RecyclerListener access$1500(
android.widget.AbsListView$RecycleBin)

static android.widget.AbsListView$RecyclerListener access$1502(
android.widget.AbsListView$RecycleBin
android.widget.AbsListView$RecyclerListener)

private void pruneScrapViews()

 void addScrapView(
android.view.View)

 void clear()

 void fillActiveViews(
int
int)

 android.view.View getActiveView(
int)

 android.view.View getScrapView(
int)
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/view/View;>;)V )
 void reclaimScrapViews(
java.util.List)

 void scrapActiveViews()

public void setViewTypeCount(
int)

public boolean shouldRecycleViewType(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =RecyclerListener )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsListView; )
public abstract interface class android.widget.AbsListView$RecyclerListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onMovedToScrapHeap(
android.view.View)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/widget/AbsListView$SavedState;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsListView$SavedState; )
final class android.widget.AbsListView$SavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.widget.AbsListView$SavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.widget.AbsListView$SavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =SavedState )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsListView; )
 class android.widget.AbsListView$SavedState extends android.view.View$BaseSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/widget/AbsListView$SavedState;>; )
public static final android.os.Parcelable$Creator CREATOR

 java.lang.String filter

 long firstId

 int height

 int position

 long selectedId

 int viewTop
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.widget.AbsListView$1)

 void <init>(
android.os.Parcelable)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/AdapterView$1;Landroid/widget/AdapterView$SelectionNotifier;Landroid/widget/AdapterView$AdapterDataSetObserver;Landroid/widget/AdapterView$AdapterContextMenuInfo;Landroid/widget/AdapterView$OnItemSelectedListener;Landroid/widget/AdapterView$OnItemLongClickListener;Landroid/widget/AdapterView$OnItemClickListener; )
@dalvik.annotation.Signature (value =<T::Landroid/widget/Adapter;>Landroid/view/ViewGroup; )
public abstract class android.widget.AdapterView extends android.view.ViewGroup

----------------FIELDS----------------

public static int INVALID_POSITION

public static long INVALID_ROW_ID

public static final int ITEM_VIEW_TYPE_HEADER_OR_FOOTER

public static final int ITEM_VIEW_TYPE_IGNORE

static final int SYNC_FIRST_POSITION

static final int SYNC_MAX_DURATION_MILLIS

static final int SYNC_SELECTED_POSITION

 boolean mBlockLayoutRequests

 boolean mDataChanged

private boolean mDesiredFocusableInTouchModeState

private boolean mDesiredFocusableState

 android.view.View mEmptyView
@android.view.ViewDebug$ExportedProperty
 int mFirstPosition

 boolean mInLayout
@android.view.ViewDebug$ExportedProperty
 int mItemCount

private int mLayoutHeight

 boolean mNeedSync
@android.view.ViewDebug$ExportedProperty
 int mNextSelectedPosition

 long mNextSelectedRowId

 int mOldItemCount

 int mOldSelectedPosition

 long mOldSelectedRowId

 android.widget.AdapterView$OnItemClickListener mOnItemClickListener

 android.widget.AdapterView$OnItemLongClickListener mOnItemLongClickListener

 android.widget.AdapterView$OnItemSelectedListener mOnItemSelectedListener
@android.view.ViewDebug$ExportedProperty
 int mSelectedPosition

 long mSelectedRowId
@dalvik.annotation.Signature (value =Landroid/widget/AdapterView<TT;>.SelectionNotifier; )
private android.widget.AdapterView$SelectionNotifier mSelectionNotifier

 int mSpecificTop

 long mSyncHeight

 int mSyncMode

 int mSyncPosition

 long mSyncRowId
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static void access$000(
android.widget.AdapterView
android.os.Parcelable)

static android.os.Parcelable access$100(
android.widget.AdapterView)

static void access$200(
android.widget.AdapterView)

private void fireOnSelected()

private void updateEmptyStatus(
boolean)

public void addView(
android.view.View)

public void addView(
android.view.View
int)

public void addView(
android.view.View
int
android.view.ViewGroup$LayoutParams)

public void addView(
android.view.View
android.view.ViewGroup$LayoutParams)

protected boolean canAnimate()

 void checkFocus()

 void checkSelectionChanged()
@dalvik.annotation.Signature (value =(Landroid/util/SparseArray<Landroid/os/Parcelable;>;)V )
protected void dispatchRestoreInstanceState(
android.util.SparseArray)
@dalvik.annotation.Signature (value =(Landroid/util/SparseArray<Landroid/os/Parcelable;>;)V )
protected void dispatchSaveInstanceState(
android.util.SparseArray)

 int findSyncPosition()
@dalvik.annotation.Signature (value =()TT; )
public abstract android.widget.Adapter getAdapter()
@android.view.ViewDebug$CapturedViewProperty
public int getCount()

public android.view.View getEmptyView()

public int getFirstVisiblePosition()

public java.lang.Object getItemAtPosition(
int)

public long getItemIdAtPosition(
int)

public int getLastVisiblePosition()

public final android.widget.AdapterView$OnItemClickListener getOnItemClickListener()

public final android.widget.AdapterView$OnItemLongClickListener getOnItemLongClickListener()

public final android.widget.AdapterView$OnItemSelectedListener getOnItemSelectedListener()

public int getPositionForView(
android.view.View)

public java.lang.Object getSelectedItem()
@android.view.ViewDebug$CapturedViewProperty
public long getSelectedItemId()
@android.view.ViewDebug$CapturedViewProperty
public int getSelectedItemPosition()

public abstract android.view.View getSelectedView()

 void handleDataChanged()

 boolean isInFilterMode()

 int lookForSelectablePosition(
int
boolean)

protected void onLayout(
boolean
int
int
int
int)

public boolean performItemClick(
android.view.View
int
long)

 void rememberSyncState()

public void removeAllViews()

public void removeView(
android.view.View)

public void removeViewAt(
int)

 void selectionChanged()
@dalvik.annotation.Signature (value =(TT;)V )
public abstract void setAdapter(
android.widget.Adapter)

public void setEmptyView(
android.view.View)

public void setFocusable(
boolean)

public void setFocusableInTouchMode(
boolean)

 void setNextSelectedPositionInt(
int)

public void setOnClickListener(
android.view.View$OnClickListener)

public void setOnItemClickListener(
android.widget.AdapterView$OnItemClickListener)

public void setOnItemLongClickListener(
android.widget.AdapterView$OnItemLongClickListener)

public void setOnItemSelectedListener(
android.widget.AdapterView$OnItemSelectedListener)

 void setSelectedPositionInt(
int)

public abstract void setSelection(
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Landroid/widget/AdapterView<Landroid/widget/ListAdapter;>;Landroid/text/TextWatcher;Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;Landroid/widget/Filter$FilterListener;Landroid/view/ViewTreeObserver$OnTouchModeChangeListener; )
@dalvik.annotation.MemberClasses (value =Landroid/widget/AbsListView$RecycleBin;Landroid/widget/AbsListView$RecyclerListener;Landroid/widget/AbsListView$LayoutParams;Landroid/widget/AbsListView$FlingRunnable;Landroid/widget/AbsListView$CheckForTap;Landroid/widget/AbsListView$CheckForKeyLongPress;Landroid/widget/AbsListView$CheckForLongPress;Landroid/widget/AbsListView$PerformClick;Landroid/widget/AbsListView$WindowRunnnable;Landroid/widget/AbsListView$SavedState;Landroid/widget/AbsListView$OnScrollListener; )
public abstract class android.widget.AbsListView extends android.widget.AdapterView implements android.text.TextWatcher, android.view.ViewTreeObserver$OnGlobalLayoutListener, android.widget.Filter$FilterListener, android.view.ViewTreeObserver$OnTouchModeChangeListener

----------------FIELDS----------------

static final int LAYOUT_FORCE_BOTTOM

static final int LAYOUT_FORCE_TOP

static final int LAYOUT_MOVE_SELECTION

static final int LAYOUT_NORMAL

static final int LAYOUT_SET_SELECTION

static final int LAYOUT_SPECIFIC

static final int LAYOUT_SYNC

private static final boolean PROFILE_FLINGING

private static final boolean PROFILE_SCROLLING

static final int TOUCH_MODE_DONE_WAITING

static final int TOUCH_MODE_DOWN

static final int TOUCH_MODE_FLING

private static final int TOUCH_MODE_OFF

private static final int TOUCH_MODE_ON

static final int TOUCH_MODE_REST

static final int TOUCH_MODE_SCROLL

static final int TOUCH_MODE_TAP

private static final int TOUCH_MODE_UNKNOWN

public static final int TRANSCRIPT_MODE_ALWAYS_SCROLL

public static final int TRANSCRIPT_MODE_DISABLED

public static final int TRANSCRIPT_MODE_NORMAL

 android.widget.ListAdapter mAdapter

private int mCacheColorHint

 boolean mCachingStarted

private android.view.ContextMenu$ContextMenuInfo mContextMenuInfo
@dalvik.annotation.Signature (value =Landroid/widget/AdapterView<Landroid/widget/ListAdapter;>.AdapterDataSetObserver; )
 android.widget.AdapterView$AdapterDataSetObserver mDataSetObserver

 boolean mDrawSelectorOnTop

private boolean mFiltered

private boolean mFlingProfilingStarted

private android.widget.AbsListView$FlingRunnable mFlingRunnable

private boolean mIsChildViewEnabled

private int mLastScrollState

private int mLastTouchMode

 int mLastY

 int mLayoutMode

 android.graphics.Rect mListPadding

 int mMotionCorrection

 int mMotionPosition

 int mMotionViewNewTop

 int mMotionViewOriginalTop

 int mMotionX

 int mMotionY

private android.widget.AbsListView$OnScrollListener mOnScrollListener

private android.widget.AbsListView$CheckForKeyLongPress mPendingCheckForKeyLongPress

private android.widget.AbsListView$CheckForLongPress mPendingCheckForLongPress

private java.lang.Runnable mPendingCheckForTap

private android.widget.AbsListView$PerformClick mPerformClick

 android.widget.PopupWindow mPopup

final android.widget.AbsListView$RecycleBin mRecycler

 int mResurrectToPosition

 android.view.View mScrollDown

private boolean mScrollProfilingStarted

 android.view.View mScrollUp

 boolean mScrollingCacheEnabled

 int mSelectedTop

 int mSelectionBottomPadding

 int mSelectionLeftPadding

 int mSelectionRightPadding

 int mSelectionTopPadding

 android.graphics.drawable.Drawable mSelector

 android.graphics.Rect mSelectorRect

 boolean mStackFromBottom

 android.widget.EditText mTextFilter

private boolean mTextFilterEnabled

private android.graphics.Rect mTouchFrame

 int mTouchMode

private int mTranscriptMode

private android.view.VelocityTracker mVelocityTracker

 int mWidthMeasureSpec
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static void access$1000(
android.widget.AbsListView)

static int access$1100(
android.widget.AbsListView)

static int access$1200(
android.widget.AbsListView)

static int access$1300(
android.widget.AbsListView)

static int access$1400(
android.widget.AbsListView)

static void access$1600(
android.widget.AbsListView
android.view.View
boolean)

static void access$1700(
android.widget.AbsListView
android.view.View
boolean)

static void access$1800(
android.widget.AbsListView
android.view.View
boolean)

static int access$200(
android.widget.AbsListView)

static int access$300(
android.widget.AbsListView)

static boolean access$500(
android.widget.AbsListView
android.view.View
int
long)

static android.widget.AbsListView$CheckForLongPress access$600(
android.widget.AbsListView)

static android.widget.AbsListView$CheckForLongPress access$602(
android.widget.AbsListView
android.widget.AbsListView$CheckForLongPress)

static android.widget.AbsListView$OnScrollListener access$900(
android.widget.AbsListView)

private void clearScrollingCache()

private void createScrollingCache()

private void createTextFilter(
boolean)

private void drawSelector(
android.graphics.Canvas)

static int getDistance(
android.graphics.Rect
android.graphics.Rect
int)

private void initAbsListView()

private boolean performLongPress(
android.view.View
int
long)

private void positionSelector(
int
int
int
int)

private void reportScrollStateChange(
int)

private void showPopup()

private boolean startScrollIfNeeded(
int)

private void useDefaultSelector()
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/view/View;>;)V )
public void addTouchables(
java.util.ArrayList)

public void afterTextChanged(
android.text.Editable)

public void beforeTextChanged(
java.lang.CharSequence
int
int
int)

protected boolean checkLayoutParams(
android.view.ViewGroup$LayoutParams)

public void clearTextFilter()

protected int computeVerticalScrollExtent()

protected int computeVerticalScrollOffset()

protected int computeVerticalScrollRange()

 android.view.ContextMenu$ContextMenuInfo createContextMenuInfo(
android.view.View
int
long)

 void dismissPopup()

protected void dispatchDraw(
android.graphics.Canvas)

protected void dispatchSetPressed(
boolean)

protected void drawableStateChanged()

abstract void fillGap(
boolean)

abstract int findMotionRow(
int)

public volatile android.view.ViewGroup$LayoutParams generateLayoutParams(
android.util.AttributeSet)

protected android.view.ViewGroup$LayoutParams generateLayoutParams(
android.view.ViewGroup$LayoutParams)

public android.widget.AbsListView$LayoutParams generateLayoutParams(
android.util.AttributeSet)

protected float getBottomFadingEdgeStrength()

public int getCacheColorHint()

protected android.view.ContextMenu$ContextMenuInfo getContextMenuInfo()

public void getFocusedRect(
android.graphics.Rect)

 int getFooterViewsCount()

 int getHeaderViewsCount()

public int getListPaddingBottom()

public int getListPaddingLeft()

public int getListPaddingRight()

public int getListPaddingTop()
@android.view.ViewDebug$ExportedProperty
public android.view.View getSelectedView()

public android.graphics.drawable.Drawable getSelector()

public int getSolidColor()

protected float getTopFadingEdgeStrength()

public int getTranscriptMode()

protected void handleDataChanged()

public boolean hasTextFilter()

 void hideSelector()

public void invalidateViews()

 void invokeOnItemScrollListener()

protected boolean isInFilterMode()

public boolean isScrollingCacheEnabled()

public boolean isStackFromBottom()

public boolean isTextFilterEnabled()

 void keyPressed()

protected void layoutChildren()

 android.view.View obtainView(
int)

protected void onAttachedToWindow()

protected int[] onCreateDrawableState(
int)

protected void onDetachedFromWindow()

public void onFilterComplete(
int)

protected void onFocusChanged(
boolean
int
android.graphics.Rect)

public void onGlobalLayout()

public boolean onInterceptTouchEvent(
android.view.MotionEvent)

public boolean onKeyUp(
int
android.view.KeyEvent)

protected void onLayout(
boolean
int
int
int
int)

protected void onMeasure(
int
int)

public void onRestoreInstanceState(
android.os.Parcelable)

public android.os.Parcelable onSaveInstanceState()

protected void onSizeChanged(
int
int
int
int)

public void onTextChanged(
java.lang.CharSequence
int
int
int)

public boolean onTouchEvent(
android.view.MotionEvent)

public void onTouchModeChanged(
boolean)

public void onWindowFocusChanged(
boolean)

public int pointToPosition(
int
int)

public long pointToRowId(
int
int)

 void positionSelector(
android.view.View)
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/view/View;>;)V )
public void reclaimViews(
java.util.List)

 int reconcileSelectedPosition()

public void requestLayout()

 void requestLayoutIfNecessary()

 void resetList()

 boolean resurrectSelection()

 boolean sendToTextFilter(
int
int
android.view.KeyEvent)

public void setCacheColorHint(
int)

public void setDrawSelectorOnTop(
boolean)

public void setFilterText(
java.lang.String)

public void setOnScrollListener(
android.widget.AbsListView$OnScrollListener)

public void setRecyclerListener(
android.widget.AbsListView$RecyclerListener)

public void setScrollIndicators(
android.view.View
android.view.View)

public void setScrollingCacheEnabled(
boolean)

abstract void setSelectionInt(
int)

public void setSelector(
int)

public void setSelector(
android.graphics.drawable.Drawable)

public void setStackFromBottom(
boolean)

public void setTextFilterEnabled(
boolean)

public void setTranscriptMode(
int)

 boolean shouldShowSelector()

public boolean showContextMenuForChild(
android.view.View)

 boolean touchModeDrawsInPressedState()

 void trackMotionScroll(
int
int)

 void updateScrollIndicators()

public boolean verifyDrawable(
android.graphics.drawable.Drawable)

________________CLASS________________

@android.widget.RemoteViews$RemoteView
@dalvik.annotation.MemberClasses (value =Landroid/widget/ProgressBar$RefreshProgressRunnable; )
public class android.widget.ProgressBar extends android.view.View

----------------FIELDS----------------

private static final int ANIMATION_RESOLUTION

private static final int MAX_LEVEL

private android.view.animation.AlphaAnimation mAnimation

private int mBehavior

private android.graphics.drawable.Drawable mCurrentDrawable

private int mDuration

private boolean mInDrawing

private boolean mIndeterminate

private android.graphics.drawable.Drawable mIndeterminateDrawable

private android.view.animation.Interpolator mInterpolator

private long mLastDrawTime

private int mMax

 int mMaxHeight

 int mMaxWidth

 int mMinHeight

 int mMinWidth

private boolean mNoInvalidate

private boolean mOnlyIndeterminate

private int mProgress

private android.graphics.drawable.Drawable mProgressDrawable

private android.widget.ProgressBar$RefreshProgressRunnable mRefreshProgressRunnable

 android.graphics.Bitmap mSampleTile

private int mSecondaryProgress

private boolean mShouldStartAnimationDrawable

private android.view.animation.Transformation mTransformation

private long mUiThreadId
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static void access$000(
android.widget.ProgressBar
int
int
boolean)

static android.widget.ProgressBar$RefreshProgressRunnable access$102(
android.widget.ProgressBar
android.widget.ProgressBar$RefreshProgressRunnable)

private android.graphics.drawable.Drawable createDrawableForTile(
android.graphics.drawable.Drawable
boolean)

private void doRefreshProgress(
int
int
boolean)

private void initProgressBar()

private void refreshProgress(
int
int
boolean)

private android.graphics.drawable.Drawable tileify(
android.graphics.drawable.Drawable)

private android.graphics.drawable.Drawable tileifyIndeterminate(
android.graphics.drawable.Drawable)

 android.graphics.drawable.Drawable getCurrentDrawable()

 android.graphics.drawable.shapes.Shape getDrawableShape()

public android.graphics.drawable.Drawable getIndeterminateDrawable()

public android.view.animation.Interpolator getInterpolator()

public int getMax()

public int getProgress()

public android.graphics.drawable.Drawable getProgressDrawable()

public int getSecondaryProgress()

public final void incrementProgressBy(
int)

public final void incrementSecondaryProgressBy(
int)

public void invalidateDrawable(
android.graphics.drawable.Drawable)

public boolean isIndeterminate()

protected void onDraw(
android.graphics.Canvas)

protected void onMeasure(
int
int)

 void onProgressRefresh(
float
boolean)

protected void onSizeChanged(
int
int
int
int)

public void postInvalidate()

public void setIndeterminate(
boolean)

public void setIndeterminateDrawable(
android.graphics.drawable.Drawable)

public void setInterpolator(
android.content.Context
int)

public void setInterpolator(
android.view.animation.Interpolator)

public void setMax(
int)

public void setProgress(
int)

 void setProgress(
int
boolean)

public void setProgressDrawable(
android.graphics.drawable.Drawable)

public void setSecondaryProgress(
int)

public void setVisibility(
int)

 void startAnimation()

 void stopAnimation()

protected boolean verifyDrawable(
android.graphics.drawable.Drawable)

________________CLASS________________


public abstract class android.widget.AbsSeekBar extends android.widget.ProgressBar

----------------FIELDS----------------

private static final int NO_ALPHA

 float mDisabledAlpha

 boolean mIsUserSeekable

private android.graphics.drawable.Drawable mThumb

private int mThumbOffset

 float mTouchProgressOffset
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private void setThumbPos(
int
int
android.graphics.drawable.Drawable
float
int)

private void trackTouchEvent(
android.view.MotionEvent)

protected void drawableStateChanged()

public int getThumbOffset()

protected void onDraw(
android.graphics.Canvas)

protected void onMeasure(
int
int)

 void onProgressRefresh(
float
boolean)

protected void onSizeChanged(
int
int
int
int)

 void onStartTrackingTouch()

 void onStopTrackingTouch()

public boolean onTouchEvent(
android.view.MotionEvent)

public void setThumb(
android.graphics.drawable.Drawable)

public void setThumbOffset(
int)

protected boolean verifyDrawable(
android.graphics.drawable.Drawable)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsSpinner; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.widget.AbsSpinner$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsSpinner; )
@dalvik.annotation.InnerClass (accessFlags =0 name =RecycleBin )
 class android.widget.AbsSpinner$RecycleBin extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/util/SparseArray<Landroid/view/View;>; )
private android.util.SparseArray mScrapHeap

final android.widget.AbsSpinner this$0
----------------METHODS----------------

 void <init>(
android.widget.AbsSpinner)

 void clear()

 android.view.View get(
int)

 android.view.View peek(
int)

public void put(
int
android.view.View)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsSpinner$SavedState; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/widget/AbsSpinner$SavedState;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.widget.AbsSpinner$SavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.widget.AbsSpinner$SavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.widget.AbsSpinner$SavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =SavedState )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsSpinner; )
 class android.widget.AbsSpinner$SavedState extends android.view.View$BaseSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/widget/AbsSpinner$SavedState;>; )
public static final android.os.Parcelable$Creator CREATOR

 int position

 long selectedId
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.widget.AbsSpinner$1)

 void <init>(
android.os.Parcelable)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/AbsSpinner$1;Landroid/widget/AbsSpinner$RecycleBin;Landroid/widget/AbsSpinner$SavedState; )
@dalvik.annotation.Signature (value =Landroid/widget/AdapterView<Landroid/widget/SpinnerAdapter;>; )
public abstract class android.widget.AbsSpinner extends android.widget.AdapterView

----------------FIELDS----------------

 android.widget.SpinnerAdapter mAdapter

 boolean mBlockLayoutRequests

private android.database.DataSetObserver mDataSetObserver

 int mHeightMeasureSpec

 android.view.animation.Interpolator mInterpolator

 android.widget.AbsSpinner$RecycleBin mRecycler

 android.view.View mSelectedView

 int mSelectionBottomPadding

 int mSelectionLeftPadding

 int mSelectionRightPadding

 int mSelectionTopPadding

 android.graphics.Rect mSpinnerPadding

private android.graphics.Rect mTouchFrame

 int mWidthMeasureSpec
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static void access$100(
android.widget.AbsSpinner
android.view.View
boolean)

private void initAbsSpinner()

protected android.view.ViewGroup$LayoutParams generateDefaultLayoutParams()

public volatile android.widget.Adapter getAdapter()

public android.widget.SpinnerAdapter getAdapter()

 int getChildHeight(
android.view.View)

 int getChildWidth(
android.view.View)

public int getCount()

public android.view.View getSelectedView()

 void handleDataChanged()

abstract void layout(
int
boolean)

protected void onMeasure(
int
int)

public void onRestoreInstanceState(
android.os.Parcelable)

public android.os.Parcelable onSaveInstanceState()

public int pointToPosition(
int
int)

 void recycleAllViews()

public void requestLayout()

 void resetList()

public volatile void setAdapter(
android.widget.Adapter)

public void setAdapter(
android.widget.SpinnerAdapter)

public void setSelection(
int)

public void setSelection(
int
boolean)

 void setSelectionInt(
int
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AbsoluteLayout; )
@dalvik.annotation.InnerClass (accessFlags =9 name =LayoutParams )
public class android.widget.AbsoluteLayout$LayoutParams extends android.view.ViewGroup$LayoutParams

----------------FIELDS----------------

public int x

public int y
----------------METHODS----------------

public void <init>(
int
int
int
int)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.view.ViewGroup$LayoutParams)

public java.lang.String debug(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AdapterView; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.widget.AdapterView$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AdapterView; )
@dalvik.annotation.InnerClass (accessFlags =9 name =AdapterContextMenuInfo )
public class android.widget.AdapterView$AdapterContextMenuInfo extends java.lang.Object implements android.view.ContextMenu$ContextMenuInfo

----------------FIELDS----------------

public long id

public int position

public android.view.View targetView
----------------METHODS----------------

public void <init>(
android.view.View
int
long)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AdapterView; )
@dalvik.annotation.InnerClass (accessFlags =0 name =AdapterDataSetObserver )
 class android.widget.AdapterView$AdapterDataSetObserver extends android.database.DataSetObserver

----------------FIELDS----------------

private android.os.Parcelable mInstanceState

final android.widget.AdapterView this$0
----------------METHODS----------------

 void <init>(
android.widget.AdapterView)

public void clearSavedState()

public void onChanged()

public void onInvalidated()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnItemLongClickListener )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/AdapterView; )
public abstract interface class android.widget.AdapterView$OnItemLongClickListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Landroid/widget/AdapterView<*>;Landroid/view/View;IJ)Z )
public abstract boolean onItemLongClick(
android.widget.AdapterView
android.view.View
int
long)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AdapterView; )
@dalvik.annotation.InnerClass (accessFlags =2 name =SelectionNotifier )
 class android.widget.AdapterView$SelectionNotifier extends android.os.Handler implements java.lang.Runnable

----------------FIELDS----------------

final android.widget.AdapterView this$0
----------------METHODS----------------

private void <init>(
android.widget.AdapterView)

 void <init>(
android.widget.AdapterView
android.widget.AdapterView$1)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/AnalogClock; )
 class android.widget.AnalogClock$1 extends android.content.BroadcastReceiver

----------------FIELDS----------------

final android.widget.AnalogClock this$0
----------------METHODS----------------

 void <init>(
android.widget.AnalogClock)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________


public class android.widget.AnalogClock extends android.view.View

----------------FIELDS----------------

private boolean mAttached

private android.pim.Time mCalendar

private boolean mChanged

private android.graphics.drawable.Drawable mDial

private int mDialHeight

private int mDialWidth

private final android.os.Handler mHandler

private float mHour

private android.graphics.drawable.Drawable mHourHand

private final android.content.BroadcastReceiver mIntentReceiver

private long mLastTime

private android.graphics.drawable.Drawable mMinuteHand

private float mMinutes
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static android.pim.Time access$002(
android.widget.AnalogClock
android.pim.Time)

static void access$100(
android.widget.AnalogClock)

private void onTimeChanged()

protected void onAttachedToWindow()

protected void onDetachedFromWindow()

protected void onDraw(
android.graphics.Canvas)

protected void onMeasure(
int
int)

protected void onSizeChanged(
int
int
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AppSecurityPermissions; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.widget.AppSecurityPermissions$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$android$widget$AppSecurityPermissions$State
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/widget/AppSecurityPermissions$State;>; )
@dalvik.annotation.InnerClass (accessFlags =16410 name =State )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/AppSecurityPermissions; )
final class android.widget.AppSecurityPermissions$State extends java.lang.Enum

----------------FIELDS----------------

private static final android.widget.AppSecurityPermissions$State[] $VALUES

public static final android.widget.AppSecurityPermissions$State BOTH

public static final android.widget.AppSecurityPermissions$State DANGEROUS_ONLY

public static final android.widget.AppSecurityPermissions$State NORMAL_ONLY

public static final android.widget.AppSecurityPermissions$State NO_PERMS
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.widget.AppSecurityPermissions$State valueOf(
java.lang.String)

public static android.widget.AppSecurityPermissions$State[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/AppSecurityPermissions$1;Landroid/widget/AppSecurityPermissions$State; )
public class android.widget.AppSecurityPermissions extends java.lang.Object implements android.view.View$OnClickListener

----------------FIELDS----------------

private final java.lang.String TAG

private boolean localLOGV

private android.content.Context mContext

private android.widget.AppSecurityPermissions$State mCurrentState

private android.graphics.drawable.Drawable mDangerousIcon

private android.widget.LinearLayout mDangerousList
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>; )
private java.util.HashMap mDangerousMap

private java.lang.String mDefaultGrpLabel

private java.lang.String mDefaultGrpName

private boolean mExpanded
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>; )
private java.util.HashMap mGroupLabelCache

private android.view.LayoutInflater mInflater

private android.view.View mNoPermsView

private android.widget.LinearLayout mNonDangerousList

private android.graphics.drawable.Drawable mNormalIcon
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>; )
private java.util.HashMap mNormalMap

private java.lang.String mPermFormat
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/content/pm/PermissionInfo;>; )
private java.util.ArrayList mPermsList

private android.widget.LinearLayout mPermsView

private android.content.pm.PackageManager mPm

private android.graphics.drawable.Drawable mShowMaxIcon

private android.graphics.drawable.Drawable mShowMinIcon

private android.view.View mShowMore

private android.widget.ImageView mShowMoreIcon

private android.widget.TextView mShowMoreText
----------------METHODS----------------

public void <init>(
android.content.Context)
@dalvik.annotation.Signature (value =(Landroid/content/Context;Ljava/util/ArrayList<Landroid/content/pm/PermissionInfo;>;)V )
public void <init>(
android.content.Context
java.util.ArrayList)

private java.lang.String canonicalizeGroupDesc(
java.lang.String)

private void displayNoPermissions()

private void displayPermissions(
boolean)

private java.lang.String formatPermissions(
java.lang.String
java.lang.CharSequence)

private java.lang.String formatPermissions(
java.lang.String
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/content/pm/PackageParser$Permission;>;Ljava/util/ArrayList<Ljava/lang/String;>;)Ljava/util/ArrayList<Landroid/content/pm/PermissionInfo;>; )
private java.util.ArrayList generatePermissionsInfo(
java.util.ArrayList
java.util.ArrayList)
@dalvik.annotation.Signature (value =([Landroid/content/pm/PermissionInfo;[Ljava/lang/String;)Ljava/util/ArrayList<Landroid/content/pm/PermissionInfo;>; )
private java.util.ArrayList generatePermissionsInfo(
android.content.pm.PermissionInfo[]
java.lang.String[])

private java.lang.String getGroupLabel(
java.lang.String)

private android.view.View getPermissionItemView(
java.lang.String
java.lang.String
boolean)

private boolean isDisplayablePermission(
android.content.pm.PermissionInfo)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/content/pm/PermissionInfo;>;)V )
private void setPermissions(
java.util.ArrayList)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/content/pm/PermissionInfo;>;Landroid/content/pm/ApplicationInfo;)V )
private void setPermissions(
java.util.ArrayList
android.content.pm.ApplicationInfo)

private void showPermissions()

public android.view.View getPermissionsView()

public void onClick(
android.view.View)

public void setSecurityPermissionsView()

public void setSecurityPermissionsView(
android.content.pm.PackageInfo)

public void setSecurityPermissionsView(
android.net.Uri)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/ArrayAdapter; )
 class android.widget.ArrayAdapter$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =ArrayFilter )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/ArrayAdapter; )
 class android.widget.ArrayAdapter$ArrayFilter extends android.widget.Filter

----------------FIELDS----------------

final android.widget.ArrayAdapter this$0
----------------METHODS----------------

private void <init>(
android.widget.ArrayAdapter)

 void <init>(
android.widget.ArrayAdapter
android.widget.ArrayAdapter$1)

protected android.widget.Filter$FilterResults performFiltering(
java.lang.CharSequence)

protected void publishResults(
java.lang.CharSequence
android.widget.Filter$FilterResults)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/AutoCompleteTextView; )
 class android.widget.AutoCompleteTextView$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =DropDownItemClickListener )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/AutoCompleteTextView; )
 class android.widget.AutoCompleteTextView$DropDownItemClickListener extends java.lang.Object implements android.widget.AdapterView$OnItemClickListener

----------------FIELDS----------------

final android.widget.AutoCompleteTextView this$0
----------------METHODS----------------

private void <init>(
android.widget.AutoCompleteTextView)

 void <init>(
android.widget.AutoCompleteTextView
android.widget.AutoCompleteTextView$1)

public void onItemClick(
android.widget.AdapterView
android.view.View
int
long)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/ListView$1;Landroid/widget/ListView$SavedState;Landroid/widget/ListView$ArrowScrollFocusResult;Landroid/widget/ListView$FixedViewInfo; )
public class android.widget.ListView extends android.widget.AbsListView

----------------FIELDS----------------

public static final int CHOICE_MODE_MULTIPLE

public static final int CHOICE_MODE_NONE

public static final int CHOICE_MODE_SINGLE

private static final float MAX_SCROLL_FACTOR

private static final int MIN_SCROLL_PREVIEW_PIXELS

static final int NO_POSITION

private boolean mAreAllItemsSelectable

private android.widget.ListView$ArrowScrollFocusResult mArrowScrollFocusResult

private android.util.SparseBooleanArray mCheckStates

private int mChoiceMode

 android.graphics.drawable.Drawable mDivider

 int mDividerHeight
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/widget/ListView$FixedViewInfo;>; )
private java.util.ArrayList mFooterViewInfos
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/widget/ListView$FixedViewInfo;>; )
private java.util.ArrayList mHeaderViewInfos

private boolean mItemsCanFocus

private android.graphics.Rect mTempRect
@dalvik.annotation.Signature (value =Landroid/util/SparseArray<Landroid/os/Parcelable;>; )
private android.util.SparseArray mfocusRestoreChildState
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private android.view.View addViewAbove(
android.view.View
int)

private android.view.View addViewBelow(
android.view.View
int)

private void adjustViewsUpOrDown()

private int amountToScroll(
int
int)

private int amountToScrollToNewFocus(
int
android.view.View
int)

private android.widget.ListView$ArrowScrollFocusResult arrowScrollFocused(
int)

private boolean arrowScrollImpl(
int)

private boolean commonKey(
int
int
android.view.KeyEvent)

private void correctTooHigh(
int)

private void correctTooLow(
int)

private int distanceToView(
android.view.View)

private void fillAboveAndBelow(
android.view.View
int)

private android.view.View fillDown(
int
int)

private android.view.View fillFromMiddle(
int
int)

private android.view.View fillFromSelection(
int
int
int)

private android.view.View fillFromTop(
int)

private android.view.View fillSpecific(
int
int)

private android.view.View fillUp(
int
int)

private int getArrowScrollPreviewLength()

private int getBottomSelectionPixel(
int
int
int)

private int getTopSelectionPixel(
int
int
int)

private boolean handleHorizontalFocusWithinListItem(
int)

private void handleNewSelectionChange(
android.view.View
int
int
boolean)

private boolean isDirectChildHeaderOrFooter(
android.view.View)

private boolean isViewAncestorOf(
android.view.View
android.view.View)

private int lookForSelectablePositionOnScreen(
int)

private android.view.View makeAndAddView(
int
int
boolean
int
boolean)

private void measureAndAdjustDown(
android.view.View
int
int)

private void measureItem(
android.view.View)

private android.view.View moveSelection(
android.view.View
android.view.View
int
int
int)

private int positionOfNewFocus(
android.view.View)

private void relayoutMeasuredItem(
android.view.View)
@dalvik.annotation.Signature (value =(Landroid/view/View;Ljava/util/ArrayList<Landroid/widget/ListView$FixedViewInfo;>;)V )
private void removeFixedViewInfo(
android.view.View
java.util.ArrayList)

private void scrollListItemsBy(
int)

private void setupChild(
android.view.View
int
int
boolean
int
boolean
boolean)

private boolean showingBottomFadingEdge()

private boolean showingTopFadingEdge()

public void addFooterView(
android.view.View)

public void addFooterView(
android.view.View
java.lang.Object
boolean)

public void addHeaderView(
android.view.View)

public void addHeaderView(
android.view.View
java.lang.Object
boolean)

 boolean arrowScroll(
int)

protected boolean canAnimate()

public void clearChoices()

protected void dispatchDraw(
android.graphics.Canvas)

public boolean dispatchKeyEvent(
android.view.KeyEvent)

 void drawDivider(
android.graphics.Canvas
android.graphics.Rect
int)

 void fillGap(
boolean)

 int findMotionRow(
int)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/widget/ListView$FixedViewInfo;>;I)Landroid/view/View; )
 android.view.View findViewInHeadersOrFooters(
java.util.ArrayList
int)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/widget/ListView$FixedViewInfo;>;Ljava/lang/Object;)Landroid/view/View; )
 android.view.View findViewTagInHeadersOrFooters(
java.util.ArrayList
java.lang.Object)

protected android.view.View findViewTraversal(
int)

protected android.view.View findViewWithTagTraversal(
java.lang.Object)

 boolean fullScroll(
int)

public volatile android.widget.Adapter getAdapter()

public android.widget.ListAdapter getAdapter()

public int getCheckedItemPosition()

public android.util.SparseBooleanArray getCheckedItemPositions()

public int getChoiceMode()

public android.graphics.drawable.Drawable getDivider()

public int getDividerHeight()

public int getFooterViewsCount()

public int getHeaderViewsCount()

public boolean getItemsCanFocus()

public int getMaxScrollAmount()

public boolean isItemChecked(
int)

protected void layoutChildren()

 int lookForSelectablePosition(
int
boolean)

final int measureHeightOfChildren(
int
int
int
int
int)

protected void onFinishInflate()

protected void onFocusChanged(
boolean
int
android.graphics.Rect)

public boolean onKeyDown(
int
android.view.KeyEvent)

public boolean onKeyMultiple(
int
int
android.view.KeyEvent)

public boolean onKeyUp(
int
android.view.KeyEvent)

protected void onMeasure(
int
int)

public void onRestoreInstanceState(
android.os.Parcelable)

public android.os.Parcelable onSaveInstanceState()

public boolean onTouchEvent(
android.view.MotionEvent)

 boolean pageScroll(
int)

public boolean performItemClick(
android.view.View
int
long)

public boolean removeFooterView(
android.view.View)

public boolean removeHeaderView(
android.view.View)

public boolean requestChildRectangleOnScreen(
android.view.View
android.graphics.Rect
boolean)

 void resetList()

public volatile void setAdapter(
android.widget.Adapter)

public void setAdapter(
android.widget.ListAdapter)

public void setChoiceMode(
int)

public void setDivider(
android.graphics.drawable.Drawable)

public void setDividerHeight(
int)

public void setItemChecked(
int
boolean)

public void setItemsCanFocus(
boolean)

public void setSelection(
int)

public void setSelectionAfterHeaderView()

public void setSelectionFromTop(
int
int)

 void setSelectionInt(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/AutoCompleteTextView; )
@dalvik.annotation.InnerClass (accessFlags =10 name =DropDownListView )
 class android.widget.AutoCompleteTextView$DropDownListView extends android.widget.ListView

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.content.Context)

public int getSelectionPaddingBottom()

public int getSelectionPaddingTop()

public boolean hasFocus()

public boolean hasWindowFocus()

public boolean isFocused()

protected android.view.View obtainView(
int)

________________CLASS________________


public abstract interface class android.widget.ExpandableListAdapter extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean areAllItemsEnabled()

public abstract java.lang.Object getChild(
int
int)

public abstract long getChildId(
int
int)

public abstract android.view.View getChildView(
int
int
boolean
android.view.View
android.view.ViewGroup)

public abstract int getChildrenCount(
int)

public abstract long getCombinedChildId(
long
long)

public abstract long getCombinedGroupId(
long)

public abstract java.lang.Object getGroup(
int)

public abstract int getGroupCount()

public abstract long getGroupId(
int)

public abstract android.view.View getGroupView(
int
boolean
android.view.View
android.view.ViewGroup)

public abstract boolean hasStableIds()

public abstract boolean isChildSelectable(
int
int)

public abstract boolean isEmpty()

public abstract void onGroupCollapsed(
int)

public abstract void onGroupExpanded(
int)

public abstract void registerDataSetObserver(
android.database.DataSetObserver)

public abstract void unregisterDataSetObserver(
android.database.DataSetObserver)

________________CLASS________________


public abstract class android.widget.BaseExpandableListAdapter extends java.lang.Object implements android.widget.ExpandableListAdapter

----------------FIELDS----------------

private final android.database.DataSetObservable mDataSetObservable
----------------METHODS----------------

public void <init>()

public boolean areAllItemsEnabled()

public long getCombinedChildId(
long
long)

public long getCombinedGroupId(
long)

public boolean isEmpty()

public void notifyDataSetChanged()

public void notifyDataSetInvalidated()

public void onGroupCollapsed(
int)

public void onGroupExpanded(
int)

public void registerDataSetObserver(
android.database.DataSetObserver)

public void unregisterDataSetObserver(
android.database.DataSetObserver)

________________CLASS________________


public class android.widget.Button extends android.widget.TextView

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

________________CLASS________________


public abstract interface class android.widget.Checkable extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean isChecked()

public abstract void setChecked(
boolean)

public abstract void toggle()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/CompoundButton$1;Landroid/widget/CompoundButton$SavedState;Landroid/widget/CompoundButton$OnCheckedChangeListener; )
public abstract class android.widget.CompoundButton extends android.widget.Button implements android.widget.Checkable

----------------FIELDS----------------

private static final int[] CHECKED_STATE_SET

private boolean mBroadcasting

private android.graphics.drawable.Drawable mButtonDrawable

private int mButtonResource

private boolean mChecked

private android.widget.CompoundButton$OnCheckedChangeListener mOnCheckedChangeListener

private android.widget.CompoundButton$OnCheckedChangeListener mOnCheckedChangeWidgetListener
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

protected void drawableStateChanged()

public boolean isChecked()

protected int[] onCreateDrawableState(
int)

protected void onDraw(
android.graphics.Canvas)

public void onRestoreInstanceState(
android.os.Parcelable)

public android.os.Parcelable onSaveInstanceState()

public boolean performClick()

public void setButtonDrawable(
int)

public void setButtonDrawable(
android.graphics.drawable.Drawable)

public void setChecked(
boolean)

public void setOnCheckedChangeListener(
android.widget.CompoundButton$OnCheckedChangeListener)

 void setOnCheckedChangeWidgetListener(
android.widget.CompoundButton$OnCheckedChangeListener)

public void toggle()

________________CLASS________________


public class android.widget.CheckBox extends android.widget.CompoundButton

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

________________CLASS________________


public abstract class android.widget.CheckedTextView extends android.widget.TextView implements android.widget.Checkable

----------------FIELDS----------------

private static final int[] CHECKED_STATE_SET

private int mBasePaddingRight

private android.graphics.drawable.Drawable mCheckMarkDrawable

private int mCheckMarkResource

private int mCheckMarkWidth

private boolean mChecked
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

protected void drawableStateChanged()

public boolean isChecked()

protected int[] onCreateDrawableState(
int)

protected void onDraw(
android.graphics.Canvas)

public void setCheckMarkDrawable(
int)

public void setCheckMarkDrawable(
android.graphics.drawable.Drawable)

public void setChecked(
boolean)

public void setPadding(
int
int
int
int)

public void toggle()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/Chronometer; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.widget.Chronometer$1 extends android.os.Handler

----------------FIELDS----------------

final android.widget.Chronometer this$0
----------------METHODS----------------

 void <init>(
android.widget.Chronometer)

public void handleMessage(
android.os.Message)

________________CLASS________________

@android.widget.RemoteViews$RemoteView
public class android.widget.Chronometer extends android.widget.TextView

----------------FIELDS----------------

private static final java.lang.String TAG

private long mBase

private java.lang.String mFormat

private java.lang.StringBuilder mFormatBuilder

private java.util.Formatter mFormatter

private java.lang.Object[] mFormatterArgs

private java.util.Locale mFormatterLocale

private android.os.Handler mHandler

private boolean mLogged

private boolean mRunning

private boolean mStarted

private boolean mVisible
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static boolean access$000(
android.widget.Chronometer)

static void access$100(
android.widget.Chronometer
long)

private void init()

private void updateRunning()

private void updateText(
long)

public long getBase()

public java.lang.String getFormat()

protected void onDetachedFromWindow()

protected void onWindowVisibilityChanged(
int)

public void setBase(
long)

public void setFormat(
java.lang.String)

public void start()

public void stop()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/CompoundButton; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.widget.CompoundButton$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnCheckedChangeListener )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/CompoundButton; )
public abstract interface class android.widget.CompoundButton$OnCheckedChangeListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onCheckedChanged(
android.widget.CompoundButton
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/CompoundButton$SavedState; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/widget/CompoundButton$SavedState;>; )
final class android.widget.CompoundButton$SavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.widget.CompoundButton$SavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.widget.CompoundButton$SavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =SavedState )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/CompoundButton; )
 class android.widget.CompoundButton$SavedState extends android.view.View$BaseSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/widget/CompoundButton$SavedState;>; )
public static final android.os.Parcelable$Creator CREATOR

 boolean checked
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.widget.CompoundButton$1)

 void <init>(
android.os.Parcelable)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/CursorAdapter; )
 class android.widget.CursorAdapter$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =ChangeObserver )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/CursorAdapter; )
 class android.widget.CursorAdapter$ChangeObserver extends android.database.ContentObserver

----------------FIELDS----------------

final android.widget.CursorAdapter this$0
----------------METHODS----------------

public void <init>(
android.widget.CursorAdapter)

public boolean deliverSelfNotifications()

public void onChange(
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/CursorAdapter; )
@dalvik.annotation.InnerClass (accessFlags =2 name =MyDataSetObserver )
 class android.widget.CursorAdapter$MyDataSetObserver extends android.database.DataSetObserver

----------------FIELDS----------------

final android.widget.CursorAdapter this$0
----------------METHODS----------------

private void <init>(
android.widget.CursorAdapter)

 void <init>(
android.widget.CursorAdapter
android.widget.CursorAdapter$1)

public void onChanged()

public void onInvalidated()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/CursorFilter$CursorFilterClient; )
 class android.widget.CursorFilter extends android.widget.Filter

----------------FIELDS----------------

 android.widget.CursorFilter$CursorFilterClient mClient
----------------METHODS----------------

 void <init>(
android.widget.CursorFilter$CursorFilterClient)

public java.lang.CharSequence convertResultToString(
java.lang.Object)

protected android.widget.Filter$FilterResults performFiltering(
java.lang.CharSequence)

protected void publishResults(
java.lang.CharSequence
android.widget.Filter$FilterResults)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/CursorTreeAdapter; )
 class android.widget.CursorTreeAdapter$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/CursorTreeAdapter$MyCursorHelper; )
@dalvik.annotation.InnerClass (accessFlags =2 name =MyContentObserver )
 class android.widget.CursorTreeAdapter$MyCursorHelper$MyContentObserver extends android.database.ContentObserver

----------------FIELDS----------------

final android.widget.CursorTreeAdapter$MyCursorHelper this$1
----------------METHODS----------------

public void <init>(
android.widget.CursorTreeAdapter$MyCursorHelper)

public boolean deliverSelfNotifications()

public void onChange(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =MyDataSetObserver )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/CursorTreeAdapter$MyCursorHelper; )
 class android.widget.CursorTreeAdapter$MyCursorHelper$MyDataSetObserver extends android.database.DataSetObserver

----------------FIELDS----------------

final android.widget.CursorTreeAdapter$MyCursorHelper this$1
----------------METHODS----------------

private void <init>(
android.widget.CursorTreeAdapter$MyCursorHelper)

 void <init>(
android.widget.CursorTreeAdapter$MyCursorHelper
android.widget.CursorTreeAdapter$1)

public void onChanged()

public void onInvalidated()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/CursorTreeAdapter; )
@dalvik.annotation.MemberClasses (value =Landroid/widget/CursorTreeAdapter$MyCursorHelper$MyDataSetObserver;Landroid/widget/CursorTreeAdapter$MyCursorHelper$MyContentObserver; )
@dalvik.annotation.InnerClass (accessFlags =0 name =MyCursorHelper )
 class android.widget.CursorTreeAdapter$MyCursorHelper extends java.lang.Object

----------------FIELDS----------------

private android.widget.CursorTreeAdapter$MyCursorHelper$MyContentObserver mContentObserver

private android.database.Cursor mCursor

private android.widget.CursorTreeAdapter$MyCursorHelper$MyDataSetObserver mDataSetObserver

private boolean mDataValid

private int mRowIDColumn

final android.widget.CursorTreeAdapter this$0
----------------METHODS----------------

 void <init>(
android.widget.CursorTreeAdapter
android.database.Cursor)

static android.database.Cursor access$300(
android.widget.CursorTreeAdapter$MyCursorHelper)

static boolean access$402(
android.widget.CursorTreeAdapter$MyCursorHelper
boolean)

 void changeCursor(
android.database.Cursor
boolean)

 void deactivate()

 int getCount()

 android.database.Cursor getCursor()

 long getId(
int)

 boolean isValid()

 android.database.Cursor moveTo(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/CursorTreeAdapter$1;Landroid/widget/CursorTreeAdapter$MyCursorHelper; )
public abstract class android.widget.CursorTreeAdapter extends android.widget.BaseExpandableListAdapter implements android.widget.Filterable, android.widget.CursorFilter$CursorFilterClient

----------------FIELDS----------------

private boolean mAutoRequery
@dalvik.annotation.Signature (value =Landroid/util/SparseArray<Landroid/widget/CursorTreeAdapter$MyCursorHelper;>; )
 android.util.SparseArray mChildrenCursorHelpers

private android.content.Context mContext

 android.widget.CursorFilter mCursorFilter

 android.widget.FilterQueryProvider mFilterQueryProvider

 android.widget.CursorTreeAdapter$MyCursorHelper mGroupCursorHelper

private android.os.Handler mHandler
----------------METHODS----------------

public void <init>(
android.database.Cursor
android.content.Context)

public void <init>(
android.database.Cursor
android.content.Context
boolean)

static android.os.Handler access$100(
android.widget.CursorTreeAdapter)

static boolean access$200(
android.widget.CursorTreeAdapter)

private void init(
android.database.Cursor
android.content.Context
boolean)

private void releaseCursorHelpers()

protected abstract void bindChildView(
android.view.View
android.content.Context
android.database.Cursor
boolean)

protected abstract void bindGroupView(
android.view.View
android.content.Context
android.database.Cursor
boolean)

public void changeCursor(
android.database.Cursor)

public volatile java.lang.CharSequence convertToString(
android.database.Cursor)

public java.lang.String convertToString(
android.database.Cursor)

 void deactivateChildrenCursorHelper(
int)

public android.database.Cursor getChild(
int
int)

public volatile java.lang.Object getChild(
int
int)

public long getChildId(
int
int)

public android.view.View getChildView(
int
int
boolean
android.view.View
android.view.ViewGroup)

public int getChildrenCount(
int)

protected abstract android.database.Cursor getChildrenCursor(
android.database.Cursor)

 android.widget.CursorTreeAdapter$MyCursorHelper getChildrenCursorHelper(
int
boolean)

public android.database.Cursor getCursor()

public android.widget.Filter getFilter()

public android.widget.FilterQueryProvider getFilterQueryProvider()

public android.database.Cursor getGroup(
int)

public volatile java.lang.Object getGroup(
int)

public int getGroupCount()

public long getGroupId(
int)

public android.view.View getGroupView(
int
boolean
android.view.View
android.view.ViewGroup)

public boolean hasStableIds()

public boolean isChildSelectable(
int
int)

protected abstract android.view.View newChildView(
android.content.Context
android.database.Cursor
boolean
android.view.ViewGroup)

protected abstract android.view.View newGroupView(
android.content.Context
android.database.Cursor
boolean
android.view.ViewGroup)

public void notifyDataSetChanged()

public void notifyDataSetChanged(
boolean)

public void notifyDataSetInvalidated()

public void onGroupCollapsed(
int)

public android.database.Cursor runQueryOnBackgroundThread(
java.lang.CharSequence)

public void setChildrenCursor(
int
android.database.Cursor)

public void setFilterQueryProvider(
android.widget.FilterQueryProvider)

public void setGroupCursor(
android.database.Cursor)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnChangedListener )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/NumberPicker; )
public abstract interface class com.android.internal.widget.NumberPicker$OnChangedListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onChanged(
com.android.internal.widget.NumberPicker
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.widget.DatePicker$1 extends java.lang.Object implements com.android.internal.widget.NumberPicker$OnChangedListener

----------------FIELDS----------------

final android.widget.DatePicker this$0
----------------METHODS----------------

 void <init>(
android.widget.DatePicker)

public void onChanged(
com.android.internal.widget.NumberPicker
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.widget.DatePicker$2 extends java.lang.Object implements com.android.internal.widget.NumberPicker$OnChangedListener

----------------FIELDS----------------

final android.widget.DatePicker this$0
----------------METHODS----------------

 void <init>(
android.widget.DatePicker)

public void onChanged(
com.android.internal.widget.NumberPicker
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.widget.DatePicker$3 extends java.lang.Object implements com.android.internal.widget.NumberPicker$OnChangedListener

----------------FIELDS----------------

final android.widget.DatePicker this$0
----------------METHODS----------------

 void <init>(
android.widget.DatePicker)

public void onChanged(
com.android.internal.widget.NumberPicker
int
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/widget/DatePicker$SavedState;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/DatePicker$SavedState; )
final class android.widget.DatePicker$SavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.widget.DatePicker$SavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.widget.DatePicker$SavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/DatePicker; )
@dalvik.annotation.InnerClass (accessFlags =10 name =SavedState )
 class android.widget.DatePicker$SavedState extends android.view.View$BaseSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/widget/DatePicker$SavedState;>; )
public static final android.os.Parcelable$Creator CREATOR

private final int mDay

private final int mMonth

private final int mYear
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.widget.DatePicker$1)

private void <init>(
android.os.Parcelable
int
int
int)

 void <init>(
android.os.Parcelable
int
int
int
android.widget.DatePicker$1)

public int getDay()

public int getMonth()

public int getYear()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@android.widget.RemoteViews$RemoteView
@dalvik.annotation.MemberClasses (value =Landroid/widget/FrameLayout$LayoutParams; )
public class android.widget.FrameLayout extends android.view.ViewGroup

----------------FIELDS----------------

private android.graphics.drawable.Drawable mForeground

private int mForegroundGravity

private int mForegroundPaddingBottom

private int mForegroundPaddingLeft

private int mForegroundPaddingRight

private int mForegroundPaddingTop

 boolean mMeasureAllChildren

private final android.graphics.Rect mOverlayBounds

private final android.graphics.Rect mSelfBounds
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

protected boolean checkLayoutParams(
android.view.ViewGroup$LayoutParams)

public void draw(
android.graphics.Canvas)

protected void drawableStateChanged()

public boolean gatherTransparentRegion(
android.graphics.Region)

protected volatile android.view.ViewGroup$LayoutParams generateDefaultLayoutParams()

protected android.widget.FrameLayout$LayoutParams generateDefaultLayoutParams()

public volatile android.view.ViewGroup$LayoutParams generateLayoutParams(
android.util.AttributeSet)

protected android.view.ViewGroup$LayoutParams generateLayoutParams(
android.view.ViewGroup$LayoutParams)

public android.widget.FrameLayout$LayoutParams generateLayoutParams(
android.util.AttributeSet)

public boolean getConsiderGoneChildrenWhenMeasuring()

public android.graphics.drawable.Drawable getForeground()

protected void onLayout(
boolean
int
int
int
int)

protected void onMeasure(
int
int)

protected void onSizeChanged(
int
int
int
int)

public void setForeground(
android.graphics.drawable.Drawable)

public void setForegroundGravity(
int)

public void setMeasureAllChildren(
boolean)

protected boolean verifyDrawable(
android.graphics.drawable.Drawable)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/DatePicker$SavedState;Landroid/widget/DatePicker$OnDateChangedListener; )
public class android.widget.DatePicker extends android.widget.FrameLayout

----------------FIELDS----------------

private static final int DEFAULT_END_YEAR

private static final int DEFAULT_START_YEAR

private int mDay

private final com.android.internal.widget.NumberPicker mDayPicker

private final int mEndYear

private int mMonth

private final com.android.internal.widget.NumberPicker mMonthPicker

private android.widget.DatePicker$OnDateChangedListener mOnDateChangedListener

private final int mStartYear

private int mYear

private final com.android.internal.widget.NumberPicker mYearPicker
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static int access$000(
android.widget.DatePicker)

static int access$002(
android.widget.DatePicker
int)

static android.widget.DatePicker$OnDateChangedListener access$100(
android.widget.DatePicker)

static int access$200(
android.widget.DatePicker)

static int access$202(
android.widget.DatePicker
int)

static int access$300(
android.widget.DatePicker)

static int access$302(
android.widget.DatePicker
int)

static void access$400(
android.widget.DatePicker)

private void reorderPickers()

private void updateDaySpinner()

private void updateSpinners()
@dalvik.annotation.Signature (value =(Landroid/util/SparseArray<Landroid/os/Parcelable;>;)V )
protected void dispatchRestoreInstanceState(
android.util.SparseArray)

public int getDayOfMonth()

public int getMonth()

public int getYear()

public void init(
int
int
int
android.widget.DatePicker$OnDateChangedListener)

protected void onRestoreInstanceState(
android.os.Parcelable)

protected android.os.Parcelable onSaveInstanceState()

public void setEnabled(
boolean)

public void updateDate(
int
int
int)

________________CLASS________________


public class android.widget.DialerFilter extends android.widget.RelativeLayout

----------------FIELDS----------------

public static final int DIGITS_AND_LETTERS

public static final int DIGITS_AND_LETTERS_NO_DIGITS

public static final int DIGITS_AND_LETTERS_NO_LETTERS

public static final int DIGITS_ONLY

public static final int LETTERS_ONLY

 android.widget.EditText mDigits

 android.widget.EditText mHint

 android.widget.ImageView mIcon

 android.text.InputFilter[] mInputFilters

private boolean mIsQwerty

 android.widget.EditText mLetters

 int mMode

 android.widget.EditText mPrimary
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

private void makeDigitsPrimary()

private void makeLettersPrimary()

private void swapPrimaryAndHint(
boolean)

public void append(
java.lang.String)

public void clearText()

public java.lang.CharSequence getDigits()

public java.lang.CharSequence getFilterText()

public java.lang.CharSequence getLetters()

public int getMode()

public boolean isQwertyKeyboard()

protected void onFinishInflate()

protected void onFocusChanged(
boolean
int
android.graphics.Rect)

public boolean onKeyDown(
int
android.view.KeyEvent)

public boolean onKeyUp(
int
android.view.KeyEvent)

protected void onModeChange(
int
int)

public void removeFilterWatcher(
android.text.TextWatcher)

public void setDigitsWatcher(
android.text.TextWatcher)

public void setFilterWatcher(
android.text.TextWatcher)

public void setLettersWatcher(
android.text.TextWatcher)

public void setMode(
int)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.widget.DigitalClock$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.widget.DigitalClock this$0
----------------METHODS----------------

 void <init>(
android.widget.DigitalClock)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/DigitalClock; )
@dalvik.annotation.InnerClass (accessFlags =2 name =FormatChangeObserver )
 class android.widget.DigitalClock$FormatChangeObserver extends android.database.ContentObserver

----------------FIELDS----------------

final android.widget.DigitalClock this$0
----------------METHODS----------------

public void <init>(
android.widget.DigitalClock)

public void onChange(
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/DigitalClock$FormatChangeObserver; )
public class android.widget.DigitalClock extends android.widget.TextView

----------------FIELDS----------------

private static final java.lang.String m12

private static final java.lang.String m24

 java.util.Calendar mCalendar

 java.lang.String mFormat

private android.widget.DigitalClock$FormatChangeObserver mFormatChangeObserver

private android.os.Handler mHandler

private java.lang.Runnable mTicker

private boolean mTickerStopped
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

static boolean access$000(
android.widget.DigitalClock)

static java.lang.Runnable access$100(
android.widget.DigitalClock)

static android.os.Handler access$200(
android.widget.DigitalClock)

static void access$300(
android.widget.DigitalClock)

private boolean get24HourMode()

private void initClock(
android.content.Context)

private void setFormat()

protected void onAttachedToWindow()

protected void onDetachedFromWindow()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.widget.DoubleDigitManager$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.widget.DoubleDigitManager this$0
----------------METHODS----------------

 void <init>(
android.widget.DoubleDigitManager)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1544 name =CallBack )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/DoubleDigitManager; )
abstract interface class android.widget.DoubleDigitManager$CallBack extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void singleDigitFinal(
int)

public abstract boolean singleDigitIntermediate(
int)

public abstract boolean twoDigitsFinal(
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/DoubleDigitManager$CallBack; )
 class android.widget.DoubleDigitManager extends java.lang.Object

----------------FIELDS----------------

private java.lang.Integer intermediateDigit

private final android.widget.DoubleDigitManager$CallBack mCallBack

private final long timeoutInMillis
----------------METHODS----------------

public void <init>(
long
android.widget.DoubleDigitManager$CallBack)

static java.lang.Integer access$000(
android.widget.DoubleDigitManager)

static java.lang.Integer access$002(
android.widget.DoubleDigitManager
java.lang.Integer)

static android.widget.DoubleDigitManager$CallBack access$100(
android.widget.DoubleDigitManager)

public void reportDigit(
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/widget/ExpandableListConnector$GroupMetadata;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/ExpandableListConnector$GroupMetadata; )
final class android.widget.ExpandableListConnector$GroupMetadata$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.widget.ExpandableListConnector$GroupMetadata createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.widget.ExpandableListConnector$GroupMetadata[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =GroupMetadata )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/ExpandableListConnector; )
 class android.widget.ExpandableListConnector$GroupMetadata extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/widget/ExpandableListConnector$GroupMetadata;>; )
public static final android.os.Parcelable$Creator CREATOR

static final int REFRESH

 int flPos

 int gPos

 int lastChildFlPos
----------------METHODS----------------

static void <clinit>()

 void <init>()

public int describeContents()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4 name =MyDataSetObserver )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/ExpandableListConnector; )
public class android.widget.ExpandableListConnector$MyDataSetObserver extends android.database.DataSetObserver

----------------FIELDS----------------

final android.widget.ExpandableListConnector this$0
----------------METHODS----------------

protected void <init>(
android.widget.ExpandableListConnector)

public void onChanged()

public void onInvalidated()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/ExpandableListConnector; )
@dalvik.annotation.InnerClass (accessFlags =9 name =PositionMetadata )
public class android.widget.ExpandableListConnector$PositionMetadata extends java.lang.Object

----------------FIELDS----------------

public int groupInsertIndex

public android.widget.ExpandableListConnector$GroupMetadata groupMetadata

public android.widget.ExpandableListPosition position
----------------METHODS----------------

public void <init>(
int
int
int
int)

protected void <init>(
int
int
int
int
android.widget.ExpandableListConnector$GroupMetadata
int)

public boolean isExpanded()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/ExpandableListConnector$PositionMetadata;Landroid/widget/ExpandableListConnector$GroupMetadata;Landroid/widget/ExpandableListConnector$MyDataSetObserver; )
 class android.widget.ExpandableListConnector extends android.widget.BaseAdapter implements android.widget.Filterable

----------------FIELDS----------------

private android.database.DataSetObserver mDataSetObserver
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/widget/ExpandableListConnector$GroupMetadata;>; )
private java.util.ArrayList mExpGroupMetadataList

private android.widget.ExpandableListAdapter mExpandableListAdapter

private int mMaxExpGroupCount

private int mTotalExpChildrenCount
----------------METHODS----------------

public void <init>(
android.widget.ExpandableListAdapter)

static void access$000(
android.widget.ExpandableListConnector
boolean)

private void refreshExpGroupMetadataList(
boolean)

public boolean areAllItemsEnabled()

 boolean collapseGroup(
int)

 boolean collapseGroup(
android.widget.ExpandableListConnector$PositionMetadata)

 boolean expandGroup(
int)

 boolean expandGroup(
android.widget.ExpandableListConnector$PositionMetadata)

 android.widget.ExpandableListAdapter getAdapter()

public int getCount()
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Landroid/widget/ExpandableListConnector$GroupMetadata;>; )
 java.util.ArrayList getExpandedGroupMetadataList()

public android.widget.Filter getFilter()

 android.widget.ExpandableListConnector$PositionMetadata getFlattenedPos(
android.widget.ExpandableListPosition)

public java.lang.Object getItem(
int)

public long getItemId(
int)

public int getItemViewType(
int)

 android.widget.ExpandableListConnector$PositionMetadata getUnflattenedPos(
int)

public android.view.View getView(
int
android.view.View
android.view.ViewGroup)

public int getViewTypeCount()

public boolean hasStableIds()

public boolean isEmpty()

public boolean isEnabled(
int)

public boolean isGroupExpanded(
int)

public void setExpandableListAdapter(
android.widget.ExpandableListAdapter)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/widget/ExpandableListConnector$GroupMetadata;>;)V )
 void setExpandedGroupMetadataList(
java.util.ArrayList)

public void setMaxExpGroupCount(
int)

________________CLASS________________


 class android.widget.ExpandableListPosition extends java.lang.Object

----------------FIELDS----------------

public static final int CHILD

public static final int GROUP

public int childPos

 int flatListPos

public int groupPos

public int type
----------------METHODS----------------

private void <init>(
int
int
int)

 void <init>(
int
int
int
int)

static android.widget.ExpandableListPosition obtainChildPosition(
int
int)

static android.widget.ExpandableListPosition obtainGroupPosition(
int)

static android.widget.ExpandableListPosition obtainPosition(
long)

 long getPackedPosition()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/ExpandableListView; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.widget.ExpandableListView$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/ExpandableListView; )
@dalvik.annotation.InnerClass (accessFlags =9 name =ExpandableListContextMenuInfo )
public class android.widget.ExpandableListView$ExpandableListContextMenuInfo extends java.lang.Object implements android.view.ContextMenu$ContextMenuInfo

----------------FIELDS----------------

public long id

public long packedPosition

public android.view.View targetView
----------------METHODS----------------

public void <init>(
android.view.View
long
long)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/ExpandableListView; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnGroupClickListener )
public abstract interface class android.widget.ExpandableListView$OnGroupClickListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean onGroupClick(
android.widget.ExpandableListView
android.view.View
int
long)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/ExpandableListView$SavedState; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/widget/ExpandableListView$SavedState;>; )
final class android.widget.ExpandableListView$SavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.widget.ExpandableListView$SavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.widget.ExpandableListView$SavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =SavedState )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/ExpandableListView; )
 class android.widget.ExpandableListView$SavedState extends android.view.View$BaseSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/widget/ExpandableListView$SavedState;>; )
public static final android.os.Parcelable$Creator CREATOR
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/widget/ExpandableListConnector$GroupMetadata;>; )
 java.util.ArrayList expandedGroupMetadataList
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.widget.ExpandableListView$1)
@dalvik.annotation.Signature (value =(Landroid/os/Parcelable;Ljava/util/ArrayList<Landroid/widget/ExpandableListConnector$GroupMetadata;>;)V )
 void <init>(
android.os.Parcelable
java.util.ArrayList)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/ExpandableListView$1;Landroid/widget/ExpandableListView$SavedState;Landroid/widget/ExpandableListView$ExpandableListContextMenuInfo;Landroid/widget/ExpandableListView$OnChildClickListener;Landroid/widget/ExpandableListView$OnGroupClickListener;Landroid/widget/ExpandableListView$OnGroupExpandListener;Landroid/widget/ExpandableListView$OnGroupCollapseListener; )
public class android.widget.ExpandableListView extends android.widget.ListView

----------------FIELDS----------------

public static final int CHILD_INDICATOR_INHERIT

private static final int[] CHILD_LAST_STATE_SET

private static final int[] EMPTY_STATE_SET

private static final int[] GROUP_EMPTY_STATE_SET

private static final int[] GROUP_EXPANDED_EMPTY_STATE_SET

private static final int[] GROUP_EXPANDED_STATE_SET

private static final int[][] GROUP_STATE_SETS

private static final long PACKED_POSITION_INT_MASK_CHILD

private static final long PACKED_POSITION_INT_MASK_GROUP

private static final long PACKED_POSITION_MASK_CHILD

private static final long PACKED_POSITION_MASK_GROUP

private static final long PACKED_POSITION_MASK_TYPE

private static final long PACKED_POSITION_SHIFT_GROUP

private static final long PACKED_POSITION_SHIFT_TYPE

public static final int PACKED_POSITION_TYPE_CHILD

public static final int PACKED_POSITION_TYPE_GROUP

public static final int PACKED_POSITION_TYPE_NULL

public static final long PACKED_POSITION_VALUE_NULL

private android.widget.ExpandableListAdapter mAdapter

private android.graphics.drawable.Drawable mChildDivider

private android.graphics.drawable.Drawable mChildIndicator

private int mChildIndicatorLeft

private int mChildIndicatorRight

private android.widget.ExpandableListConnector mConnector

private android.graphics.drawable.Drawable mGroupIndicator

private int mIndicatorLeft

private int mIndicatorRight

private android.widget.ExpandableListView$OnChildClickListener mOnChildClickListener

private android.widget.ExpandableListView$OnGroupClickListener mOnGroupClickListener

private android.widget.ExpandableListView$OnGroupCollapseListener mOnGroupCollapseListener

private android.widget.ExpandableListView$OnGroupExpandListener mOnGroupExpandListener
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private long getChildOrGroupId(
android.widget.ExpandableListPosition)

private android.graphics.drawable.Drawable getIndicator(
android.widget.ExpandableListConnector$PositionMetadata)

public static int getPackedPositionChild(
long)

public static long getPackedPositionForChild(
int
int)

public static long getPackedPositionForGroup(
int)

public static int getPackedPositionGroup(
long)

public static int getPackedPositionType(
long)

public boolean collapseGroup(
int)

 android.view.ContextMenu$ContextMenuInfo createContextMenuInfo(
android.view.View
int
long)

protected void dispatchDraw(
android.graphics.Canvas)

 void drawDivider(
android.graphics.Canvas
android.graphics.Rect
int)

public boolean expandGroup(
int)

public volatile android.widget.Adapter getAdapter()

public android.widget.ListAdapter getAdapter()

public android.widget.ExpandableListAdapter getExpandableListAdapter()

public long getExpandableListPosition(
int)

public int getFlatListPosition(
long)

public long getSelectedId()

public long getSelectedPosition()

 boolean handleItemClick(
android.view.View
int
long)

public boolean isGroupExpanded(
int)

public void onRestoreInstanceState(
android.os.Parcelable)

public android.os.Parcelable onSaveInstanceState()

public boolean performItemClick(
android.view.View
int
long)

public volatile void setAdapter(
android.widget.Adapter)

public void setAdapter(
android.widget.ExpandableListAdapter)

public void setAdapter(
android.widget.ListAdapter)

public void setChildDivider(
android.graphics.drawable.Drawable)

public void setChildIndicator(
android.graphics.drawable.Drawable)

public void setChildIndicatorBounds(
int
int)

public void setGroupIndicator(
android.graphics.drawable.Drawable)

public void setIndicatorBounds(
int
int)

public void setOnChildClickListener(
android.widget.ExpandableListView$OnChildClickListener)

public void setOnGroupClickListener(
android.widget.ExpandableListView$OnGroupClickListener)

public void setOnGroupCollapseListener(
android.widget.ExpandableListView$OnGroupCollapseListener)

public void setOnGroupExpandListener(
android.widget.ExpandableListView$OnGroupExpandListener)

public void setOnItemClickListener(
android.widget.AdapterView$OnItemClickListener)

public boolean setSelectedChild(
int
int
boolean)

public void setSelectedGroup(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/Filter; )
 class android.widget.Filter$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/Filter; )
@dalvik.annotation.InnerClass (accessFlags =12 name =FilterResults )
public class android.widget.Filter$FilterResults extends java.lang.Object

----------------FIELDS----------------

public int count

public java.lang.Object values
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/Filter; )
@dalvik.annotation.InnerClass (accessFlags =10 name =RequestArguments )
 class android.widget.Filter$RequestArguments extends java.lang.Object

----------------FIELDS----------------

 java.lang.CharSequence constraint

 android.widget.Filter$FilterListener listener

 android.widget.Filter$FilterResults results
----------------METHODS----------------

private void <init>()

 void <init>(
android.widget.Filter$1)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =RequestHandler )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/Filter; )
 class android.widget.Filter$RequestHandler extends android.os.Handler

----------------FIELDS----------------

final android.widget.Filter this$0
----------------METHODS----------------

public void <init>(
android.widget.Filter
android.os.Looper)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/Filter; )
@dalvik.annotation.InnerClass (accessFlags =2 name =ResultsHandler )
 class android.widget.Filter$ResultsHandler extends android.os.Handler

----------------FIELDS----------------

final android.widget.Filter this$0
----------------METHODS----------------

private void <init>(
android.widget.Filter)

 void <init>(
android.widget.Filter
android.widget.Filter$1)

public void handleMessage(
android.os.Message)

________________CLASS________________


public abstract interface class android.widget.FilterQueryProvider extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.database.Cursor runQuery(
java.lang.CharSequence)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/FrameLayout; )
@dalvik.annotation.InnerClass (accessFlags =9 name =LayoutParams )
public class android.widget.FrameLayout$LayoutParams extends android.view.ViewGroup$MarginLayoutParams

----------------FIELDS----------------

public int gravity
----------------METHODS----------------

public void <init>(
int
int)

public void <init>(
int
int
int)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.view.ViewGroup$LayoutParams)

public void <init>(
android.view.ViewGroup$MarginLayoutParams)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.widget.Gallery$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.widget.Gallery this$0
----------------METHODS----------------

 void <init>(
android.widget.Gallery)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/Gallery; )
@dalvik.annotation.InnerClass (accessFlags =2 name =FlingRunnable )
 class android.widget.Gallery$FlingRunnable extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

private int mLastFlingX

private android.widget.Scroller mScroller

final android.widget.Gallery this$0
----------------METHODS----------------

public void <init>(
android.widget.Gallery)

static void access$000(
android.widget.Gallery$FlingRunnable
boolean)

static android.widget.Scroller access$100(
android.widget.Gallery$FlingRunnable)

private void endFling(
boolean)

private void startCommon()

public void run()

public void startUsingDistance(
int)

public void startUsingVelocity(
int)

public void stop(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =LayoutParams )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/Gallery; )
public class android.widget.Gallery$LayoutParams extends android.view.ViewGroup$LayoutParams

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
int
int)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.view.ViewGroup$LayoutParams)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/Gallery$LayoutParams;Landroid/widget/Gallery$FlingRunnable; )
public class android.widget.Gallery extends android.widget.AbsSpinner implements android.view.GestureDetector$OnGestureListener

----------------FIELDS----------------

private static final java.lang.String TAG

private static final boolean localLOGV

private int mAnimationDuration

private android.widget.AdapterView$AdapterContextMenuInfo mContextMenuInfo

private int mDownTouchPosition

private android.view.View mDownTouchView

private android.widget.Gallery$FlingRunnable mFlingRunnable

private android.view.GestureDetector mGestureDetector

private int mGravity

private int mLeftMost

private int mRightMost

private android.view.View mSelectedChild

private boolean mShouldCallbackDuringFling

private boolean mShouldCallbackOnUnselectedItemClick

private boolean mShouldStopFling

private int mSpacing

private boolean mSuppressSelectionChanged

private float mUnselectedAlpha
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static int access$1000(
android.widget.Gallery)

static void access$200(
android.widget.Gallery)

static int access$300(
android.widget.Gallery)

static void access$400(
android.widget.Gallery)

static boolean access$500(
android.widget.Gallery)

static boolean access$502(
android.widget.Gallery
boolean)

static int access$602(
android.widget.Gallery
int)

static int access$700(
android.widget.Gallery)

static int access$800(
android.widget.Gallery)

static int access$900(
android.widget.Gallery)

private int calculateTop(
android.view.View
android.widget.Gallery$LayoutParams
boolean)

private void detachOffScreenChildren(
boolean)

private boolean dispatchLongPress(
android.view.View
int
long)

private void dispatchPress(
android.view.View)

private void dispatchUnpress()

private void fillToGalleryLeft()

private void fillToGalleryRight()

private int getCenterOfGallery()

private static int getCenterOfView(
android.view.View)

private android.view.View makeAndAddView(
int
int
int
boolean)

private void offsetChildrenLeftAndRight(
int)

private void onFinishedMovement()

private void scrollIntoSlots()

private boolean scrollToChild(
int)

private void setSelectionToCenterChild()

private void setUpChild(
android.view.View
int
int
boolean)

private void updateSelectedItemMetadata()

protected boolean checkLayoutParams(
android.view.ViewGroup$LayoutParams)

protected int computeHorizontalScrollExtent()

protected int computeHorizontalScrollOffset()

protected int computeHorizontalScrollRange()

public boolean dispatchKeyEvent(
android.view.KeyEvent)

protected void dispatchSetPressed(
boolean)

public void dispatchSetSelected(
boolean)

protected android.view.ViewGroup$LayoutParams generateDefaultLayoutParams()

public android.view.ViewGroup$LayoutParams generateLayoutParams(
android.util.AttributeSet)

protected android.view.ViewGroup$LayoutParams generateLayoutParams(
android.view.ViewGroup$LayoutParams)

protected int getChildDrawingOrder(
int
int)

 int getChildHeight(
android.view.View)

protected boolean getChildStaticTransformation(
android.view.View
android.view.animation.Transformation)

protected android.view.ContextMenu$ContextMenuInfo getContextMenuInfo()

 int getLimitedMotionScrollAmount(
boolean
int)

 void layout(
int
boolean)

 boolean moveNext()

 boolean movePrevious()

 void onCancel()

public boolean onDown(
android.view.MotionEvent)

public boolean onFling(
android.view.MotionEvent
android.view.MotionEvent
float
float)

protected void onFocusChanged(
boolean
int
android.graphics.Rect)

public boolean onKeyDown(
int
android.view.KeyEvent)

public boolean onKeyUp(
int
android.view.KeyEvent)

protected void onLayout(
boolean
int
int
int
int)

public void onLongPress(
android.view.MotionEvent)

public boolean onScroll(
android.view.MotionEvent
android.view.MotionEvent
float
float)

public void onShowPress(
android.view.MotionEvent)

public boolean onSingleTapUp(
android.view.MotionEvent)

public boolean onTouchEvent(
android.view.MotionEvent)

 void onUp()

 void selectionChanged()

public void setAnimationDuration(
int)

public void setCallbackDuringFling(
boolean)

public void setCallbackOnUnselectedItemClick(
boolean)

public void setGravity(
int)

 void setSelectedPositionInt(
int)

public void setSpacing(
int)

public void setUnselectedAlpha(
float)

public boolean showContextMenu()

public boolean showContextMenuForChild(
android.view.View)

 void trackMotionScroll(
int)

________________CLASS________________


public class android.widget.GridView extends android.widget.AbsListView

----------------FIELDS----------------

public static final int AUTO_FIT

public static final int NO_STRETCH

public static final int STRETCH_COLUMN_WIDTH

public static final int STRETCH_SPACING

private int mColumnWidth

private int mGravity

private int mHorizontalSpacing

private int mNumColumns

private android.view.View mReferenceView

private android.view.View mReferenceViewInSelectedRow

private int mRequestedColumnWidth

private int mRequestedHorizontalSpacing

private int mRequestedNumColumns

private int mStretchMode

private final android.graphics.Rect mTempRect

private int mVerticalSpacing
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private void adjustForBottomFadingEdge(
android.view.View
int
int)

private void adjustForTopFadingEdge(
android.view.View
int
int)

private void adjustViewsUpOrDown()

private boolean commonKey(
int
int
android.view.KeyEvent)

private void correctTooHigh(
int
int
int)

private void correctTooLow(
int
int
int)

private void determineColumns(
int)

private android.view.View fillDown(
int
int)

private android.view.View fillFromBottom(
int
int)

private android.view.View fillFromSelection(
int
int
int)

private android.view.View fillFromTop(
int)

private android.view.View fillSelection(
int
int)

private android.view.View fillSpecific(
int
int)

private android.view.View fillUp(
int
int)

private int getBottomSelectionPixel(
int
int
int
int)

private int getTopSelectionPixel(
int
int
int)

private boolean isCandidateSelection(
int
int)

private android.view.View makeAndAddView(
int
int
boolean
int
boolean
int)

private android.view.View makeRow(
int
int
boolean)

private android.view.View moveSelection(
int
int
int)

private void pinToBottom(
int)

private void pinToTop(
int)

private void setupChild(
android.view.View
int
int
boolean
int
boolean
boolean
int)

 boolean arrowScroll(
int)

protected void attachLayoutAnimationParameters(
android.view.View
android.view.ViewGroup$LayoutParams
int
int)

protected int computeVerticalScrollExtent()

protected int computeVerticalScrollOffset()

protected int computeVerticalScrollRange()

 void fillGap(
boolean)

 int findMotionRow(
int)

 boolean fullScroll(
int)

public volatile android.widget.Adapter getAdapter()

public android.widget.ListAdapter getAdapter()

public int getStretchMode()

protected void layoutChildren()

 int lookForSelectablePosition(
int
boolean)

protected void onFocusChanged(
boolean
int
android.graphics.Rect)

public boolean onKeyDown(
int
android.view.KeyEvent)

public boolean onKeyMultiple(
int
int
android.view.KeyEvent)

public boolean onKeyUp(
int
android.view.KeyEvent)

protected void onMeasure(
int
int)

 boolean pageScroll(
int)

public volatile void setAdapter(
android.widget.Adapter)

public void setAdapter(
android.widget.ListAdapter)

public void setColumnWidth(
int)

public void setGravity(
int)

public void setHorizontalSpacing(
int)

public void setNumColumns(
int)

public void setSelection(
int)

 void setSelectionInt(
int)

public void setStretchMode(
int)

public void setVerticalSpacing(
int)

________________CLASS________________


public abstract interface class android.widget.WrapperListAdapter extends java.lang.Object implements android.widget.ListAdapter

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.widget.ListAdapter getWrappedAdapter()

________________CLASS________________


public class android.widget.HeaderViewListAdapter extends java.lang.Object implements android.widget.WrapperListAdapter, android.widget.Filterable

----------------FIELDS----------------

private android.widget.ListAdapter mAdapter

 boolean mAreAllFixedViewsSelectable
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/widget/ListView$FixedViewInfo;>; )
 java.util.ArrayList mFooterViewInfos
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/widget/ListView$FixedViewInfo;>; )
 java.util.ArrayList mHeaderViewInfos

private boolean mIsFilterable
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/widget/ListView$FixedViewInfo;>;Ljava/util/ArrayList<Landroid/widget/ListView$FixedViewInfo;>;Landroid/widget/ListAdapter;)V )
public void <init>(
java.util.ArrayList
java.util.ArrayList
android.widget.ListAdapter)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/widget/ListView$FixedViewInfo;>;)Z )
private boolean areAllListInfosSelectable(
java.util.ArrayList)

public boolean areAllItemsEnabled()

public int getCount()

public android.widget.Filter getFilter()

public int getFootersCount()

public int getHeadersCount()

public java.lang.Object getItem(
int)

public long getItemId(
int)

public int getItemViewType(
int)

public android.view.View getView(
int
android.view.View
android.view.ViewGroup)

public int getViewTypeCount()

public android.widget.ListAdapter getWrappedAdapter()

public boolean hasStableIds()

public boolean isEmpty()

public boolean isEnabled(
int)

public void registerDataSetObserver(
android.database.DataSetObserver)

public boolean removeFooter(
android.view.View)

public boolean removeHeader(
android.view.View)

public void unregisterDataSetObserver(
android.database.DataSetObserver)

________________CLASS________________

@android.widget.RemoteViews$RemoteView
@dalvik.annotation.MemberClasses (value =Landroid/widget/ImageView$ScaleType; )
public class android.widget.ImageView extends android.view.View

----------------FIELDS----------------

private static final android.graphics.Matrix$ScaleToFit[] sS2FArray

private static final android.widget.ImageView$ScaleType[] sScaleTypeArray

private boolean mAdjustViewBounds

private int mAlpha

private boolean mBaselineAligned

private android.graphics.ColorFilter mColorFilter

private boolean mCropToPadding

private android.graphics.Matrix mDrawMatrix

private android.graphics.drawable.Drawable mDrawable

private int mDrawableHeight

private int mDrawableWidth

private boolean mHaveFrame

private int mLevel

private android.graphics.Matrix mMatrix

private int mMaxHeight

private int mMaxWidth

private boolean mMergeState

private int mResource

private android.widget.ImageView$ScaleType mScaleType

private int[] mState

private android.graphics.RectF mTempDst

private android.graphics.RectF mTempSrc

private android.net.Uri mUri

private int mViewAlphaScale
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private void applyColorMod()

private void configureBounds()

private void initImageView()

private void resizeFromDrawable()

private int resolveAdjustedSize(
int
int
int)

private void resolveUri()

private static android.graphics.Matrix$ScaleToFit scaleTypeToScaleToFit(
android.widget.ImageView$ScaleType)

private void updateDrawable(
android.graphics.drawable.Drawable)

public final void clearColorFilter()

protected void drawableStateChanged()

public int getBaseline()

public android.graphics.drawable.Drawable getDrawable()

public android.graphics.Matrix getImageMatrix()

public android.widget.ImageView$ScaleType getScaleType()

public void invalidateDrawable(
android.graphics.drawable.Drawable)

public int[] onCreateDrawableState(
int)

protected void onDraw(
android.graphics.Canvas)

protected void onMeasure(
int
int)

protected boolean onSetAlpha(
int)

public void setAdjustViewBounds(
boolean)

public void setAlpha(
int)

public final void setColorFilter(
int
android.graphics.PorterDuff$Mode)

public void setColorFilter(
android.graphics.ColorFilter)

protected boolean setFrame(
int
int
int
int)

public void setImageBitmap(
android.graphics.Bitmap)

public void setImageDrawable(
android.graphics.drawable.Drawable)

public void setImageLevel(
int)

public void setImageMatrix(
android.graphics.Matrix)

public void setImageResource(
int)

public void setImageState(
int[]
boolean)

public void setImageURI(
android.net.Uri)

public void setMaxHeight(
int)

public void setMaxWidth(
int)

public void setScaleType(
android.widget.ImageView$ScaleType)

public void setSelected(
boolean)

protected boolean verifyDrawable(
android.graphics.drawable.Drawable)

________________CLASS________________


public class android.widget.ImageButton extends android.widget.ImageView

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

protected boolean onSetAlpha(
int)

________________CLASS________________


public class android.widget.ViewAnimator extends android.widget.FrameLayout

----------------FIELDS----------------

 boolean mAnimateFirstTime

 boolean mFirstTime

 android.view.animation.Animation mInAnimation

 android.view.animation.Animation mOutAnimation

 int mWhichChild
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

private void initViewAnimator()

public void addView(
android.view.View
int
android.view.ViewGroup$LayoutParams)

public int getBaseline()

public android.view.View getCurrentView()

public int getDisplayedChild()

public android.view.animation.Animation getInAnimation()

public android.view.animation.Animation getOutAnimation()

public void setAnimateFirstView(
boolean)

public void setDisplayedChild(
int)

public void setInAnimation(
android.content.Context
int)

public void setInAnimation(
android.view.animation.Animation)

public void setOutAnimation(
android.content.Context
int)

public void setOutAnimation(
android.view.animation.Animation)

public void showNext()

 void showOnly(
int)

public void showPrevious()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/ViewSwitcher$ViewFactory; )
public class android.widget.ViewSwitcher extends android.widget.ViewAnimator

----------------FIELDS----------------

 android.widget.ViewSwitcher$ViewFactory mFactory
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

private android.view.View obtainView()

public void addView(
android.view.View
int
android.view.ViewGroup$LayoutParams)

public android.view.View getNextView()

public void reset()

public void setFactory(
android.widget.ViewSwitcher$ViewFactory)

________________CLASS________________


public class android.widget.ImageSwitcher extends android.widget.ViewSwitcher

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void setImageDrawable(
android.graphics.drawable.Drawable)

public void setImageResource(
int)

public void setImageURI(
android.net.Uri)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16409 name =ScaleType )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/widget/ImageView$ScaleType;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/ImageView; )
public final class android.widget.ImageView$ScaleType extends java.lang.Enum

----------------FIELDS----------------

private static final android.widget.ImageView$ScaleType[] $VALUES

public static final android.widget.ImageView$ScaleType CENTER

public static final android.widget.ImageView$ScaleType CENTER_CROP

public static final android.widget.ImageView$ScaleType CENTER_INSIDE

public static final android.widget.ImageView$ScaleType FIT_CENTER

public static final android.widget.ImageView$ScaleType FIT_END

public static final android.widget.ImageView$ScaleType FIT_START

public static final android.widget.ImageView$ScaleType FIT_XY

public static final android.widget.ImageView$ScaleType MATRIX

final int nativeInt
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static android.widget.ImageView$ScaleType valueOf(
java.lang.String)

public static android.widget.ImageView$ScaleType[] values()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =LayoutParams )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/LinearLayout; )
public class android.widget.LinearLayout$LayoutParams extends android.view.ViewGroup$MarginLayoutParams

----------------FIELDS----------------
@android.view.ViewDebug$ExportedProperty (mapping =Landroid/view/ViewDebug$IntToString;:[from =255, to =NONE]Landroid/view/ViewDebug$IntToString;:[from =0, to =NONE]Landroid/view/ViewDebug$IntToString;:[from =48, to =TOP]Landroid/view/ViewDebug$IntToString;:[from =80, to =BOTTOM]Landroid/view/ViewDebug$IntToString;:[from =3, to =LEFT]Landroid/view/ViewDebug$IntToString;:[from =5, to =RIGHT]Landroid/view/ViewDebug$IntToString;:[from =16, to =CENTER_VERTICAL]Landroid/view/ViewDebug$IntToString;:[from =112, to =FILL_VERTICAL]Landroid/view/ViewDebug$IntToString;:[from =1, to =CENTER_HORIZONTAL]Landroid/view/ViewDebug$IntToString;:[from =7, to =FILL_HORIZONTAL]Landroid/view/ViewDebug$IntToString;:[from =17, to =CENTER]Landroid/view/ViewDebug$IntToString;:[from =119, to =FILL] )
public int gravity
@android.view.ViewDebug$ExportedProperty
public float weight
----------------METHODS----------------

public void <init>(
int
int)

public void <init>(
int
int
float)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.view.ViewGroup$LayoutParams)

public void <init>(
android.view.ViewGroup$MarginLayoutParams)

public java.lang.String debug(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/LinearLayout$LayoutParams; )
@android.widget.RemoteViews$RemoteView
public class android.widget.LinearLayout extends android.view.ViewGroup

----------------FIELDS----------------

public static final int HORIZONTAL

private static final int INDEX_BOTTOM

private static final int INDEX_CENTER_VERTICAL

private static final int INDEX_FILL

private static final int INDEX_TOP

public static final int VERTICAL

private static final int VERTICAL_GRAVITY_COUNT

private boolean mBaselineAligned

private int mBaselineAlignedChildIndex

private int mBaselineChildTop

private int mGravity

private int[] mMaxAscent

private int[] mMaxDescent

private int mOrientation

private int mTotalLength

private float mWeightSum
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

private void forceUniformHeight(
int
int)

private void forceUniformWidth(
int
int)

private void setChildFrame(
android.view.View
int
int
int
int)

protected boolean checkLayoutParams(
android.view.ViewGroup$LayoutParams)

protected volatile android.view.ViewGroup$LayoutParams generateDefaultLayoutParams()

protected android.widget.LinearLayout$LayoutParams generateDefaultLayoutParams()

public volatile android.view.ViewGroup$LayoutParams generateLayoutParams(
android.util.AttributeSet)

protected volatile android.view.ViewGroup$LayoutParams generateLayoutParams(
android.view.ViewGroup$LayoutParams)

public android.widget.LinearLayout$LayoutParams generateLayoutParams(
android.util.AttributeSet)

protected android.widget.LinearLayout$LayoutParams generateLayoutParams(
android.view.ViewGroup$LayoutParams)

public int getBaseline()

public int getBaselineAlignedChildIndex()

 int getChildrenSkipCount(
android.view.View
int)

 int getLocationOffset(
android.view.View)

 int getNextLocationOffset(
android.view.View)

public int getOrientation()

 android.view.View getVirtualChildAt(
int)

 int getVirtualChildCount()

public float getWeightSum()

public boolean isBaselineAligned()

 void layoutHorizontal()

 void layoutVertical()

 void measureChildBeforeLayout(
android.view.View
int
int
int
int
int)

 void measureHorizontal(
int
int)

 int measureNullChild(
int)

 void measureVertical(
int
int)

protected void onLayout(
boolean
int
int
int
int)

protected void onMeasure(
int
int)

public void setBaselineAligned(
boolean)

public void setBaselineAlignedChildIndex(
int)

public void setGravity(
int)

public void setHorizontalGravity(
int)

public void setOrientation(
int)

public void setVerticalGravity(
int)

public void setWeightSum(
float)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/ListView; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.widget.ListView$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/ListView; )
@dalvik.annotation.InnerClass (accessFlags =10 name =ArrowScrollFocusResult )
 class android.widget.ListView$ArrowScrollFocusResult extends java.lang.Object

----------------FIELDS----------------

private int mAmountToScroll

private int mSelectedPosition
----------------METHODS----------------

private void <init>()

 void <init>(
android.widget.ListView$1)

public int getAmountToScroll()

public int getSelectedPosition()

 void populate(
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =FixedViewInfo )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/ListView; )
 class android.widget.ListView$FixedViewInfo extends java.lang.Object

----------------FIELDS----------------

public java.lang.Object data

public boolean isSelectable

final android.widget.ListView this$0

public android.view.View view
----------------METHODS----------------

 void <init>(
android.widget.ListView)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/widget/ListView$SavedState;>; )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/ListView$SavedState; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.widget.ListView$SavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.widget.ListView$SavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.widget.ListView$SavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =SavedState )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/ListView; )
 class android.widget.ListView$SavedState extends android.view.View$BaseSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/widget/ListView$SavedState;>; )
public static final android.os.Parcelable$Creator CREATOR

 android.util.SparseBooleanArray checkState
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.widget.ListView$1)

 void <init>(
android.os.Parcelable
android.util.SparseBooleanArray)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/MediaController; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.widget.MediaController$1 extends java.lang.Object implements android.view.View$OnTouchListener

----------------FIELDS----------------

final android.widget.MediaController this$0
----------------METHODS----------------

 void <init>(
android.widget.MediaController)

public boolean onTouch(
android.view.View
android.view.MotionEvent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/MediaController; )
 class android.widget.MediaController$2 extends android.os.Handler

----------------FIELDS----------------

final android.widget.MediaController this$0
----------------METHODS----------------

 void <init>(
android.widget.MediaController)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/MediaController; )
 class android.widget.MediaController$3 extends java.lang.Object implements android.view.View$OnClickListener

----------------FIELDS----------------

final android.widget.MediaController this$0
----------------METHODS----------------

 void <init>(
android.widget.MediaController)

public void onClick(
android.view.View)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/MediaController; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.widget.MediaController$4 extends java.lang.Object implements android.widget.SeekBar$OnSeekBarChangeListener

----------------FIELDS----------------

 long duration

final android.widget.MediaController this$0
----------------METHODS----------------

 void <init>(
android.widget.MediaController)

public void onProgressChanged(
android.widget.SeekBar
int
boolean)

public void onStartTrackingTouch(
android.widget.SeekBar)

public void onStopTrackingTouch(
android.widget.SeekBar)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/MediaController; )
 class android.widget.MediaController$5 extends java.lang.Object implements android.view.View$OnClickListener

----------------FIELDS----------------

final android.widget.MediaController this$0
----------------METHODS----------------

 void <init>(
android.widget.MediaController)

public void onClick(
android.view.View)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/MediaController; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.widget.MediaController$6 extends java.lang.Object implements android.view.View$OnClickListener

----------------FIELDS----------------

final android.widget.MediaController this$0
----------------METHODS----------------

 void <init>(
android.widget.MediaController)

public void onClick(
android.view.View)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =MediaPlayerControl )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/MediaController; )
public abstract interface class android.widget.MediaController$MediaPlayerControl extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract int getBufferPercentage()

public abstract int getCurrentPosition()

public abstract int getDuration()

public abstract boolean isPlaying()

public abstract void pause()

public abstract void seekTo(
int)

public abstract void start()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/MediaController$MediaPlayerControl; )
public class android.widget.MediaController extends android.widget.FrameLayout

----------------FIELDS----------------

private static final int FADE_OUT

private static final int SHOW_PROGRESS

private static final int sDefaultTimeout

private android.view.View mAnchor

private android.content.Context mContext

private android.widget.TextView mCurrentTime

private android.view.View mDecor

private boolean mDragging

private android.widget.TextView mEndTime

private android.widget.ImageButton mFfwdButton

private android.view.View$OnClickListener mFfwdListener

 java.lang.StringBuilder mFormatBuilder

 java.util.Formatter mFormatter

private boolean mFromXml

private android.os.Handler mHandler

private boolean mListenersSet

private android.widget.ImageButton mNextButton

private android.view.View$OnClickListener mNextListener

private android.widget.ImageButton mPauseButton

private android.view.View$OnClickListener mPauseListener

private android.widget.MediaController$MediaPlayerControl mPlayer

private android.widget.ImageButton mPrevButton

private android.view.View$OnClickListener mPrevListener

private android.widget.ProgressBar mProgress

private android.widget.ImageButton mRewButton

private android.view.View$OnClickListener mRewListener

private android.view.View mRoot

private android.widget.SeekBar$OnSeekBarChangeListener mSeekListener

private boolean mShowing

private android.view.View$OnTouchListener mTouchListener

private boolean mUseFastForward

private android.view.Window mWindow

private android.view.WindowManager mWindowManager
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
boolean)

static boolean access$000(
android.widget.MediaController)

static int access$100(
android.widget.MediaController)

static boolean access$200(
android.widget.MediaController)

static boolean access$202(
android.widget.MediaController
boolean)

static android.widget.MediaController$MediaPlayerControl access$300(
android.widget.MediaController)

static void access$400(
android.widget.MediaController)

static android.widget.TextView access$500(
android.widget.MediaController)

static java.lang.String access$600(
android.widget.MediaController
int)

static void access$700(
android.widget.MediaController)

private void doPauseResume()

private void initControllerView(
android.view.View)

private void initFloatingWindow()

private void installPrevNextListeners()

private int setProgress()

private java.lang.String stringForTime(
int)

private void updatePausePlay()

public boolean dispatchKeyEvent(
android.view.KeyEvent)

public void hide()

public boolean isShowing()

protected android.view.View makeControllerView()

public void onFinishInflate()

public boolean onTouchEvent(
android.view.MotionEvent)

public boolean onTrackballEvent(
android.view.MotionEvent)

public void setAnchorView(
android.view.View)

public void setEnabled(
boolean)

public void setMediaPlayer(
android.widget.MediaController$MediaPlayerControl)

public void setPrevNextListeners(
android.view.View$OnClickListener
android.view.View$OnClickListener)

public void show()

public void show(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =CommaTokenizer )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/MultiAutoCompleteTextView; )
public class android.widget.MultiAutoCompleteTextView$CommaTokenizer extends java.lang.Object implements android.widget.MultiAutoCompleteTextView$Tokenizer

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public int findTokenEnd(
java.lang.CharSequence
int)

public int findTokenStart(
java.lang.CharSequence
int)

public java.lang.CharSequence terminateToken(
java.lang.CharSequence)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/MultiAutoCompleteTextView$CommaTokenizer;Landroid/widget/MultiAutoCompleteTextView$Tokenizer; )
public class android.widget.MultiAutoCompleteTextView extends android.widget.AutoCompleteTextView

----------------FIELDS----------------

private android.widget.MultiAutoCompleteTextView$Tokenizer mTokenizer
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

public boolean enoughToFilter()

 void finishInit()

protected void performFiltering(
java.lang.CharSequence
int)

protected void performFiltering(
java.lang.CharSequence
int
int
int)

public void performValidation()

protected void replaceText(
java.lang.CharSequence)

public void setTokenizer(
android.widget.MultiAutoCompleteTextView$Tokenizer)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/PopupWindow; )
@dalvik.annotation.InnerClass (accessFlags =1544 name =OnDismissListener )
abstract interface class android.widget.PopupWindow$OnDismissListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onDismiss()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/PopupWindow; )
@dalvik.annotation.InnerClass (accessFlags =2 name =PopupViewContainer )
 class android.widget.PopupWindow$PopupViewContainer extends android.widget.FrameLayout

----------------FIELDS----------------

final android.widget.PopupWindow this$0
----------------METHODS----------------

public void <init>(
android.widget.PopupWindow
android.content.Context)

public boolean dispatchKeyEvent(
android.view.KeyEvent)

protected int[] onCreateDrawableState(
int)

public boolean onTouchEvent(
android.view.MotionEvent)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/PopupWindow$PopupViewContainer;Landroid/widget/PopupWindow$OnDismissListener; )
public class android.widget.PopupWindow extends java.lang.Object

----------------FIELDS----------------

private static final int[] ABOVE_ANCHOR_STATE_SET

private static final int STATUS_BAR_HEIGHT

private boolean mAboveAnchor

private int mAnimationStyle

private android.graphics.drawable.Drawable mBackground

private android.view.View mContentView

private android.content.Context mContext

private int[] mDrawingLocation

private boolean mFocusable

private int mHeight

private boolean mIgnoreCheekPress

private boolean mIsShowing

private android.widget.PopupWindow$OnDismissListener mOnDismissListener

private android.view.View mPopupView

private int[] mRootLocation

private android.graphics.Rect mTempRect

private int mWidth
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
int
int)

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

public void <init>(
android.view.View)

public void <init>(
android.view.View
int
int)

public void <init>(
android.view.View
int
int
boolean)

static boolean access$000(
android.widget.PopupWindow)

static int[] access$100()

private android.view.WindowManager$LayoutParams createPopupLayout(
android.os.IBinder)

private boolean findDropDownPosition(
android.view.View
android.view.WindowManager$LayoutParams
int
int)

private void invokePopup(
android.view.WindowManager$LayoutParams)

private void preparePopup(
android.view.WindowManager$LayoutParams)

public void dismiss()

public int getAnimationStyle()

public android.graphics.drawable.Drawable getBackground()

public android.view.View getContentView()

public int getHeight()

public int getMaxAvailableHeight(
android.view.View)

public int getWidth()

public boolean isFocusable()

public boolean isShowing()

public void setAnimationStyle(
int)

public void setBackgroundDrawable(
android.graphics.drawable.Drawable)

public void setContentView(
android.view.View)

public void setFocusable(
boolean)

public void setHeight(
int)

public void setIgnoreCheekPress()

public void setOnDismissListener(
android.widget.PopupWindow$OnDismissListener)

public void setWidth(
int)

public void showAsDropDown(
android.view.View)

public void showAsDropDown(
android.view.View
int
int)

public void showAtLocation(
android.view.View
int
int
int)

public void update(
int
int
int
int)

public void update(
android.view.View
int
int)

public void update(
android.view.View
int
int
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =RefreshProgressRunnable )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/ProgressBar; )
 class android.widget.ProgressBar$RefreshProgressRunnable extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

private boolean mFromTouch

private int mId

private int mProgress

final android.widget.ProgressBar this$0
----------------METHODS----------------

 void <init>(
android.widget.ProgressBar
int
int
boolean)

public void run()

public void setup(
int
int
boolean)

________________CLASS________________


public class android.widget.RadioButton extends android.widget.CompoundButton

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

public void toggle()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/RadioGroup; )
 class android.widget.RadioGroup$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/RadioGroup; )
@dalvik.annotation.InnerClass (accessFlags =2 name =CheckedStateTracker )
 class android.widget.RadioGroup$CheckedStateTracker extends java.lang.Object implements android.widget.CompoundButton$OnCheckedChangeListener

----------------FIELDS----------------

final android.widget.RadioGroup this$0
----------------METHODS----------------

private void <init>(
android.widget.RadioGroup)

 void <init>(
android.widget.RadioGroup
android.widget.RadioGroup$1)

public void onCheckedChanged(
android.widget.CompoundButton
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =LayoutParams )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/RadioGroup; )
public class android.widget.RadioGroup$LayoutParams extends android.widget.LinearLayout$LayoutParams

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
int
int)

public void <init>(
int
int
float)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.view.ViewGroup$LayoutParams)

public void <init>(
android.view.ViewGroup$MarginLayoutParams)

protected void setBaseAttributes(
android.content.res.TypedArray
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnCheckedChangeListener )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/RadioGroup; )
public abstract interface class android.widget.RadioGroup$OnCheckedChangeListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onCheckedChanged(
android.widget.RadioGroup
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/RadioGroup; )
@dalvik.annotation.InnerClass (accessFlags =2 name =PassThroughHierarchyChangeListener )
 class android.widget.RadioGroup$PassThroughHierarchyChangeListener extends java.lang.Object implements android.view.ViewGroup$OnHierarchyChangeListener

----------------FIELDS----------------

private android.view.ViewGroup$OnHierarchyChangeListener mOnHierarchyChangeListener

final android.widget.RadioGroup this$0
----------------METHODS----------------

private void <init>(
android.widget.RadioGroup)

 void <init>(
android.widget.RadioGroup
android.widget.RadioGroup$1)

static android.view.ViewGroup$OnHierarchyChangeListener access$202(
android.widget.RadioGroup$PassThroughHierarchyChangeListener
android.view.ViewGroup$OnHierarchyChangeListener)

public void onChildViewAdded(
android.view.View
android.view.View)

public void onChildViewRemoved(
android.view.View
android.view.View)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/RadioGroup$1;Landroid/widget/RadioGroup$PassThroughHierarchyChangeListener;Landroid/widget/RadioGroup$CheckedStateTracker;Landroid/widget/RadioGroup$OnCheckedChangeListener;Landroid/widget/RadioGroup$LayoutParams; )
public class android.widget.RadioGroup extends android.widget.LinearLayout

----------------FIELDS----------------

private int mCheckedId

private android.widget.CompoundButton$OnCheckedChangeListener mChildOnCheckedChangeListener

private android.widget.RadioGroup$OnCheckedChangeListener mOnCheckedChangeListener

private android.widget.RadioGroup$PassThroughHierarchyChangeListener mPassThroughListener

private boolean mProtectFromCheckedChange
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

static boolean access$300(
android.widget.RadioGroup)

static boolean access$302(
android.widget.RadioGroup
boolean)

static int access$400(
android.widget.RadioGroup)

static void access$500(
android.widget.RadioGroup
int
boolean)

static void access$600(
android.widget.RadioGroup
int)

static android.widget.CompoundButton$OnCheckedChangeListener access$700(
android.widget.RadioGroup)

private void init()

private void setCheckedId(
int)

private void setCheckedStateForView(
int
boolean)

public void check(
int)

protected boolean checkLayoutParams(
android.view.ViewGroup$LayoutParams)

public void clearCheck()

protected volatile android.view.ViewGroup$LayoutParams generateDefaultLayoutParams()

protected android.widget.LinearLayout$LayoutParams generateDefaultLayoutParams()

public volatile android.view.ViewGroup$LayoutParams generateLayoutParams(
android.util.AttributeSet)

public volatile android.widget.LinearLayout$LayoutParams generateLayoutParams(
android.util.AttributeSet)

public android.widget.RadioGroup$LayoutParams generateLayoutParams(
android.util.AttributeSet)

public int getCheckedRadioButtonId()

protected void onFinishInflate()

public void setOnCheckedChangeListener(
android.widget.RadioGroup$OnCheckedChangeListener)

public void setOnHierarchyChangeListener(
android.view.ViewGroup$OnHierarchyChangeListener)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnRatingBarChangeListener )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/RatingBar; )
public abstract interface class android.widget.RatingBar$OnRatingBarChangeListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onRatingChanged(
android.widget.RatingBar
float
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/RatingBar$OnRatingBarChangeListener; )
public class android.widget.RatingBar extends android.widget.AbsSeekBar

----------------FIELDS----------------

private int mNumStars

private android.widget.RatingBar$OnRatingBarChangeListener mOnRatingBarChangeListener

private int mProgressOnStartTracking
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private float getProgressPerStar()

private void updateSecondaryProgress(
int)

 void dispatchRatingChange(
boolean)

 android.graphics.drawable.shapes.Shape getDrawableShape()

public int getNumStars()

public android.widget.RatingBar$OnRatingBarChangeListener getOnRatingBarChangeListener()

public float getRating()

public float getStepSize()

public boolean isIndicator()

protected void onMeasure(
int
int)

 void onProgressRefresh(
float
boolean)

 void onStartTrackingTouch()

 void onStopTrackingTouch()

public void setIsIndicator(
boolean)

public void setMax(
int)

public void setNumStars(
int)

public void setOnRatingBarChangeListener(
android.widget.RatingBar$OnRatingBarChangeListener)

public void setRating(
float)

public void setStepSize(
float)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/RelativeLayout; )
@dalvik.annotation.InnerClass (accessFlags =9 name =LayoutParams )
public class android.widget.RelativeLayout$LayoutParams extends android.view.ViewGroup$MarginLayoutParams

----------------FIELDS----------------

public boolean alignWithParent

private int mBottom

private int mLeft

private int mRight

private int[] mRules

private int mTop
----------------METHODS----------------

public void <init>(
int
int)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.view.ViewGroup$LayoutParams)

public void <init>(
android.view.ViewGroup$MarginLayoutParams)

static int access$000(
android.widget.RelativeLayout$LayoutParams)

static int access$002(
android.widget.RelativeLayout$LayoutParams
int)

static int access$012(
android.widget.RelativeLayout$LayoutParams
int)

static int access$100(
android.widget.RelativeLayout$LayoutParams)

static int access$102(
android.widget.RelativeLayout$LayoutParams
int)

static int access$112(
android.widget.RelativeLayout$LayoutParams
int)

static int access$200(
android.widget.RelativeLayout$LayoutParams)

static int access$202(
android.widget.RelativeLayout$LayoutParams
int)

static int access$212(
android.widget.RelativeLayout$LayoutParams
int)

static int access$300(
android.widget.RelativeLayout$LayoutParams)

static int access$302(
android.widget.RelativeLayout$LayoutParams
int)

static int access$312(
android.widget.RelativeLayout$LayoutParams
int)

public void addRule(
int)

public void addRule(
int
int)

public java.lang.String debug(
java.lang.String)

public int[] getRules()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/RemoteViews; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/widget/RemoteViews;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.widget.RemoteViews$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.widget.RemoteViews createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.widget.RemoteViews[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1034 name =Action )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/RemoteViews; )
abstract class android.widget.RemoteViews$Action extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

 void <init>(
android.widget.RemoteViews$1)
@dalvik.annotation.Throws (value =Landroid/widget/RemoteViews$ActionException; )
public abstract void apply(
android.view.View)

public int describeContents()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =ActionException )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/RemoteViews; )
public class android.widget.RemoteViews$ActionException extends java.lang.RuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________

@java.lang.annotation.Retention (value =Ljava/lang/annotation/RetentionPolicy;!RUNTIME )
@java.lang.annotation.Target (value =Ljava/lang/annotation/ElementType;!TYPE )
@dalvik.annotation.InnerClass (accessFlags =9737 name =RemoteView )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/RemoteViews; )
public abstract interface class android.widget.RemoteViews$RemoteView extends java.lang.Object implements java.lang.annotation.Annotation

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =SetChronometer )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/RemoteViews; )
 class android.widget.RemoteViews$SetChronometer extends android.widget.RemoteViews$Action

----------------FIELDS----------------

public static final int TAG

 long base

 java.lang.String format

 boolean running

final android.widget.RemoteViews this$0

 int viewId
----------------METHODS----------------

public void <init>(
android.widget.RemoteViews
int
long
java.lang.String
boolean)

public void <init>(
android.widget.RemoteViews
android.os.Parcel)

public void apply(
android.view.View)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/RemoteViews; )
@dalvik.annotation.InnerClass (accessFlags =2 name =SetImageViewResource )
 class android.widget.RemoteViews$SetImageViewResource extends android.widget.RemoteViews$Action

----------------FIELDS----------------

public static final int TAG

 int srcId

final android.widget.RemoteViews this$0

 int viewId
----------------METHODS----------------

public void <init>(
android.widget.RemoteViews
int
int)

public void <init>(
android.widget.RemoteViews
android.os.Parcel)

public void apply(
android.view.View)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =SetImageViewUri )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/RemoteViews; )
 class android.widget.RemoteViews$SetImageViewUri extends android.widget.RemoteViews$Action

----------------FIELDS----------------

public static final int TAG

final android.widget.RemoteViews this$0

 android.net.Uri uri

 int viewId
----------------METHODS----------------

public void <init>(
android.widget.RemoteViews
int
android.net.Uri)

public void <init>(
android.widget.RemoteViews
android.os.Parcel)

public void apply(
android.view.View)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =SetProgressBar )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/RemoteViews; )
 class android.widget.RemoteViews$SetProgressBar extends android.widget.RemoteViews$Action

----------------FIELDS----------------

public static final int TAG

 boolean indeterminate

 int max

 int progress

final android.widget.RemoteViews this$0

 int viewId
----------------METHODS----------------

public void <init>(
android.widget.RemoteViews
int
int
int
boolean)

public void <init>(
android.widget.RemoteViews
android.os.Parcel)

public void apply(
android.view.View)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =SetTextViewText )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/RemoteViews; )
 class android.widget.RemoteViews$SetTextViewText extends android.widget.RemoteViews$Action

----------------FIELDS----------------

public static final int TAG

 java.lang.CharSequence text

final android.widget.RemoteViews this$0

 int viewId
----------------METHODS----------------

public void <init>(
android.widget.RemoteViews
int
java.lang.CharSequence)

public void <init>(
android.widget.RemoteViews
android.os.Parcel)

public void apply(
android.view.View)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/RemoteViews; )
@dalvik.annotation.InnerClass (accessFlags =2 name =SetViewVisibility )
 class android.widget.RemoteViews$SetViewVisibility extends android.widget.RemoteViews$Action

----------------FIELDS----------------

public static final int TAG

final android.widget.RemoteViews this$0

private int viewId

private int visibility
----------------METHODS----------------

public void <init>(
android.widget.RemoteViews
int
int)

public void <init>(
android.widget.RemoteViews
android.os.Parcel)

public void apply(
android.view.View)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/RemoteViews$SetProgressBar;Landroid/widget/RemoteViews$SetChronometer;Landroid/widget/RemoteViews$SetImageViewUri;Landroid/widget/RemoteViews$SetImageViewResource;Landroid/widget/RemoteViews$SetTextViewText;Landroid/widget/RemoteViews$SetViewVisibility;Landroid/widget/RemoteViews$Action;Landroid/widget/RemoteViews$ActionException;Landroid/widget/RemoteViews$RemoteView; )
public class android.widget.RemoteViews extends java.lang.Object implements android.os.Parcelable, android.view.LayoutInflater$Filter

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/widget/RemoteViews;>; )
public static final android.os.Parcelable$Creator CREATOR

private static final java.lang.String LOG_TAG
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/widget/RemoteViews$Action;>; )
private java.util.ArrayList mActions

private android.content.Context mContext

private int mLayoutId

private java.lang.String mPackage
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.os.Parcel)

public void <init>(
java.lang.String
int)

static android.content.Context access$100(
android.widget.RemoteViews)

private void addAction(
android.widget.RemoteViews$Action)

private void performApply(
android.view.View)

private android.content.Context prepareContext(
android.content.Context)

public android.view.View apply(
android.content.Context
android.view.ViewGroup)

public int describeContents()

public int getLayoutId()

public java.lang.String getPackage()

public boolean onLoadClass(
java.lang.Class)

public void reapply(
android.content.Context
android.view.View)

public void setChronometer(
int
long
java.lang.String
boolean)

public void setImageViewResource(
int
int)

public void setImageViewUri(
int
android.net.Uri)

public void setProgressBar(
int
int
int
boolean)

public void setTextViewText(
int
java.lang.CharSequence)

public void setViewVisibility(
int
int)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public abstract class android.widget.ResourceCursorTreeAdapter extends android.widget.CursorTreeAdapter

----------------FIELDS----------------

private int mChildLayout

private int mCollapsedGroupLayout

private int mExpandedGroupLayout

private android.view.LayoutInflater mInflater

private int mLastChildLayout
----------------METHODS----------------

public void <init>(
android.content.Context
android.database.Cursor
int
int)

public void <init>(
android.content.Context
android.database.Cursor
int
int
int)

public void <init>(
android.content.Context
android.database.Cursor
int
int
int
int)

public android.view.View newChildView(
android.content.Context
android.database.Cursor
boolean
android.view.ViewGroup)

public android.view.View newGroupView(
android.content.Context
android.database.Cursor
boolean
android.view.ViewGroup)

________________CLASS________________


public class android.widget.ScrollBarDrawable extends android.graphics.drawable.Drawable

----------------FIELDS----------------

private boolean mAlwaysDrawHorizontalTrack

private boolean mAlwaysDrawVerticalTrack

private boolean mChanged

private int mExtent

private android.graphics.drawable.Drawable mHorizontalThumb

private android.graphics.drawable.Drawable mHorizontalTrack

private int mOffset

private int mRange

private boolean mRangeChanged

private final android.graphics.Rect mTempBounds

private boolean mVertical

private android.graphics.drawable.Drawable mVerticalThumb

private android.graphics.drawable.Drawable mVerticalTrack
----------------METHODS----------------

public void <init>()

public void draw(
android.graphics.Canvas)

protected void drawThumb(
android.graphics.Canvas
android.graphics.Rect
int
int
boolean)

protected void drawTrack(
android.graphics.Canvas
android.graphics.Rect
boolean)

public boolean getAlwaysDrawHorizontalTrack()

public boolean getAlwaysDrawVerticalTrack()

public int getOpacity()

public int getSize(
boolean)

protected void onBoundsChange(
android.graphics.Rect)

public void setAlpha(
int)

public void setAlwaysDrawHorizontalTrack(
boolean)

public void setAlwaysDrawVerticalTrack(
boolean)

public void setColorFilter(
android.graphics.ColorFilter)

public void setHorizontalThumbDrawable(
android.graphics.drawable.Drawable)

public void setHorizontalTrackDrawable(
android.graphics.drawable.Drawable)

public void setParameters(
int
int
int
boolean)

public void setVerticalThumbDrawable(
android.graphics.drawable.Drawable)

public void setVerticalTrackDrawable(
android.graphics.drawable.Drawable)

public java.lang.String toString()

________________CLASS________________


public class android.widget.ScrollView extends android.widget.FrameLayout

----------------FIELDS----------------

private static final int ANIMATED_SCROLL_GAP

private static final float MAX_SCROLL_FACTOR

private android.view.View mChildToScrollTo

private boolean mFillViewport

private boolean mIsBeingDragged

private boolean mIsLayoutDirty

private float mLastMotionY

private long mLastScroll

private boolean mScrollViewMovedFocus

private android.widget.Scroller mScroller

private boolean mSmoothScrollingEnabled

private final android.graphics.Rect mTempRect

private android.view.VelocityTracker mVelocityTracker
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private boolean canScroll()

private int clamp(
int
int
int)

private void doScrollY(
int)

private android.view.View findFocusableViewInBounds(
boolean
int
int)

private android.view.View findFocusableViewInMyBounds(
boolean
int
android.view.View)

private void initScrollView()

private boolean isOffScreen(
android.view.View)

private boolean isViewDescendantOf(
android.view.View
android.view.View)

private boolean isWithinDeltaOfScreen(
android.view.View
int)

private boolean scrollAndFocus(
int
int
int)

private void scrollToChild(
android.view.View)

private boolean scrollToChildRect(
android.graphics.Rect
boolean)

public void addView(
android.view.View)

public void addView(
android.view.View
int)

public void addView(
android.view.View
int
android.view.ViewGroup$LayoutParams)

public void addView(
android.view.View
android.view.ViewGroup$LayoutParams)

public boolean arrowScroll(
int)

public void computeScroll()

protected int computeScrollDeltaToGetChildRectOnScreen(
android.graphics.Rect)

protected int computeVerticalScrollRange()

public boolean dispatchKeyEvent(
android.view.KeyEvent)

public boolean executeKeyEvent(
android.view.KeyEvent)

public void fling(
int)

public boolean fullScroll(
int)

protected float getBottomFadingEdgeStrength()

public int getMaxScrollAmount()

protected float getTopFadingEdgeStrength()

public boolean isFillViewport()

public boolean isSmoothScrollingEnabled()

protected void measureChild(
android.view.View
int
int)

protected void measureChildWithMargins(
android.view.View
int
int
int
int)

public boolean onInterceptTouchEvent(
android.view.MotionEvent)

protected void onLayout(
boolean
int
int
int
int)

protected void onMeasure(
int
int)

protected boolean onRequestFocusInDescendants(
int
android.graphics.Rect)

public boolean onTouchEvent(
android.view.MotionEvent)

public boolean pageScroll(
int)

public void requestChildFocus(
android.view.View
android.view.View)

public boolean requestChildRectangleOnScreen(
android.view.View
android.graphics.Rect
boolean)

public void requestLayout()

public void scrollTo(
int
int)

public void setFillViewport(
boolean)

public void setSmoothScrollingEnabled(
boolean)

public final void smoothScrollBy(
int
int)

public final void smoothScrollTo(
int
int)

________________CLASS________________


public class android.widget.Scroller extends java.lang.Object

----------------FIELDS----------------

private static final int DEFAULT_DURATION

private static final int FLING_MODE

private static final int SCROLL_MODE

private float mCoeffX

private float mCoeffY

private int mCurrX

private int mCurrY

private final float mDeceleration

private float mDeltaX

private float mDeltaY

private int mDuration

private float mDurationReciprocal

private int mFinalX

private int mFinalY

private boolean mFinished

private android.view.animation.Interpolator mInterpolator

private int mMaxX

private int mMaxY

private int mMinX

private int mMinY

private int mMode

private long mStartTime

private int mStartX

private int mStartY

private float mVelocity

private float mViscousFluidNormalize

private float mViscousFluidScale
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.view.animation.Interpolator)

private float viscousFluid(
float)

public void abortAnimation()

public boolean computeScrollOffset()

public void extendDuration(
int)

public void fling(
int
int
int
int
int
int
int
int)

public final void forceFinished(
boolean)

public final int getCurrX()

public final int getCurrY()

public final int getDuration()

public final int getFinalX()

public final int getFinalY()

public final boolean isFinished()

public void setFinalX(
int)

public void setFinalY(
int)

public void startScroll(
int
int
int
int)

public void startScroll(
int
int
int
int
int)

public int timePassed()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/SeekBar$OnSeekBarChangeListener; )
public class android.widget.SeekBar extends android.widget.AbsSeekBar

----------------FIELDS----------------

private android.widget.SeekBar$OnSeekBarChangeListener mOnSeekBarChangeListener
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

 void onProgressRefresh(
float
boolean)

 void onStartTrackingTouch()

 void onStopTrackingTouch()

public void setOnSeekBarChangeListener(
android.widget.SeekBar$OnSeekBarChangeListener)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/SimpleAdapter; )
 class android.widget.SimpleAdapter$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/SimpleAdapter; )
@dalvik.annotation.InnerClass (accessFlags =2 name =SimpleFilter )
 class android.widget.SimpleAdapter$SimpleFilter extends android.widget.Filter

----------------FIELDS----------------

final android.widget.SimpleAdapter this$0
----------------METHODS----------------

private void <init>(
android.widget.SimpleAdapter)

 void <init>(
android.widget.SimpleAdapter
android.widget.SimpleAdapter$1)

protected android.widget.Filter$FilterResults performFiltering(
java.lang.CharSequence)

protected void publishResults(
java.lang.CharSequence
android.widget.Filter$FilterResults)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/SimpleAdapter; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ViewBinder )
public abstract interface class android.widget.SimpleAdapter$ViewBinder extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean setViewValue(
android.view.View
java.lang.Object
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/SimpleAdapter$1;Landroid/widget/SimpleAdapter$SimpleFilter;Landroid/widget/SimpleAdapter$ViewBinder; )
public class android.widget.SimpleAdapter extends android.widget.BaseAdapter implements android.widget.Filterable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/List<+Ljava/util/Map<Ljava/lang/String;*>;>; )
private java.util.List mData

private int mDropDownResource

private android.widget.SimpleAdapter$SimpleFilter mFilter

private java.lang.String[] mFrom

private android.view.LayoutInflater mInflater

private int mResource

private int[] mTo
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/util/Map<Ljava/lang/String;*>;>; )
private java.util.ArrayList mUnfilteredData

private android.widget.SimpleAdapter$ViewBinder mViewBinder
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Landroid/content/Context;Ljava/util/List<+Ljava/util/Map<Ljava/lang/String;*>;>;I[Ljava/lang/String;[I)V )
public void <init>(
android.content.Context
java.util.List
int
java.lang.String[]
int[])

static java.util.ArrayList access$100(
android.widget.SimpleAdapter)

static java.util.ArrayList access$102(
android.widget.SimpleAdapter
java.util.ArrayList)

static java.util.List access$200(
android.widget.SimpleAdapter)

static java.util.List access$202(
android.widget.SimpleAdapter
java.util.List)

static int[] access$300(
android.widget.SimpleAdapter)

static java.lang.String[] access$400(
android.widget.SimpleAdapter)

private void bindView(
int
android.view.View)

private android.view.View createViewFromResource(
int
android.view.View
android.view.ViewGroup
int)

public int getCount()

public android.view.View getDropDownView(
int
android.view.View
android.view.ViewGroup)

public android.widget.Filter getFilter()

public java.lang.Object getItem(
int)

public long getItemId(
int)

public android.view.View getView(
int
android.view.View
android.view.ViewGroup)

public android.widget.SimpleAdapter$ViewBinder getViewBinder()

public void setDropDownViewResource(
int)

public void setViewBinder(
android.widget.SimpleAdapter$ViewBinder)

public void setViewImage(
android.widget.ImageView
int)

public void setViewImage(
android.widget.ImageView
java.lang.String)

public void setViewText(
android.widget.TextView
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =CursorToStringConverter )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/SimpleCursorAdapter; )
public abstract interface class android.widget.SimpleCursorAdapter$CursorToStringConverter extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.lang.CharSequence convertToString(
android.database.Cursor)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/SimpleCursorAdapter; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ViewBinder )
public abstract interface class android.widget.SimpleCursorAdapter$ViewBinder extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean setViewValue(
android.view.View
android.database.Cursor
int)

________________CLASS________________


public abstract class android.widget.SimpleCursorTreeAdapter extends android.widget.ResourceCursorTreeAdapter

----------------FIELDS----------------

private int[] mChildFrom

private int[] mChildTo

private int[] mGroupFrom

private int[] mGroupTo
----------------METHODS----------------

public void <init>(
android.content.Context
android.database.Cursor
int
int
java.lang.String[]
int[]
int
int
java.lang.String[]
int[])

public void <init>(
android.content.Context
android.database.Cursor
int
int
java.lang.String[]
int[]
int
java.lang.String[]
int[])

public void <init>(
android.content.Context
android.database.Cursor
int
java.lang.String[]
int[]
int
java.lang.String[]
int[])

private void bindView(
android.view.View
android.content.Context
android.database.Cursor
int[]
int[])

private void init(
java.lang.String[]
int[]
java.lang.String[]
int[])

private void initChildrenFromColumns(
java.lang.String[]
android.database.Cursor)

private void initFromColumns(
android.database.Cursor
java.lang.String[]
int[])

private void initGroupFromColumns(
java.lang.String[])

protected void bindChildView(
android.view.View
android.content.Context
android.database.Cursor
boolean)

protected void bindGroupView(
android.view.View
android.content.Context
android.database.Cursor
boolean)

protected void setViewImage(
android.widget.ImageView
java.lang.String)

________________CLASS________________


public class android.widget.SimpleExpandableListAdapter extends android.widget.BaseExpandableListAdapter

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/List<+Ljava/util/List<+Ljava/util/Map<Ljava/lang/String;*>;>;>; )
private java.util.List mChildData

private java.lang.String[] mChildFrom

private int mChildLayout

private int[] mChildTo

private int mCollapsedGroupLayout

private int mExpandedGroupLayout
@dalvik.annotation.Signature (value =Ljava/util/List<+Ljava/util/Map<Ljava/lang/String;*>;>; )
private java.util.List mGroupData

private java.lang.String[] mGroupFrom

private int[] mGroupTo

private android.view.LayoutInflater mInflater

private int mLastChildLayout
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Landroid/content/Context;Ljava/util/List<+Ljava/util/Map<Ljava/lang/String;*>;>;II[Ljava/lang/String;[ILjava/util/List<+Ljava/util/List<+Ljava/util/Map<Ljava/lang/String;*>;>;>;II[Ljava/lang/String;[I)V )
public void <init>(
android.content.Context
java.util.List
int
int
java.lang.String[]
int[]
java.util.List
int
int
java.lang.String[]
int[])
@dalvik.annotation.Signature (value =(Landroid/content/Context;Ljava/util/List<+Ljava/util/Map<Ljava/lang/String;*>;>;II[Ljava/lang/String;[ILjava/util/List<+Ljava/util/List<+Ljava/util/Map<Ljava/lang/String;*>;>;>;I[Ljava/lang/String;[I)V )
public void <init>(
android.content.Context
java.util.List
int
int
java.lang.String[]
int[]
java.util.List
int
java.lang.String[]
int[])
@dalvik.annotation.Signature (value =(Landroid/content/Context;Ljava/util/List<+Ljava/util/Map<Ljava/lang/String;*>;>;I[Ljava/lang/String;[ILjava/util/List<+Ljava/util/List<+Ljava/util/Map<Ljava/lang/String;*>;>;>;I[Ljava/lang/String;[I)V )
public void <init>(
android.content.Context
java.util.List
int
java.lang.String[]
int[]
java.util.List
int
java.lang.String[]
int[])
@dalvik.annotation.Signature (value =(Landroid/view/View;Ljava/util/Map<Ljava/lang/String;*>;[Ljava/lang/String;[I)V )
private void bindView(
android.view.View
java.util.Map
java.lang.String[]
int[])

public java.lang.Object getChild(
int
int)

public long getChildId(
int
int)

public android.view.View getChildView(
int
int
boolean
android.view.View
android.view.ViewGroup)

public int getChildrenCount(
int)

public java.lang.Object getGroup(
int)

public int getGroupCount()

public long getGroupId(
int)

public android.view.View getGroupView(
int
boolean
android.view.View
android.view.ViewGroup)

public boolean hasStableIds()

public boolean isChildSelectable(
int
int)

public android.view.View newChildView(
boolean
android.view.ViewGroup)

public android.view.View newGroupView(
boolean
android.view.ViewGroup)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/Spinner; )
@dalvik.annotation.InnerClass (accessFlags =10 name =DropDownAdapter )
 class android.widget.Spinner$DropDownAdapter extends java.lang.Object implements android.widget.ListAdapter, android.widget.SpinnerAdapter

----------------FIELDS----------------

private android.widget.SpinnerAdapter mAdapter
----------------METHODS----------------

public void <init>(
android.widget.SpinnerAdapter)

public boolean areAllItemsEnabled()

public int getCount()

public android.view.View getDropDownView(
int
android.view.View
android.view.ViewGroup)

public java.lang.Object getItem(
int)

public long getItemId(
int)

public int getItemViewType(
int)

public android.view.View getView(
int
android.view.View
android.view.ViewGroup)

public int getViewTypeCount()

public boolean hasStableIds()

public boolean isEmpty()

public boolean isEnabled(
int)

public void registerDataSetObserver(
android.database.DataSetObserver)

public void unregisterDataSetObserver(
android.database.DataSetObserver)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/Spinner$DropDownAdapter; )
public class android.widget.Spinner extends android.widget.AbsSpinner implements android.content.DialogInterface$OnClickListener

----------------FIELDS----------------

private java.lang.CharSequence mPrompt
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private android.view.View makeAndAddView(
int)

private void setUpChild(
android.view.View)

public int getBaseline()

public java.lang.CharSequence getPrompt()

 void layout(
int
boolean)

public void onClick(
android.content.DialogInterface
int)

protected void onLayout(
boolean
int
int
int
int)

public boolean performClick()

public void setOnItemClickListener(
android.widget.AdapterView$OnItemClickListener)

public void setPrompt(
java.lang.CharSequence)

public void setPromptId(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.widget.TabHost$1 extends java.lang.Object implements android.view.View$OnKeyListener

----------------FIELDS----------------

final android.widget.TabHost this$0
----------------METHODS----------------

 void <init>(
android.widget.TabHost)

public boolean onKey(
android.view.View
int
android.view.KeyEvent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TabWidget; )
@dalvik.annotation.InnerClass (accessFlags =1544 name =OnTabSelectionChanged )
abstract interface class android.widget.TabWidget$OnTabSelectionChanged extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onTabSelectionChanged(
int
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.widget.TabHost$2 extends java.lang.Object implements android.widget.TabWidget$OnTabSelectionChanged

----------------FIELDS----------------

final android.widget.TabHost this$0
----------------METHODS----------------

 void <init>(
android.widget.TabHost)

public void onTabSelectionChanged(
int
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TabHost; )
@dalvik.annotation.InnerClass (accessFlags =1546 name =ContentStrategy )
abstract interface class android.widget.TabHost$ContentStrategy extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.view.View getContentView()

public abstract void tabClosed()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =FactoryContentStrategy )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/TabHost; )
 class android.widget.TabHost$FactoryContentStrategy extends java.lang.Object implements android.widget.TabHost$ContentStrategy

----------------FIELDS----------------

private android.widget.TabHost$TabContentFactory mFactory

private android.view.View mTabContent

private final java.lang.CharSequence mTag

final android.widget.TabHost this$0
----------------METHODS----------------

public void <init>(
android.widget.TabHost
java.lang.CharSequence
android.widget.TabHost$TabContentFactory)

public android.view.View getContentView()

public void tabClosed()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TabHost; )
@dalvik.annotation.InnerClass (accessFlags =1546 name =IndicatorStrategy )
abstract interface class android.widget.TabHost$IndicatorStrategy extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.view.View createIndicatorView()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TabHost; )
@dalvik.annotation.InnerClass (accessFlags =2 name =IntentContentStrategy )
 class android.widget.TabHost$IntentContentStrategy extends java.lang.Object implements android.widget.TabHost$ContentStrategy

----------------FIELDS----------------

private final android.content.Intent mIntent

private android.view.View mLaunchedView

private final java.lang.String mTag

final android.widget.TabHost this$0
----------------METHODS----------------

private void <init>(
android.widget.TabHost
java.lang.String
android.content.Intent)

 void <init>(
android.widget.TabHost
java.lang.String
android.content.Intent
android.widget.TabHost$1)

public android.view.View getContentView()

public void tabClosed()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =LabelAndIconIndicatorStategy )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/TabHost; )
 class android.widget.TabHost$LabelAndIconIndicatorStategy extends java.lang.Object implements android.widget.TabHost$IndicatorStrategy

----------------FIELDS----------------

private final android.graphics.drawable.Drawable mIcon

private final java.lang.CharSequence mLabel

final android.widget.TabHost this$0
----------------METHODS----------------

private void <init>(
android.widget.TabHost
java.lang.CharSequence
android.graphics.drawable.Drawable)

 void <init>(
android.widget.TabHost
java.lang.CharSequence
android.graphics.drawable.Drawable
android.widget.TabHost$1)

public android.view.View createIndicatorView()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TabHost; )
@dalvik.annotation.InnerClass (accessFlags =2 name =LabelIndicatorStrategy )
 class android.widget.TabHost$LabelIndicatorStrategy extends java.lang.Object implements android.widget.TabHost$IndicatorStrategy

----------------FIELDS----------------

private final java.lang.CharSequence mLabel

final android.widget.TabHost this$0
----------------METHODS----------------

private void <init>(
android.widget.TabHost
java.lang.CharSequence)

 void <init>(
android.widget.TabHost
java.lang.CharSequence
android.widget.TabHost$1)

public android.view.View createIndicatorView()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TabHost; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnTabChangeListener )
public abstract interface class android.widget.TabHost$OnTabChangeListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onTabChanged(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TabHost; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =TabContentFactory )
public abstract interface class android.widget.TabHost$TabContentFactory extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.view.View createTabContent(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1 name =TabSpec )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/TabHost; )
public class android.widget.TabHost$TabSpec extends java.lang.Object

----------------FIELDS----------------

private android.widget.TabHost$ContentStrategy mContentStrategy

private android.widget.TabHost$IndicatorStrategy mIndicatorStrategy

private java.lang.String mTag

final android.widget.TabHost this$0
----------------METHODS----------------

private void <init>(
android.widget.TabHost
java.lang.String)

 void <init>(
android.widget.TabHost
java.lang.String
android.widget.TabHost$1)

static android.widget.TabHost$IndicatorStrategy access$200(
android.widget.TabHost$TabSpec)

static android.widget.TabHost$ContentStrategy access$300(
android.widget.TabHost$TabSpec)

 java.lang.String getTag()

public android.widget.TabHost$TabSpec setContent(
int)

public android.widget.TabHost$TabSpec setContent(
android.content.Intent)

public android.widget.TabHost$TabSpec setContent(
android.widget.TabHost$TabContentFactory)

public android.widget.TabHost$TabSpec setIndicator(
java.lang.CharSequence)

public android.widget.TabHost$TabSpec setIndicator(
java.lang.CharSequence
android.graphics.drawable.Drawable)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TabHost; )
@dalvik.annotation.InnerClass (accessFlags =2 name =ViewIdContentStrategy )
 class android.widget.TabHost$ViewIdContentStrategy extends java.lang.Object implements android.widget.TabHost$ContentStrategy

----------------FIELDS----------------

private final android.view.View mView

final android.widget.TabHost this$0
----------------METHODS----------------

private void <init>(
android.widget.TabHost
int)

 void <init>(
android.widget.TabHost
int
android.widget.TabHost$1)

public android.view.View getContentView()

public void tabClosed()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/TabHost$IntentContentStrategy;Landroid/widget/TabHost$FactoryContentStrategy;Landroid/widget/TabHost$ViewIdContentStrategy;Landroid/widget/TabHost$LabelAndIconIndicatorStategy;Landroid/widget/TabHost$LabelIndicatorStrategy;Landroid/widget/TabHost$ContentStrategy;Landroid/widget/TabHost$IndicatorStrategy;Landroid/widget/TabHost$TabSpec;Landroid/widget/TabHost$TabContentFactory;Landroid/widget/TabHost$OnTabChangeListener; )
public class android.widget.TabHost extends android.widget.FrameLayout implements android.view.ViewTreeObserver$OnTouchModeChangeListener

----------------FIELDS----------------

protected int mCurrentTab

private android.view.View mCurrentView

protected android.app.LocalActivityManager mLocalActivityManager

private android.widget.TabHost$OnTabChangeListener mOnTabChangeListener

private android.widget.FrameLayout mTabContent

private android.view.View$OnKeyListener mTabKeyListener
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/widget/TabHost$TabSpec;>; )
private java.util.List mTabSpecs

private android.widget.TabWidget mTabWidget
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

static android.widget.FrameLayout access$100(
android.widget.TabHost)

static android.widget.TabWidget access$800(
android.widget.TabHost)

private final void initTabHost()

private void invokeOnTabChangeListener()

public void addTab(
android.widget.TabHost$TabSpec)

public void clearAllTabs()

public boolean dispatchKeyEvent(
android.view.KeyEvent)

public void dispatchWindowFocusChanged(
boolean)

public int getCurrentTab()

public java.lang.String getCurrentTabTag()

public android.view.View getCurrentTabView()

public android.view.View getCurrentView()

public android.widget.FrameLayout getTabContentView()

public android.widget.TabWidget getTabWidget()

public android.widget.TabHost$TabSpec newTabSpec(
java.lang.String)

protected void onAttachedToWindow()

protected void onDetachedFromWindow()

public void onTouchModeChanged(
boolean)

public void setCurrentTab(
int)

public void setCurrentTabByTag(
java.lang.String)

public void setOnTabChangedListener(
android.widget.TabHost$OnTabChangeListener)

public void setup()

public void setup(
android.app.LocalActivityManager)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/TabWidget; )
 class android.widget.TabWidget$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TabWidget; )
@dalvik.annotation.InnerClass (accessFlags =2 name =TabClickListener )
 class android.widget.TabWidget$TabClickListener extends java.lang.Object implements android.view.View$OnClickListener

----------------FIELDS----------------

private final int mTabIndex

final android.widget.TabWidget this$0
----------------METHODS----------------

private void <init>(
android.widget.TabWidget
int)

 void <init>(
android.widget.TabWidget
int
android.widget.TabWidget$1)

public void onClick(
android.view.View)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/TabWidget$1;Landroid/widget/TabWidget$OnTabSelectionChanged;Landroid/widget/TabWidget$TabClickListener; )
public class android.widget.TabWidget extends android.widget.LinearLayout implements android.view.View$OnFocusChangeListener

----------------FIELDS----------------

private android.graphics.drawable.Drawable mBottomLeftStrip

private android.graphics.drawable.Drawable mBottomRightStrip

private int mSelectedTab

private android.widget.TabWidget$OnTabSelectionChanged mSelectionChangedListener

private boolean mStripMoved
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static android.widget.TabWidget$OnTabSelectionChanged access$100(
android.widget.TabWidget)

private void initTabWidget()

public void addView(
android.view.View)

public void childDrawableStateChanged(
android.view.View)

public void dispatchDraw(
android.graphics.Canvas)

public void focusCurrentTab(
int)

public void onFocusChange(
android.view.View
boolean)

protected void onSizeChanged(
int
int
int
int)

public void setCurrentTab(
int)

public void setEnabled(
boolean)

 void setTabSelectionListener(
android.widget.TabWidget$OnTabSelectionChanged)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/TableLayout; )
 class android.widget.TableLayout$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =LayoutParams )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/TableLayout; )
public class android.widget.TableLayout$LayoutParams extends android.widget.LinearLayout$LayoutParams

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
int
int)

public void <init>(
int
int
float)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.view.ViewGroup$LayoutParams)

public void <init>(
android.view.ViewGroup$MarginLayoutParams)

protected void setBaseAttributes(
android.content.res.TypedArray
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =PassThroughHierarchyChangeListener )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/TableLayout; )
 class android.widget.TableLayout$PassThroughHierarchyChangeListener extends java.lang.Object implements android.view.ViewGroup$OnHierarchyChangeListener

----------------FIELDS----------------

private android.view.ViewGroup$OnHierarchyChangeListener mOnHierarchyChangeListener

final android.widget.TableLayout this$0
----------------METHODS----------------

private void <init>(
android.widget.TableLayout)

 void <init>(
android.widget.TableLayout
android.widget.TableLayout$1)

static android.view.ViewGroup$OnHierarchyChangeListener access$102(
android.widget.TableLayout$PassThroughHierarchyChangeListener
android.view.ViewGroup$OnHierarchyChangeListener)

public void onChildViewAdded(
android.view.View
android.view.View)

public void onChildViewRemoved(
android.view.View
android.view.View)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/TableLayout$1;Landroid/widget/TableLayout$PassThroughHierarchyChangeListener;Landroid/widget/TableLayout$LayoutParams; )
public class android.widget.TableLayout extends android.widget.LinearLayout

----------------FIELDS----------------

private android.util.SparseBooleanArray mCollapsedColumns

private boolean mInitialized

private int[] mMaxWidths

private android.widget.TableLayout$PassThroughHierarchyChangeListener mPassThroughListener

private boolean mShrinkAllColumns

private android.util.SparseBooleanArray mShrinkableColumns

private boolean mStretchAllColumns

private android.util.SparseBooleanArray mStretchableColumns
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

static void access$200(
android.widget.TableLayout
android.view.View)

private void findLargestCells(
int)

private void initTableLayout()

private void mutateColumnsWidth(
android.util.SparseBooleanArray
boolean
int
int)

private static android.util.SparseBooleanArray parseColumns(
java.lang.String)

private void requestRowsLayout()

private void shrinkAndStretchColumns(
int)

private void trackCollapsedColumns(
android.view.View)

public void addView(
android.view.View)

public void addView(
android.view.View
int)

public void addView(
android.view.View
int
android.view.ViewGroup$LayoutParams)

public void addView(
android.view.View
android.view.ViewGroup$LayoutParams)

protected boolean checkLayoutParams(
android.view.ViewGroup$LayoutParams)

protected volatile android.view.ViewGroup$LayoutParams generateDefaultLayoutParams()

protected android.widget.LinearLayout$LayoutParams generateDefaultLayoutParams()

public volatile android.view.ViewGroup$LayoutParams generateLayoutParams(
android.util.AttributeSet)

protected volatile android.view.ViewGroup$LayoutParams generateLayoutParams(
android.view.ViewGroup$LayoutParams)

public volatile android.widget.LinearLayout$LayoutParams generateLayoutParams(
android.util.AttributeSet)

protected android.widget.LinearLayout$LayoutParams generateLayoutParams(
android.view.ViewGroup$LayoutParams)

public android.widget.TableLayout$LayoutParams generateLayoutParams(
android.util.AttributeSet)

public boolean isColumnCollapsed(
int)

public boolean isColumnShrinkable(
int)

public boolean isColumnStretchable(
int)

public boolean isShrinkAllColumns()

public boolean isStretchAllColumns()

 void measureChildBeforeLayout(
android.view.View
int
int
int
int
int)

 void measureVertical(
int
int)

protected void onLayout(
boolean
int
int
int
int)

protected void onMeasure(
int
int)

public void requestLayout()

public void setColumnCollapsed(
int
boolean)

public void setColumnShrinkable(
int
boolean)

public void setColumnStretchable(
int
boolean)

public void setOnHierarchyChangeListener(
android.view.ViewGroup$OnHierarchyChangeListener)

public void setShrinkAllColumns(
boolean)

public void setStretchAllColumns(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/TableRow; )
 class android.widget.TableRow$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TableRow; )
@dalvik.annotation.InnerClass (accessFlags =2 name =ChildrenTracker )
 class android.widget.TableRow$ChildrenTracker extends java.lang.Object implements android.view.ViewGroup$OnHierarchyChangeListener

----------------FIELDS----------------

private android.view.ViewGroup$OnHierarchyChangeListener listener

final android.widget.TableRow this$0
----------------METHODS----------------

private void <init>(
android.widget.TableRow)

 void <init>(
android.widget.TableRow
android.widget.TableRow$1)

static void access$100(
android.widget.TableRow$ChildrenTracker
android.view.ViewGroup$OnHierarchyChangeListener)

private void setOnHierarchyChangeListener(
android.view.ViewGroup$OnHierarchyChangeListener)

public void onChildViewAdded(
android.view.View
android.view.View)

public void onChildViewRemoved(
android.view.View
android.view.View)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TableRow; )
@dalvik.annotation.InnerClass (accessFlags =9 name =LayoutParams )
public class android.widget.TableRow$LayoutParams extends android.widget.LinearLayout$LayoutParams

----------------FIELDS----------------

private static final int LOCATION

private static final int LOCATION_NEXT
@android.view.ViewDebug$ExportedProperty
public int column

private int[] mOffset
@android.view.ViewDebug$ExportedProperty
public int span
----------------METHODS----------------

public void <init>()

public void <init>(
int)

public void <init>(
int
int)

public void <init>(
int
int
float)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.view.ViewGroup$LayoutParams)

public void <init>(
android.view.ViewGroup$MarginLayoutParams)

static int[] access$200(
android.widget.TableRow$LayoutParams)

protected void setBaseAttributes(
android.content.res.TypedArray
int
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/TableRow$1;Landroid/widget/TableRow$ChildrenTracker;Landroid/widget/TableRow$LayoutParams; )
public class android.widget.TableRow extends android.widget.LinearLayout

----------------FIELDS----------------

private android.widget.TableRow$ChildrenTracker mChildrenTracker

private android.util.SparseIntArray mColumnToChildIndex

private int[] mColumnWidths

private int[] mConstrainedColumnWidths

private int mNumColumns
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

static android.util.SparseIntArray access$302(
android.widget.TableRow
android.util.SparseIntArray)

private void initTableRow()

private void mapIndexAndColumns()

protected boolean checkLayoutParams(
android.view.ViewGroup$LayoutParams)

protected volatile android.view.ViewGroup$LayoutParams generateDefaultLayoutParams()

protected android.widget.LinearLayout$LayoutParams generateDefaultLayoutParams()

public volatile android.view.ViewGroup$LayoutParams generateLayoutParams(
android.util.AttributeSet)

protected volatile android.view.ViewGroup$LayoutParams generateLayoutParams(
android.view.ViewGroup$LayoutParams)

public volatile android.widget.LinearLayout$LayoutParams generateLayoutParams(
android.util.AttributeSet)

protected android.widget.LinearLayout$LayoutParams generateLayoutParams(
android.view.ViewGroup$LayoutParams)

public android.widget.TableRow$LayoutParams generateLayoutParams(
android.util.AttributeSet)

 int getChildrenSkipCount(
android.view.View
int)

 int[] getColumnsWidths(
int)

 int getLocationOffset(
android.view.View)

 int getNextLocationOffset(
android.view.View)

public android.view.View getVirtualChildAt(
int)

public int getVirtualChildCount()

 void measureChildBeforeLayout(
android.view.View
int
int
int
int
int)

 int measureNullChild(
int)

protected void onLayout(
boolean
int
int
int
int)

protected void onMeasure(
int
int)

 void setColumnCollapsed(
int
boolean)

 void setColumnsWidthConstraints(
int[])

public void setOnHierarchyChangeListener(
android.view.ViewGroup$OnHierarchyChangeListener)

________________CLASS________________


public class android.widget.TextSwitcher extends android.widget.ViewSwitcher

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void addView(
android.view.View
int
android.view.ViewGroup$LayoutParams)

public void setCurrentText(
java.lang.CharSequence)

public void setText(
java.lang.CharSequence)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TextView; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class android.widget.TextView$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$android$text$Layout$Alignment
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TextView; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Blink )
 class android.widget.TextView$Blink extends android.os.Handler implements java.lang.Runnable

----------------FIELDS----------------

private boolean mCancelled
@dalvik.annotation.Signature (value =Ljava/lang/ref/WeakReference<Landroid/widget/TextView;>; )
private java.lang.ref.WeakReference mView
----------------METHODS----------------

public void <init>(
android.widget.TextView)

 void cancel()

public void run()

 void uncancel()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Landroid/widget/TextView$BufferType;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =BufferType )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/TextView; )
public final class android.widget.TextView$BufferType extends java.lang.Enum

----------------FIELDS----------------

private static final android.widget.TextView$BufferType[] $VALUES

public static final android.widget.TextView$BufferType EDITABLE

public static final android.widget.TextView$BufferType NORMAL

public static final android.widget.TextView$BufferType SPANNABLE
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static android.widget.TextView$BufferType valueOf(
java.lang.String)

public static android.widget.TextView$BufferType[] values()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TextView; )
@dalvik.annotation.InnerClass (accessFlags =2 name =ChangeWatcher )
 class android.widget.TextView$ChangeWatcher extends android.os.Handler implements android.text.TextWatcher, android.text.SpanWatcher

----------------FIELDS----------------

final android.widget.TextView this$0
----------------METHODS----------------

private void <init>(
android.widget.TextView)

 void <init>(
android.widget.TextView
android.widget.TextView$1)

private void spanChange(
android.text.Spanned
java.lang.Object
int
int)

public void afterTextChanged(
android.text.Editable)

public void beforeTextChanged(
java.lang.CharSequence
int
int
int)

public void onSpanAdded(
android.text.Spannable
java.lang.Object
int
int)

public void onSpanChanged(
android.text.Spannable
java.lang.Object
int
int
int
int)

public void onSpanRemoved(
android.text.Spannable
java.lang.Object
int
int)

public void onTextChanged(
java.lang.CharSequence
int
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =CharWrapper )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/TextView; )
 class android.widget.TextView$CharWrapper extends java.lang.Object implements java.lang.CharSequence, android.text.GetChars, android.text.GraphicsOperations

----------------FIELDS----------------

private char[] mChars

private int mLength

private int mStart
----------------METHODS----------------

public void <init>(
char[]
int
int)

static char[] access$102(
android.widget.TextView$CharWrapper
char[])

public char charAt(
int)

public void drawText(
android.graphics.Canvas
int
int
float
float
android.graphics.Paint)

public void getChars(
int
int
char[]
int)

public int getTextWidths(
int
int
float[]
android.graphics.Paint)

public int length()

public float measureText(
int
int
android.graphics.Paint)

 void set(
char[]
int
int)

public java.lang.CharSequence subSequence(
int
int)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =MenuHandler )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/TextView; )
 class android.widget.TextView$MenuHandler extends java.lang.Object implements android.view.MenuItem$OnMenuItemClickListener

----------------FIELDS----------------

final android.widget.TextView this$0
----------------METHODS----------------

private void <init>(
android.widget.TextView)

 void <init>(
android.widget.TextView
android.widget.TextView$1)

public boolean onMenuItemClick(
android.view.MenuItem)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/widget/TextView$SavedState;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/TextView$SavedState; )
final class android.widget.TextView$SavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.widget.TextView$SavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.widget.TextView$SavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TextView; )
@dalvik.annotation.InnerClass (accessFlags =9 name =SavedState )
public class android.widget.TextView$SavedState extends android.view.View$BaseSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/widget/TextView$SavedState;>; )
public static final android.os.Parcelable$Creator CREATOR

 boolean frozenWithFocus

 int selEnd

 int selStart

 java.lang.CharSequence text
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.widget.TextView$1)

 void <init>(
android.os.Parcelable)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TimePicker; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.widget.TimePicker$1 extends java.lang.Object implements android.widget.TimePicker$OnTimeChangedListener

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public void onTimeChanged(
android.widget.TimePicker
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.widget.TimePicker$2 extends java.lang.Object implements com.android.internal.widget.NumberPicker$OnChangedListener

----------------FIELDS----------------

final android.widget.TimePicker this$0
----------------METHODS----------------

 void <init>(
android.widget.TimePicker)

public void onChanged(
com.android.internal.widget.NumberPicker
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class android.widget.TimePicker$3 extends java.lang.Object implements com.android.internal.widget.NumberPicker$OnChangedListener

----------------FIELDS----------------

final android.widget.TimePicker this$0
----------------METHODS----------------

 void <init>(
android.widget.TimePicker)

public void onChanged(
com.android.internal.widget.NumberPicker
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.widget.TimePicker$4 extends java.lang.Object implements android.view.View$OnClickListener

----------------FIELDS----------------

final android.widget.TimePicker this$0
----------------METHODS----------------

 void <init>(
android.widget.TimePicker)

public void onClick(
android.view.View)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/TimePicker$SavedState; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Landroid/widget/TimePicker$SavedState;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class android.widget.TimePicker$SavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public android.widget.TimePicker$SavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public android.widget.TimePicker$SavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =SavedState )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/TimePicker; )
 class android.widget.TimePicker$SavedState extends android.view.View$BaseSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Landroid/widget/TimePicker$SavedState;>; )
public static final android.os.Parcelable$Creator CREATOR

private final int mHour

private final int mMinute
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
android.widget.TimePicker$1)

private void <init>(
android.os.Parcelable
int
int)

 void <init>(
android.os.Parcelable
int
int
android.widget.TimePicker$1)

public int getHour()

public int getMinute()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/TimePicker$SavedState;Landroid/widget/TimePicker$OnTimeChangedListener; )
public class android.widget.TimePicker extends android.widget.FrameLayout

----------------FIELDS----------------

private static final android.widget.TimePicker$OnTimeChangedListener NO_OP_CHANGE_LISTENER

private final android.widget.Button mAmPmButton

private final java.lang.String mAmText

private int mCurrentHour

private int mCurrentMinute

private final com.android.internal.widget.NumberPicker mHourPicker

private java.lang.Boolean mIs24HourView

private boolean mIsAm

private final com.android.internal.widget.NumberPicker mMinutePicker

private android.widget.TimePicker$OnTimeChangedListener mOnTimeChangedListener

private final java.lang.String mPmText
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static int access$000(
android.widget.TimePicker)

static int access$002(
android.widget.TimePicker
int)

static int access$012(
android.widget.TimePicker
int)

static int access$020(
android.widget.TimePicker
int)

static java.lang.Boolean access$100(
android.widget.TimePicker)

static boolean access$200(
android.widget.TimePicker)

static boolean access$202(
android.widget.TimePicker
boolean)

static void access$300(
android.widget.TimePicker)

static int access$402(
android.widget.TimePicker
int)

static java.lang.String access$500(
android.widget.TimePicker)

static java.lang.String access$600(
android.widget.TimePicker)

static android.widget.Button access$700(
android.widget.TimePicker)

private void configurePickerRanges()

private void onTimeChanged()

private void updateHourDisplay()

private void updateMinuteDisplay()

public int getBaseline()

public java.lang.Integer getCurrentHour()

public java.lang.Integer getCurrentMinute()

public boolean is24HourView()

protected void onRestoreInstanceState(
android.os.Parcelable)

protected android.os.Parcelable onSaveInstanceState()

public void setCurrentHour(
java.lang.Integer)

public void setCurrentMinute(
java.lang.Integer)

public void setEnabled(
boolean)

public void setIs24HourView(
java.lang.Boolean)

public void setOnTimeChangedListener(
android.widget.TimePicker$OnTimeChangedListener)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/Toast$TN; )
 class android.widget.Toast$TN$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.widget.Toast$TN this$1
----------------METHODS----------------

 void <init>(
android.widget.Toast$TN)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/Toast$TN; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.widget.Toast$TN$2 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.widget.Toast$TN this$1
----------------METHODS----------------

 void <init>(
android.widget.Toast$TN)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/Toast; )
@dalvik.annotation.InnerClass (accessFlags =2 name =TN )
 class android.widget.Toast$TN extends android.app.ITransientNotification$Stub

----------------FIELDS----------------

 java.lang.Runnable mHide

private final android.view.WindowManager$LayoutParams mParams

 java.lang.Runnable mShow

 android.view.WindowManagerImpl mWM

final android.widget.Toast this$0
----------------METHODS----------------

 void <init>(
android.widget.Toast
android.content.Context)

public void handleHide()

public void handleShow()

public void hide()

public void show()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Landroid/widget/Toast$TN; )
public class android.widget.Toast extends java.lang.Object

----------------FIELDS----------------

public static final int LENGTH_LONG

public static final int LENGTH_SHORT

static final java.lang.String TAG

static final boolean localLOGV

private static android.app.INotificationManager sService

final android.content.Context mContext

 int mDuration

 int mGravity

final android.os.Handler mHandler

 float mHorizontalMargin

 android.view.View mNextView

final android.widget.Toast$TN mTN

 float mVerticalMargin

 android.view.View mView

 int mX

 int mY
----------------METHODS----------------

public void <init>(
android.content.Context)

private static android.app.INotificationManager getService()
@dalvik.annotation.Throws (value =Landroid/content/res/Resources$NotFoundException; )
public static android.widget.Toast makeText(
android.content.Context
int
int)

public static android.widget.Toast makeText(
android.content.Context
java.lang.CharSequence
int)

public void cancel()

public int getDuration()

public int getGravity()

public float getHorizontalMargin()

public float getVerticalMargin()

public android.view.View getView()

public int getXOffset()

public int getYOffset()

public void setDuration(
int)

public void setGravity(
int
int
int)

public void setMargin(
float
float)

public void setText(
int)

public void setText(
java.lang.CharSequence)

public void setView(
android.view.View)

public void show()

________________CLASS________________


public class android.widget.ToggleButton extends android.widget.CompoundButton

----------------FIELDS----------------

private static final int NO_ALPHA

private float mDisabledAlpha

private android.graphics.drawable.Drawable mIndicatorDrawable

private java.lang.CharSequence mTextOff

private java.lang.CharSequence mTextOn
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private void syncTextState()

private void updateReferenceToIndicatorDrawable(
android.graphics.drawable.Drawable)

protected void drawableStateChanged()

public java.lang.CharSequence getTextOff()

public java.lang.CharSequence getTextOn()

protected void onFinishInflate()

public void setBackgroundDrawable(
android.graphics.drawable.Drawable)

public void setChecked(
boolean)

public void setTextOff(
java.lang.CharSequence)

public void setTextOn(
java.lang.CharSequence)

________________CLASS________________


public class android.widget.TwoLineListItem extends android.widget.RelativeLayout

----------------FIELDS----------------

private android.widget.TextView mText1

private android.widget.TextView mText2
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

public android.widget.TextView getText1()

public android.widget.TextView getText2()

protected void onFinishInflate()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/VideoView; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.widget.VideoView$1 extends java.lang.Object implements android.media.MediaPlayer$OnPreparedListener

----------------FIELDS----------------

final android.widget.VideoView this$0
----------------METHODS----------------

 void <init>(
android.widget.VideoView)

public void onPrepared(
android.media.MediaPlayer)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/VideoView; )
 class android.widget.VideoView$2 extends java.lang.Object implements android.media.MediaPlayer$OnCompletionListener

----------------FIELDS----------------

final android.widget.VideoView this$0
----------------METHODS----------------

 void <init>(
android.widget.VideoView)

public void onCompletion(
android.media.MediaPlayer)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.widget.VideoView$3$1 extends java.lang.Object implements android.content.DialogInterface$OnClickListener

----------------FIELDS----------------

final android.widget.VideoView$3 this$1
----------------METHODS----------------

 void <init>(
android.widget.VideoView$3)

public void onClick(
android.content.DialogInterface
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/VideoView; )
 class android.widget.VideoView$3 extends java.lang.Object implements android.media.MediaPlayer$OnErrorListener

----------------FIELDS----------------

final android.widget.VideoView this$0
----------------METHODS----------------

 void <init>(
android.widget.VideoView)

public boolean onError(
android.media.MediaPlayer
int
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/VideoView; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.widget.VideoView$4 extends java.lang.Object implements android.media.MediaPlayer$OnBufferingUpdateListener

----------------FIELDS----------------

final android.widget.VideoView this$0
----------------METHODS----------------

 void <init>(
android.widget.VideoView)

public void onBufferingUpdate(
android.media.MediaPlayer
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/VideoView; )
 class android.widget.VideoView$5 extends java.lang.Object implements android.view.SurfaceHolder$Callback

----------------FIELDS----------------

final android.widget.VideoView this$0
----------------METHODS----------------

 void <init>(
android.widget.VideoView)

public void surfaceChanged(
android.view.SurfaceHolder
int
int
int)

public void surfaceCreated(
android.view.SurfaceHolder)

public void surfaceDestroyed(
android.view.SurfaceHolder)

________________CLASS________________


public class android.widget.VideoView extends android.view.SurfaceView implements android.widget.MediaController$MediaPlayerControl

----------------FIELDS----------------

private android.media.MediaPlayer$OnBufferingUpdateListener mBufferingUpdateListener

private android.media.MediaPlayer$OnCompletionListener mCompletionListener

private int mCurrentBufferPercentage

private android.media.MediaPlayer$OnErrorListener mErrorListener

private boolean mIsPrepared

private android.widget.MediaController mMediaController

private android.media.MediaPlayer mMediaPlayer

private android.media.MediaPlayer$OnCompletionListener mOnCompletionListener

private android.media.MediaPlayer$OnErrorListener mOnErrorListener

private android.media.MediaPlayer$OnPreparedListener mOnPreparedListener

 android.media.MediaPlayer$OnPreparedListener mPreparedListener

 android.view.SurfaceHolder$Callback mSHCallback

private int mSeekWhenPrepared

private boolean mStartWhenPrepared

private int mSurfaceHeight

private android.view.SurfaceHolder mSurfaceHolder

private int mSurfaceWidth

private android.net.Uri mUri

private int mVideoHeight

private int mVideoWidth
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static boolean access$000(
android.widget.VideoView)

static boolean access$002(
android.widget.VideoView
boolean)

static android.media.MediaPlayer$OnPreparedListener access$100(
android.widget.VideoView)

static android.media.MediaPlayer$OnCompletionListener access$1000(
android.widget.VideoView)

static android.media.MediaPlayer$OnErrorListener access$1100(
android.widget.VideoView)

static android.content.Context access$1200(
android.widget.VideoView)

static android.content.Context access$1300(
android.widget.VideoView)

static int access$1402(
android.widget.VideoView
int)

static android.view.SurfaceHolder access$1502(
android.widget.VideoView
android.view.SurfaceHolder)

static void access$1600(
android.widget.VideoView)

static android.media.MediaPlayer access$200(
android.widget.VideoView)

static android.media.MediaPlayer access$202(
android.widget.VideoView
android.media.MediaPlayer)

static android.widget.MediaController access$300(
android.widget.VideoView)

static int access$400(
android.widget.VideoView)

static int access$402(
android.widget.VideoView
int)

static int access$500(
android.widget.VideoView)

static int access$502(
android.widget.VideoView
int)

static int access$600(
android.widget.VideoView)

static int access$602(
android.widget.VideoView
int)

static int access$700(
android.widget.VideoView)

static int access$702(
android.widget.VideoView
int)

static int access$800(
android.widget.VideoView)

static boolean access$900(
android.widget.VideoView)

private void attachMediaController()

private void initVideoView()

private void openVideo()

private void toggleMediaControlsVisiblity()

public int getBufferPercentage()

public int getCurrentPosition()

public int getDuration()

public boolean isPlaying()

public boolean onKeyDown(
int
android.view.KeyEvent)

protected void onMeasure(
int
int)

public boolean onTouchEvent(
android.view.MotionEvent)

public boolean onTrackballEvent(
android.view.MotionEvent)

public void pause()

public int resolveAdjustedSize(
int
int)

public void seekTo(
int)

public void setMediaController(
android.widget.MediaController)

public void setOnCompletionListener(
android.media.MediaPlayer$OnCompletionListener)

public void setOnErrorListener(
android.media.MediaPlayer$OnErrorListener)

public void setOnPreparedListener(
android.media.MediaPlayer$OnPreparedListener)

public void setVideoPath(
java.lang.String)

public void setVideoURI(
android.net.Uri)

public void start()

public void stopPlayback()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Landroid/widget/ViewFlipper; )
 class android.widget.ViewFlipper$1 extends android.os.Handler

----------------FIELDS----------------

final android.widget.ViewFlipper this$0
----------------METHODS----------------

 void <init>(
android.widget.ViewFlipper)

public void handleMessage(
android.os.Message)

________________CLASS________________


public class android.widget.ViewFlipper extends android.widget.ViewAnimator

----------------FIELDS----------------

private final int FLIP_MSG

private int mFlipInterval

private final android.os.Handler mHandler

private boolean mKeepFlipping
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

static boolean access$000(
android.widget.ViewFlipper)

static int access$100(
android.widget.ViewFlipper)

public boolean isFlipping()

public void setFlipInterval(
int)

public void startFlipping()

public void stopFlipping()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/ViewSwitcher; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ViewFactory )
public abstract interface class android.widget.ViewSwitcher$ViewFactory extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.view.View makeView()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Landroid/widget/ZoomButton; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.widget.ZoomButton$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.widget.ZoomButton this$0
----------------METHODS----------------

 void <init>(
android.widget.ZoomButton)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class android.widget.ZoomButton$2 extends android.view.GestureDetector$SimpleOnGestureListener

----------------FIELDS----------------

final android.widget.ZoomButton this$0
----------------METHODS----------------

 void <init>(
android.widget.ZoomButton)

public void onLongPress(
android.view.MotionEvent)

________________CLASS________________


public class android.widget.ZoomButton extends android.widget.ImageButton implements android.view.View$OnLongClickListener

----------------FIELDS----------------

private final android.view.GestureDetector mGestureDetector

private final android.os.Handler mHandler

private boolean mIsInLongpress

private final java.lang.Runnable mRunnable

private long mZoomSpeed
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static android.view.View$OnClickListener access$000(
android.widget.ZoomButton)

static boolean access$100(
android.widget.ZoomButton)

static android.view.View$OnClickListener access$200(
android.widget.ZoomButton)

static long access$300(
android.widget.ZoomButton)

static android.os.Handler access$400(
android.widget.ZoomButton)

public boolean dispatchUnhandledMove(
android.view.View
int)

public boolean onKeyUp(
int
android.view.KeyEvent)

public boolean onLongClick(
android.view.View)

public boolean onTouchEvent(
android.view.MotionEvent)

public void setEnabled(
boolean)

public void setZoomSpeed(
long)

________________CLASS________________


public class android.widget.ZoomControls extends android.widget.LinearLayout

----------------FIELDS----------------

private final android.widget.ZoomButton mZoomIn

private final android.widget.ZoomButton mZoomOut
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

private void fade(
int
float
float)

public boolean hasFocus()

public void hide()

public boolean onTouchEvent(
android.view.MotionEvent)

public void setIsZoomInEnabled(
boolean)

public void setIsZoomOutEnabled(
boolean)

public void setOnZoomInClickListener(
android.view.View$OnClickListener)

public void setOnZoomOutClickListener(
android.view.View$OnClickListener)

public void setZoomSpeed(
long)

public void show()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =anim )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/R; )
public final class com.android.internal.R$anim extends java.lang.Object

----------------FIELDS----------------

public static final int accelerate_decelerate_interpolator

public static final int accelerate_interpolator

public static final int app_starting_exit

public static final int decelerate_interpolator

public static final int fade_in

public static final int fade_out

public static final int grow_fade_in

public static final int grow_fade_in_center

public static final int grow_fade_in_from_bottom

public static final int linear_interpolator

public static final int options_panel_enter

public static final int options_panel_exit

public static final int push_down_in

public static final int push_down_out

public static final int push_up_in

public static final int push_up_out

public static final int shrink_fade_out

public static final int shrink_fade_out_center

public static final int shrink_fade_out_from_bottom

public static final int slide_in_bottom

public static final int slide_in_child_bottom

public static final int slide_in_left

public static final int slide_in_right

public static final int slide_in_top

public static final int slide_out_bottom

public static final int slide_out_left

public static final int slide_out_right

public static final int slide_out_top

public static final int submenu_enter

public static final int submenu_exit

public static final int task_close_enter

public static final int task_close_exit

public static final int task_open_enter

public static final int task_open_exit

public static final int toast_enter

public static final int toast_exit
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =array )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/R; )
public final class com.android.internal.R$array extends java.lang.Object

----------------FIELDS----------------

public static final int day_labels

public static final int emailAddressTypes

public static final int imAddressTypes

public static final int imProtocols

public static final int maps_starting_lat_lng

public static final int maps_starting_zoom

public static final int organizationTypes

public static final int phoneTypes

public static final int postalAddressTypes

public static final int preloaded_drawables

public static final int status_bar_icon_order
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/R; )
@dalvik.annotation.InnerClass (accessFlags =25 name =attr )
public final class com.android.internal.R$attr extends java.lang.Object

----------------FIELDS----------------

public static final int absListViewStyle

public static final int action

public static final int activityCloseEnterAnimation

public static final int activityCloseExitAnimation

public static final int activityOpenEnterAnimation

public static final int activityOpenExitAnimation

public static final int addStatesFromChildren

public static final int adjustViewBounds

public static final int alertDialogStyle

public static final int allowClearUserData

public static final int allowTaskReparenting

public static final int alphabeticShortcut

public static final int alwaysDrawnWithCache

public static final int alwaysRetainTaskState

public static final int angle

public static final int animateOnClick

public static final int animation

public static final int animationCache

public static final int animationDuration

public static final int animationOrder

public static final int antialias

public static final int apiKey

public static final int authorities

public static final int autoCompleteTextViewStyle

public static final int autoLink

public static final int autoText

public static final int background

public static final int backgroundDimAmount

public static final int baselineAlignBottom

public static final int baselineAligned

public static final int baselineAlignedChildIndex

public static final int bottom

public static final int bottomBright

public static final int bottomDark

public static final int bottomLeftRadius

public static final int bottomMedium

public static final int bottomOffset

public static final int bottomRightRadius

public static final int bufferType

public static final int button

public static final int buttonStyle

public static final int buttonStyleInset

public static final int buttonStyleSmall

public static final int buttonStyleToggle

public static final int cacheColorHint

public static final int capitalize

public static final int centerBright

public static final int centerColor

public static final int centerDark

public static final int centerMedium

public static final int centerX

public static final int centerY

public static final int checkBoxPreferenceStyle

public static final int checkMark

public static final int checkable

public static final int checkableBehavior

public static final int checkboxStyle

public static final int checked

public static final int checkedButton

public static final int childDivider

public static final int childIndicator

public static final int childIndicatorLeft

public static final int childIndicatorRight

public static final int choiceMode

public static final int clearTaskOnLaunch

public static final int clickable

public static final int clipChildren

public static final int clipOrientation

public static final int clipToPadding

public static final int collapseColumns

public static final int color

public static final int colorBackground

public static final int colorForeground

public static final int colorForegroundInverse

public static final int columnDelay

public static final int columnWidth

public static final int completionHint

public static final int completionHintView

public static final int completionThreshold

public static final int configChanges

public static final int constantSize

public static final int content

public static final int cropToPadding

public static final int cursorVisible

public static final int cycles

public static final int dashGap

public static final int dashWidth

public static final int data

public static final int debuggable

public static final int defaultValue

public static final int delay

public static final int dependency

public static final int descendantFocusability

public static final int description

public static final int dial

public static final int dialogIcon

public static final int dialogLayout

public static final int dialogMessage

public static final int dialogPreferenceStyle

public static final int dialogTitle

public static final int digits

public static final int direction

public static final int directionPriority

public static final int disableDependentsState

public static final int disabledAlpha

public static final int dither

public static final int divider

public static final int dividerHeight

public static final int drawSelectorOnTop

public static final int drawable

public static final int drawableBottom

public static final int drawableLeft

public static final int drawablePadding

public static final int drawableRight

public static final int drawableTop

public static final int drawingCacheQuality

public static final int dropDownHintAppearance

public static final int dropDownItemStyle

public static final int dropDownListViewStyle

public static final int dropDownSelector

public static final int duplicateParentState

public static final int duration

public static final int editTextPreferenceStyle

public static final int editTextStyle

public static final int editable

public static final int ellipsize

public static final int ems

public static final int enabled

public static final int endColor

public static final int endYear

public static final int entries

public static final int entryValues

public static final int excludeFromRecents

public static final int expandableListPreferredChildIndicatorLeft

public static final int expandableListPreferredChildIndicatorRight

public static final int expandableListPreferredChildPaddingLeft

public static final int expandableListPreferredItemIndicatorLeft

public static final int expandableListPreferredItemIndicatorRight

public static final int expandableListPreferredItemPaddingLeft

public static final int expandableListViewStyle

public static final int exported

public static final int factor

public static final int fadingEdge

public static final int fadingEdgeLength

public static final int fillAfter

public static final int fillBefore

public static final int fillViewport

public static final int filter

public static final int finishOnTaskLaunch

public static final int fitsSystemWindows

public static final int flipInterval

public static final int focusable

public static final int focusableInTouchMode

public static final int foreground

public static final int foregroundGravity

public static final int format

public static final int freezesText

public static final int fromAlpha

public static final int fromDegrees

public static final int fromXDelta

public static final int fromXScale

public static final int fromYDelta

public static final int fromYScale

public static final int fullBright

public static final int fullDark

public static final int functionalTest

public static final int galleryItemBackground

public static final int galleryStyle

public static final int gradientRadius

public static final int grantUriPermissions

public static final int gravity

public static final int gridViewStyle

public static final int groupIndicator

public static final int hand_hour

public static final int hand_minute

public static final int handle

public static final int handleProfiling

public static final int hasCode

public static final int headerBackground

public static final int height

public static final int hint

public static final int horizontalDivider

public static final int horizontalSpacing

public static final int host

public static final int icon

public static final int id

public static final int ignoreGravity

public static final int imageButtonStyle

public static final int imageWellStyle

public static final int inAnimation

public static final int includeFontPadding

public static final int indeterminate

public static final int indeterminateBehavior

public static final int indeterminateDrawable

public static final int indeterminateDuration

public static final int indeterminateOnly

public static final int indicatorLeft

public static final int indicatorRight

public static final int inflatedId

public static final int initOrder

public static final int innerRadiusRatio

public static final int inputMethod

public static final int insetBottom

public static final int insetLeft

public static final int insetRight

public static final int insetTop

public static final int interpolator

public static final int isIndicator

public static final int itemBackground

public static final int itemIconDisabledAlpha

public static final int itemTextAppearance

public static final int keepScreenOn

public static final int key

public static final int keycode

public static final int label

public static final int launchMode

public static final int layout

public static final int layoutAnimation

public static final int layout_above

public static final int layout_alignBaseline

public static final int layout_alignBottom

public static final int layout_alignLeft

public static final int layout_alignParentBottom

public static final int layout_alignParentLeft

public static final int layout_alignParentRight

public static final int layout_alignParentTop

public static final int layout_alignRight

public static final int layout_alignTop

public static final int layout_alignWithParentIfMissing

public static final int layout_below

public static final int layout_centerHorizontal

public static final int layout_centerInParent

public static final int layout_centerVertical

public static final int layout_column

public static final int layout_gravity

public static final int layout_height

public static final int layout_margin

public static final int layout_marginBottom

public static final int layout_marginLeft

public static final int layout_marginRight

public static final int layout_marginTop

public static final int layout_scale

public static final int layout_span

public static final int layout_toLeftOf

public static final int layout_toRightOf

public static final int layout_weight

public static final int layout_width

public static final int layout_x

public static final int layout_y

public static final int left

public static final int lineSpacingExtra

public static final int lineSpacingMultiplier

public static final int lines

public static final int linksClickable

public static final int listChoiceIndicatorMultiple

public static final int listChoiceIndicatorSingle

public static final int listDivider

public static final int listPreferredItemHeight

public static final int listSelector

public static final int listSeparatorTextViewStyle

public static final int listViewStyle

public static final int listViewWhiteStyle

public static final int longClickable

public static final int manageSpaceActivity

public static final int mapViewStyle

public static final int max

public static final int maxEms

public static final int maxHeight

public static final int maxItemsPerRow

public static final int maxLength

public static final int maxLevel

public static final int maxLines

public static final int maxRows

public static final int maxWidth

public static final int measureAllChildren

public static final int menuCategory

public static final int mimeType

public static final int minEms

public static final int minHeight

public static final int minLevel

public static final int minLines

public static final int minSdkVersion

public static final int minWidth

public static final int mode

public static final int moreIcon

public static final int multiprocess

public static final int name

public static final int negativeButtonText

public static final int nextFocusDown

public static final int nextFocusLeft

public static final int nextFocusRight

public static final int nextFocusUp

public static final int numColumns

public static final int numStars

public static final int numeric

public static final int numericShortcut

public static final int oneshot

public static final int order

public static final int orderInCategory

public static final int orderingFromXml

public static final int orientation

public static final int outAnimation

public static final int padding

public static final int paddingBottom

public static final int paddingLeft

public static final int paddingRight

public static final int paddingTop

public static final int panelBackground

public static final int panelColorBackground

public static final int panelColorForeground

public static final int panelFullBackground

public static final int panelTextAppearance

public static final int password

public static final int path

public static final int pathPattern

public static final int pathPrefix

public static final int permission

public static final int permissionGroup

public static final int persistent

public static final int persistentDrawingCache

public static final int phoneNumber

public static final int pivotX

public static final int pivotY

public static final int popupBackground

public static final int popupWindowStyle

public static final int port

public static final int positiveButtonText

public static final int preferenceCategoryStyle

public static final int preferenceInformationStyle

public static final int preferenceLayoutChild

public static final int preferenceScreenStyle

public static final int preferenceStyle

public static final int priority

public static final int process

public static final int progress

public static final int progressBarStyle

public static final int progressBarStyleHorizontal

public static final int progressBarStyleLarge

public static final int progressBarStyleSmall

public static final int progressBarStyleSmallTitle

public static final int progressDrawable

public static final int prompt

public static final int protectionLevel

public static final int queryActionMsg

public static final int radioButtonStyle

public static final int radius

public static final int rating

public static final int ratingBarStyle

public static final int ratingBarStyleIndicator

public static final int ratingBarStyleSmall

public static final int readPermission

public static final int repeatCount

public static final int repeatMode

public static final int resource

public static final int right

public static final int ringtonePreferenceStyle

public static final int ringtoneType

public static final int rowDelay

public static final int rowHeight

public static final int saveEnabled

public static final int scaleGravity

public static final int scaleHeight

public static final int scaleType

public static final int scaleWidth

public static final int scheme

public static final int screenOrientation

public static final int scrollHorizontally

public static final int scrollViewStyle

public static final int scrollX

public static final int scrollY

public static final int scrollbarAlwaysDrawHorizontalTrack

public static final int scrollbarAlwaysDrawVerticalTrack

public static final int scrollbarSize

public static final int scrollbarStyle

public static final int scrollbarThumbHorizontal

public static final int scrollbarThumbVertical

public static final int scrollbarTrackHorizontal

public static final int scrollbarTrackVertical

public static final int scrollbars

public static final int scrollingCache

public static final int searchButtonText

public static final int searchMode

public static final int searchSuggestAuthority

public static final int searchSuggestIntentAction

public static final int searchSuggestIntentData

public static final int searchSuggestPath

public static final int searchSuggestSelection

public static final int secondaryProgress

public static final int seekBarStyle

public static final int selectAllOnFocus

public static final int selectable

public static final int shadowColor

public static final int shadowDx

public static final int shadowDy

public static final int shadowRadius

public static final int shape

public static final int shareInterpolator

public static final int sharedUserId

public static final int shouldDisableView

public static final int showDefault

public static final int showSilent

public static final int shrinkColumns

public static final int singleLine

public static final int soundEffectsEnabled

public static final int spacing

public static final int spinnerDropDownItemStyle

public static final int spinnerItemStyle

public static final int spinnerStyle

public static final int src

public static final int stackFromBottom

public static final int starStyle

public static final int startColor

public static final int startOffset

public static final int startYear

public static final int stateNotNeeded

public static final int state_above_anchor

public static final int state_active

public static final int state_checkable

public static final int state_checked

public static final int state_empty

public static final int state_enabled

public static final int state_expanded

public static final int state_first

public static final int state_focused

public static final int state_last

public static final int state_middle

public static final int state_pressed

public static final int state_selected

public static final int state_single

public static final int state_window_focused

public static final int stepSize

public static final int streamType

public static final int stretchColumns

public static final int stretchMode

public static final int suggestActionMsg

public static final int suggestActionMsgColumn

public static final int summary

public static final int summaryOff

public static final int summaryOn

public static final int syncable

public static final int tabWidgetStyle

public static final int tag

public static final int targetActivity

public static final int targetClass

public static final int targetPackage

public static final int taskAffinity

public static final int taskCloseEnterAnimation

public static final int taskCloseExitAnimation

public static final int taskOpenEnterAnimation

public static final int taskOpenExitAnimation

public static final int taskToBackEnterAnimation

public static final int taskToBackExitAnimation

public static final int taskToFrontEnterAnimation

public static final int taskToFrontExitAnimation

public static final int text

public static final int textAppearance

public static final int textAppearanceButton

public static final int textAppearanceInverse

public static final int textAppearanceLarge

public static final int textAppearanceLargeInverse

public static final int textAppearanceMedium

public static final int textAppearanceMediumInverse

public static final int textAppearanceSmall

public static final int textAppearanceSmallInverse

public static final int textCheckMark

public static final int textCheckMarkInverse

public static final int textColor

public static final int textColorHighlight

public static final int textColorHint

public static final int textColorHintInverse

public static final int textColorLink

public static final int textColorPrimary

public static final int textColorPrimaryDisableOnly

public static final int textColorPrimaryInverse

public static final int textColorPrimaryInverseNoDisable

public static final int textColorPrimaryNoDisable

public static final int textColorSecondary

public static final int textColorSecondaryInverse

public static final int textColorSecondaryInverseNoDisable

public static final int textColorSecondaryNoDisable

public static final int textColorTertiary

public static final int textColorTertiaryInverse

public static final int textFilterEnabled

public static final int textOff

public static final int textOn

public static final int textScaleX

public static final int textSize

public static final int textStyle

public static final int textViewStyle

public static final int theme

public static final int thicknessRatio

public static final int thumb

public static final int thumbOffset

public static final int tileMode

public static final int tint

public static final int title

public static final int titleCondensed

public static final int toAlpha

public static final int toDegrees

public static final int toXDelta

public static final int toXScale

public static final int toYDelta

public static final int toYScale

public static final int top

public static final int topBright

public static final int topDark

public static final int topLeftRadius

public static final int topOffset

public static final int topRightRadius

public static final int transcriptMode

public static final int type

public static final int typeface

public static final int unselectedAlpha

public static final int useLevel

public static final int value

public static final int variablePadding

public static final int versionCode

public static final int versionName

public static final int verticalDivider

public static final int verticalSpacing

public static final int visibility

public static final int visible

public static final int webViewStyle

public static final int weightSum

public static final int widgetLayout

public static final int width

public static final int windowAnimationStyle

public static final int windowBackground

public static final int windowContentOverlay

public static final int windowEnterAnimation

public static final int windowExitAnimation

public static final int windowFrame

public static final int windowFullscreen

public static final int windowHideAnimation

public static final int windowIsFloating

public static final int windowIsTranslucent

public static final int windowNoTitle

public static final int windowShowAnimation

public static final int windowTitleBackgroundStyle

public static final int windowTitleSize

public static final int windowTitleStyle

public static final int writePermission

public static final int x

public static final int y

public static final int yesNoPreferenceStyle

public static final int zAdjustment
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/R; )
@dalvik.annotation.InnerClass (accessFlags =25 name =color )
public final class com.android.internal.R$color extends java.lang.Object

----------------FIELDS----------------

public static final int background_dark

public static final int background_light

public static final int black

public static final int bright_foreground_dark

public static final int bright_foreground_dark_disabled

public static final int bright_foreground_dark_inverse

public static final int bright_foreground_light

public static final int bright_foreground_light_disabled

public static final int bright_foreground_light_inverse

public static final int darker_gray

public static final int dim_foreground_dark

public static final int dim_foreground_dark_disabled

public static final int dim_foreground_dark_inverse

public static final int dim_foreground_dark_inverse_disabled

public static final int dim_foreground_light

public static final int dim_foreground_light_disabled

public static final int dim_foreground_light_inverse

public static final int dim_foreground_light_inverse_disabled

public static final int hint_foreground_dark

public static final int hint_foreground_light

public static final int lighter_gray

public static final int perms_dangerous_grp_color

public static final int perms_dangerous_perm_color

public static final int perms_normal_grp_color

public static final int perms_normal_perm_color

public static final int primary_text_dark

public static final int primary_text_dark_disable_only

public static final int primary_text_dark_focused

public static final int primary_text_dark_nodisable

public static final int primary_text_light

public static final int primary_text_light_disable_only

public static final int primary_text_light_nodisable

public static final int safe_mode_text

public static final int secondary_text_dark

public static final int secondary_text_dark_nodisable

public static final int secondary_text_light

public static final int secondary_text_light_nodisable

public static final int tab_indicator_text

public static final int tertiary_text_dark

public static final int tertiary_text_light

public static final int theme_panel_text

public static final int transparent

public static final int white

public static final int widget_autocompletetextview_dark

public static final int widget_button

public static final int widget_edittext_dark

public static final int widget_edittext_dark_hint

public static final int widget_paneltabwidget

public static final int widget_textview_bigspinneritem_dark

public static final int widget_textview_spinneritem_dark
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =dimen )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/R; )
public final class com.android.internal.R$dimen extends java.lang.Object

----------------FIELDS----------------

public static final int app_icon_size

public static final int thumbnail_height

public static final int thumbnail_width

public static final int toast_y_offset
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/R; )
@dalvik.annotation.InnerClass (accessFlags =25 name =drawable )
public final class com.android.internal.R$drawable extends java.lang.Object

----------------FIELDS----------------

public static final int alert_dark_frame

public static final int alert_light_frame

public static final int app_icon_background

public static final int arrow_down_float

public static final int arrow_up_float

public static final int battery_charge_background

public static final int battery_charge_fill

public static final int battery_charge_fill_empty

public static final int battery_charge_fill_full

public static final int battery_charge_fill_warning

public static final int battery_low_battery

public static final int blank_tile

public static final int boot_robot

public static final int bottom_bar

public static final int bottombar_565

public static final int box

public static final int btn_application_selector

public static final int btn_check

public static final int btn_check_label_background

public static final int btn_check_off

public static final int btn_check_off_disable

public static final int btn_check_off_disable_focused

public static final int btn_check_off_longpress

public static final int btn_check_off_pressed

public static final int btn_check_off_selected

public static final int btn_check_on

public static final int btn_check_on_disable

public static final int btn_check_on_disable_focused

public static final int btn_check_on_longpress

public static final int btn_check_on_pressed

public static final int btn_check_on_selected

public static final int btn_code_lock_default

public static final int btn_code_lock_default_trackball_pressed

public static final int btn_code_lock_default_trackball_selected

public static final int btn_code_lock_touched

public static final int btn_default

public static final int btn_default_longpress

public static final int btn_default_normal

public static final int btn_default_normal_disable

public static final int btn_default_normal_disable_focused

public static final int btn_default_pressed

public static final int btn_default_selected

public static final int btn_default_small

public static final int btn_default_small_longpress

public static final int btn_default_small_normal

public static final int btn_default_small_normal_disable

public static final int btn_default_small_normal_disable_focused

public static final int btn_default_small_pressed

public static final int btn_default_small_selected

public static final int btn_dialog

public static final int btn_dialog_disable

public static final int btn_dialog_disable_focused

public static final int btn_dialog_normal

public static final int btn_dialog_pressed

public static final int btn_dialog_selected

public static final int btn_dropdown

public static final int btn_dropdown_disabled

public static final int btn_dropdown_down

public static final int btn_dropdown_normal

public static final int btn_dropdown_pressed

public static final int btn_dropdown_selected

public static final int btn_erase_default

public static final int btn_erase_pressed

public static final int btn_erase_selected

public static final int btn_flicker_minus

public static final int btn_flicker_plus

public static final int btn_media_player

public static final int btn_media_player_disabled

public static final int btn_media_player_disabled_selected

public static final int btn_media_player_pressed

public static final int btn_media_player_selected

public static final int btn_minus

public static final int btn_minus_default

public static final int btn_minus_disable

public static final int btn_minus_disable_focused

public static final int btn_minus_pressed

public static final int btn_minus_selected

public static final int btn_plus

public static final int btn_plus_default

public static final int btn_plus_disable

public static final int btn_plus_disable_focused

public static final int btn_plus_pressed

public static final int btn_plus_selected

public static final int btn_radio

public static final int btn_radio_label_background

public static final int btn_radio_off

public static final int btn_radio_off_disable

public static final int btn_radio_off_disable_focused

public static final int btn_radio_off_longpress

public static final int btn_radio_off_pressed

public static final int btn_radio_off_selected

public static final int btn_radio_on

public static final int btn_radio_on_disable

public static final int btn_radio_on_disable_focused

public static final int btn_radio_on_longpress

public static final int btn_radio_on_pressed

public static final int btn_radio_on_selected

public static final int btn_rating_star_off_normal

public static final int btn_rating_star_off_pressed

public static final int btn_rating_star_off_selected

public static final int btn_rating_star_on_normal

public static final int btn_rating_star_on_pressed

public static final int btn_rating_star_on_selected

public static final int btn_star

public static final int btn_star_big_off

public static final int btn_star_big_off_disable

public static final int btn_star_big_off_disable_focused

public static final int btn_star_big_off_longpress

public static final int btn_star_big_off_pressed

public static final int btn_star_big_off_selected

public static final int btn_star_big_on

public static final int btn_star_big_on_disable

public static final int btn_star_big_on_disable_focused

public static final int btn_star_big_on_longpress

public static final int btn_star_big_on_pressed

public static final int btn_star_big_on_selected

public static final int btn_star_label_background

public static final int btn_toggle

public static final int btn_toggle_bg

public static final int btn_toggle_off

public static final int btn_toggle_on

public static final int btn_white_longpress

public static final int btn_zoom_page

public static final int btn_zoom_page_normal

public static final int btn_zoom_page_press

public static final int button_inset

public static final int button_onoff_indicator_off

public static final int button_onoff_indicator_on

public static final int checkbox

public static final int checkbox_background

public static final int checkbox_label_background

public static final int checkbox_off_background

public static final int checkbox_off_background_focus_yellow

public static final int checkbox_on_background

public static final int checkbox_on_background_focus_yellow

public static final int clock_dial

public static final int clock_hand_hour

public static final int clock_hand_minute

public static final int code_lock_bottom

public static final int code_lock_left

public static final int code_lock_top

public static final int compass_arrow

public static final int compass_base

public static final int contextual_menu_bottom_bright

public static final int contextual_menu_top_dark

public static final int default_wallpaper

public static final int dialog_divider_horizontal_light

public static final int dialog_frame

public static final int divider_horizontal_bright

public static final int divider_horizontal_dark

public static final int divider_horizontal_dim_dark

public static final int divider_horizontal_textfield

public static final int divider_vertical_bright

public static final int edit_text

public static final int editbox_background

public static final int editbox_background_focus_yellow

public static final int editbox_background_normal

public static final int editbox_dropdown_arrowdown

public static final int editbox_dropdown_arrowup

public static final int editbox_dropdown_background

public static final int editbox_dropdown_background_dark

public static final int editbox_dropdown_dark_frame

public static final int editbox_dropdown_light_frame

public static final int expander_group

public static final int expander_ic_maximized

public static final int expander_ic_minimized

public static final int focused_application_background_static

public static final int frame_gallery_thumb

public static final int frame_gallery_thumb_pressed

public static final int frame_gallery_thumb_selected

public static final int gallery_item_background

public static final int gallery_selected_default

public static final int gallery_selected_focused

public static final int gallery_selected_pressed

public static final int gallery_thumb

public static final int gallery_unselected_default

public static final int gallery_unselected_pressed

public static final int grey_list_separator

public static final int grid_selector_background

public static final int grid_selector_background_focus

public static final int grid_selector_background_pressed

public static final int highlight_disabled

public static final int highlight_disabled_pressed

public static final int highlight_pressed

public static final int highlight_pressed_dimmed

public static final int highlight_selected

public static final int ic_bullet_key_permission

public static final int ic_check_mark_dark

public static final int ic_check_mark_light

public static final int ic_delete

public static final int ic_dialog_alert

public static final int ic_dialog_dialer

public static final int ic_dialog_email

public static final int ic_dialog_info

public static final int ic_dialog_map

public static final int ic_dialog_menu_generic

public static final int ic_dialog_time

public static final int ic_emergency

public static final int ic_input_add

public static final int ic_input_delete

public static final int ic_input_get

public static final int ic_launcher_android

public static final int ic_lock_idle_alarm

public static final int ic_lock_idle_charging

public static final int ic_lock_idle_lock

public static final int ic_lock_idle_low_battery

public static final int ic_lock_lock

public static final int ic_lock_power_off

public static final int ic_lock_silent_mode

public static final int ic_lock_silent_mode_off

public static final int ic_maps_indicator_current_position

public static final int ic_maps_indicator_current_position_anim

public static final int ic_maps_indicator_current_position_anim1

public static final int ic_maps_indicator_current_position_anim2

public static final int ic_maps_indicator_current_position_anim3

public static final int ic_media_ff

public static final int ic_media_next

public static final int ic_media_pause

public static final int ic_media_play

public static final int ic_media_previous

public static final int ic_media_rew

public static final int ic_menu_add

public static final int ic_menu_agenda

public static final int ic_menu_always_landscape_portrait

public static final int ic_menu_call

public static final int ic_menu_camera

public static final int ic_menu_close_clear_cancel

public static final int ic_menu_compass

public static final int ic_menu_crop

public static final int ic_menu_day

public static final int ic_menu_delete

public static final int ic_menu_directions

public static final int ic_menu_edit

public static final int ic_menu_gallery

public static final int ic_menu_help

public static final int ic_menu_info_details

public static final int ic_menu_manage

public static final int ic_menu_mapmode

public static final int ic_menu_month

public static final int ic_menu_more

public static final int ic_menu_my_calendar

public static final int ic_menu_mylocation

public static final int ic_menu_myplaces

public static final int ic_menu_preferences

public static final int ic_menu_recent_history

public static final int ic_menu_report_image

public static final int ic_menu_revert

public static final int ic_menu_rotate

public static final int ic_menu_save

public static final int ic_menu_search

public static final int ic_menu_send

public static final int ic_menu_set_as

public static final int ic_menu_share

public static final int ic_menu_slideshow

public static final int ic_menu_sort_alphabetically

public static final int ic_menu_sort_by_size

public static final int ic_menu_today

public static final int ic_menu_upload

public static final int ic_menu_upload_you_tube

public static final int ic_menu_view

public static final int ic_menu_week

public static final int ic_menu_zoom

public static final int ic_notification_clear_all

public static final int ic_notification_overlay

public static final int ic_partial_secure

public static final int ic_popup_disk_full

public static final int ic_popup_reminder

public static final int ic_popup_sync

public static final int ic_popup_sync_1

public static final int ic_popup_sync_2

public static final int ic_popup_sync_3

public static final int ic_popup_sync_4

public static final int ic_popup_sync_5

public static final int ic_popup_sync_6

public static final int ic_power

public static final int ic_search_category_default

public static final int ic_secure

public static final int ic_settings_indicator_next_page

public static final int ic_text_dot

public static final int ic_vibrate

public static final int ic_volume

public static final int ic_volume_off

public static final int ic_volume_off_small

public static final int ic_volume_small

public static final int icon_highlight_rectangle

public static final int icon_highlight_square

public static final int indicator_check_mark_dark

public static final int indicator_check_mark_light

public static final int indicator_code_lock_drag_direction_green_up

public static final int indicator_code_lock_drag_direction_red_up

public static final int indicator_code_lock_point_area_default

public static final int indicator_code_lock_point_area_green

public static final int indicator_code_lock_point_area_red

public static final int indicator_input_error

public static final int indicator_show_current_selected_dark

public static final int list_highlight

public static final int list_highlight_active

public static final int list_highlight_inactive

public static final int list_selector_background

public static final int list_selector_background_disabled

public static final int list_selector_background_focus

public static final int list_selector_background_longpress

public static final int list_selector_background_pressed

public static final int list_selector_background_transition

public static final int load_average_background

public static final int loading_tile

public static final int lock_asset

public static final int maps_google_logo

public static final int media_button_background

public static final int menu_background

public static final int menu_background_fill_parent_width

public static final int menu_frame

public static final int menu_full_frame

public static final int menu_selector

public static final int menu_separator

public static final int menu_submenu_background

public static final int menuitem_background

public static final int menuitem_background_focus

public static final int menuitem_background_pressed

public static final int menuitem_background_solid

public static final int menuitem_background_solid_focused

public static final int menuitem_background_solid_pressed

public static final int menuitem_checkbox

public static final int menuitem_checkbox_on

public static final int no_tile_128

public static final int padlock

public static final int panel_background

public static final int panel_picture_frame_background

public static final int panel_picture_frame_bg_disabled

public static final int panel_picture_frame_bg_focus_blue

public static final int panel_picture_frame_bg_normal

public static final int panel_picture_frame_bg_pressed_blue

public static final int panel_separator

public static final int pickerbox

public static final int pickerbox_background

public static final int pickerbox_divider

public static final int pickerbox_selected

public static final int pickerbox_unselected

public static final int picture_emergency

public static final int picture_frame

public static final int popup_bottom_bright

public static final int popup_bottom_dark

public static final int popup_bottom_medium

public static final int popup_center_bright

public static final int popup_center_dark

public static final int popup_center_medium

public static final int popup_divider_horizontal_dark

public static final int popup_full_bright

public static final int popup_full_dark

public static final int popup_inline_error

public static final int popup_top_bright

public static final int popup_top_dark

public static final int presence_away

public static final int presence_busy

public static final int presence_invisible

public static final int presence_offline

public static final int presence_online

public static final int pressed_application_background_static

public static final int progress

public static final int progress_circular_background

public static final int progress_circular_background_small

public static final int progress_circular_indeterminate

public static final int progress_circular_indeterminate_small

public static final int progress_frame

public static final int progress_horizontal

public static final int progress_indeterminate

public static final int progress_indeterminate_horizontal

public static final int progress_indeterminate_small

public static final int progress_inner

public static final int progress_large

public static final int progress_medium

public static final int progress_particle

public static final int progress_particle_small

public static final int progress_small

public static final int progress_small_titlebar

public static final int progressbar_indeterminate1

public static final int progressbar_indeterminate2

public static final int progressbar_indeterminate3

public static final int radiobutton

public static final int radiobutton_background

public static final int radiobutton_label_background

public static final int radiobutton_off_background

public static final int radiobutton_off_background_focus_yellow

public static final int radiobutton_on_background

public static final int radiobutton_on_background_focus_yellow

public static final int rate_star_big_half

public static final int rate_star_big_off

public static final int rate_star_big_on

public static final int rate_star_small_half

public static final int rate_star_small_off

public static final int rate_star_small_on

public static final int ratingbar

public static final int ratingbar_full

public static final int ratingbar_small

public static final int reticle

public static final int safe_mode_background

public static final int screen_background_dark

public static final int screen_background_light

public static final int screen_progress

public static final int screen_progress_frame

public static final int screen_progress_inner

public static final int screen_title_background

public static final int scroll_thumb_horz

public static final int scroll_thumb_vert

public static final int scrollbar

public static final int scrollbar_handle_accelerated_anim2

public static final int scrollbar_handle_horizontal

public static final int scrollbar_handle_vertical

public static final int scrollbar_horizontal

public static final int scrollbar_vertical

public static final int search_bar_default_color

public static final int search_plate

public static final int seek_thumb

public static final int selected_day_background

public static final int settings_header

public static final int settings_header_raw

public static final int spinner_background

public static final int spinner_dropdown_background

public static final int spinner_dropdown_background_down

public static final int spinner_dropdown_background_up

public static final int spinner_normal

public static final int spinner_press

public static final int spinner_select

public static final int spinnerbox_arrow_first

public static final int spinnerbox_arrow_last

public static final int spinnerbox_arrow_middle

public static final int spinnerbox_arrow_single

public static final int spinnerbox_arrows

public static final int spinnerbox_background_focus_yellow

public static final int spinnerbox_background_normal

public static final int spinnerbox_background_pressed_yellow

public static final int star_big_off

public static final int star_big_on

public static final int star_off

public static final int star_on

public static final int starting_frame

public static final int stat_notify_alarm

public static final int stat_notify_browser

public static final int stat_notify_calibrate_compass

public static final int stat_notify_call_mute

public static final int stat_notify_chat

public static final int stat_notify_disk_full

public static final int stat_notify_error

public static final int stat_notify_missed_call

public static final int stat_notify_more

public static final int stat_notify_sdcard

public static final int stat_notify_sdcard_usb

public static final int stat_notify_sync

public static final int stat_notify_sync_anim0

public static final int stat_notify_sync_error

public static final int stat_notify_sync_noanim

public static final int stat_notify_voicemail

public static final int stat_notify_wifi_in_range

public static final int stat_notify_xmpp

public static final int stat_sys_battery

public static final int stat_sys_battery_0

public static final int stat_sys_battery_10

public static final int stat_sys_battery_100

public static final int stat_sys_battery_20

public static final int stat_sys_battery_40

public static final int stat_sys_battery_60

public static final int stat_sys_battery_80

public static final int stat_sys_battery_charge

public static final int stat_sys_battery_charge_anim0

public static final int stat_sys_battery_charge_anim1

public static final int stat_sys_battery_charge_anim2

public static final int stat_sys_battery_charge_anim3

public static final int stat_sys_battery_charge_anim4

public static final int stat_sys_battery_charge_anim5

public static final int stat_sys_battery_unknown

public static final int stat_sys_data_bluetooth

public static final int stat_sys_data_bluetooth_connected

public static final int stat_sys_data_connected_3g

public static final int stat_sys_data_connected_e

public static final int stat_sys_data_connected_g

public static final int stat_sys_data_in_3g

public static final int stat_sys_data_in_e

public static final int stat_sys_data_in_g

public static final int stat_sys_data_inandout_3g

public static final int stat_sys_data_inandout_e

public static final int stat_sys_data_inandout_g

public static final int stat_sys_data_out_3g

public static final int stat_sys_data_out_e

public static final int stat_sys_data_out_g

public static final int stat_sys_download

public static final int stat_sys_download_anim0

public static final int stat_sys_download_anim1

public static final int stat_sys_download_anim2

public static final int stat_sys_download_anim3

public static final int stat_sys_download_anim4

public static final int stat_sys_download_anim5

public static final int stat_sys_download_done

public static final int stat_sys_gps_acquiring

public static final int stat_sys_gps_acquiring_anim

public static final int stat_sys_gps_on

public static final int stat_sys_headset

public static final int stat_sys_no_sim

public static final int stat_sys_phone_call

public static final int stat_sys_phone_call_forward

public static final int stat_sys_phone_call_on_hold

public static final int stat_sys_r_signal_0

public static final int stat_sys_r_signal_1

public static final int stat_sys_r_signal_2

public static final int stat_sys_r_signal_3

public static final int stat_sys_r_signal_4

public static final int stat_sys_ringer_silent

public static final int stat_sys_ringer_vibrate

public static final int stat_sys_signal_0

public static final int stat_sys_signal_1

public static final int stat_sys_signal_2

public static final int stat_sys_signal_3

public static final int stat_sys_signal_4

public static final int stat_sys_signal_flightmode

public static final int stat_sys_signal_null

public static final int stat_sys_speakerphone

public static final int stat_sys_upload

public static final int stat_sys_upload_anim0

public static final int stat_sys_upload_anim1

public static final int stat_sys_upload_anim2

public static final int stat_sys_upload_anim3

public static final int stat_sys_upload_anim4

public static final int stat_sys_upload_anim5

public static final int stat_sys_upload_done

public static final int stat_sys_warning

public static final int stat_sys_wifi_signal_0

public static final int stat_sys_wifi_signal_1

public static final int stat_sys_wifi_signal_2

public static final int stat_sys_wifi_signal_3

public static final int stat_sys_wifi_signal_4

public static final int status_bar_background

public static final int status_bar_close_on

public static final int status_bar_closed_default_background

public static final int status_bar_divider_shadow

public static final int status_bar_item_app_background

public static final int status_bar_item_app_background_normal

public static final int status_bar_item_background

public static final int status_bar_item_background_focus

public static final int status_bar_item_background_normal

public static final int status_bar_item_background_pressed

public static final int status_bar_item_clear_background

public static final int status_bar_opened_default_background

public static final int status_bar_shadow_bar

public static final int status_icon_background

public static final int statusbar_background

public static final int sub_menu_bottom_bright

public static final int sub_menu_top_dark

public static final int submenu_arrow

public static final int submenu_arrow_back

public static final int submenu_arrow_focus

public static final int submenu_arrow_nofocus

public static final int sym_action_call

public static final int sym_action_chat

public static final int sym_action_email

public static final int sym_action_map

public static final int sym_action_sms

public static final int sym_battery_white

public static final int sym_call_incoming

public static final int sym_call_missed

public static final int sym_call_outgoing

public static final int sym_contact_card

public static final int sym_def_app_icon

public static final int sym_default_number

public static final int tab_bottom_left

public static final int tab_bottom_right

public static final int tab_bottom_shadow

public static final int tab_focus

public static final int tab_focus_bar_left

public static final int tab_focus_bar_right

public static final int tab_indicator

public static final int tab_press

public static final int tab_press_bar_left

public static final int tab_press_bar_right

public static final int tab_selected

public static final int tab_selected_bar_left

public static final int tab_selected_bar_right

public static final int tab_selected_highlight

public static final int tab_unselected

public static final int tab_unselected_longpress

public static final int tab_unselected_pressed

public static final int tab_unselected_selected

public static final int textfield_default

public static final int textfield_disabled

public static final int textfield_disabled_selected

public static final int textfield_expanded_bottom_selected

public static final int textfield_expanded_bottom_unselected

public static final int textfield_expanded_center_selected

public static final int textfield_expanded_center_unselected

public static final int textfield_expanded_top_selected

public static final int textfield_expanded_top_unselected

public static final int textfield_pressed

public static final int textfield_selected

public static final int timepicker_down_btn

public static final int timepicker_down_disabled

public static final int timepicker_down_disabled_focused

public static final int timepicker_down_normal

public static final int timepicker_down_pressed

public static final int timepicker_down_selected

public static final int timepicker_input

public static final int timepicker_input_disabled

public static final int timepicker_input_normal

public static final int timepicker_input_pressed

public static final int timepicker_input_selected

public static final int timepicker_up_btn

public static final int timepicker_up_disabled

public static final int timepicker_up_disabled_focused

public static final int timepicker_up_normal

public static final int timepicker_up_pressed

public static final int timepicker_up_selected

public static final int title_bar

public static final int title_bar_shadow

public static final int toast_frame

public static final int unknown_image

public static final int zoom_in

public static final int zoom_in_pressed

public static final int zoom_indicator

public static final int zoom_indicator_selected

public static final int zoom_out

public static final int zoom_out_pressed

public static final int zoom_plate

public static final int zoom_track
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/R; )
@dalvik.annotation.InnerClass (accessFlags =25 name =id )
public final class com.android.internal.R$id extends java.lang.Object

----------------FIELDS----------------

public static final int KEYCODE_0

public static final int KEYCODE_1

public static final int KEYCODE_2

public static final int KEYCODE_3

public static final int KEYCODE_4

public static final int KEYCODE_5

public static final int KEYCODE_6

public static final int KEYCODE_7

public static final int KEYCODE_8

public static final int KEYCODE_9

public static final int KEYCODE_A

public static final int KEYCODE_ALT_LEFT

public static final int KEYCODE_ALT_RIGHT

public static final int KEYCODE_APOSTROPHE

public static final int KEYCODE_AT

public static final int KEYCODE_B

public static final int KEYCODE_BACK

public static final int KEYCODE_BACKSLASH

public static final int KEYCODE_C

public static final int KEYCODE_CALL

public static final int KEYCODE_CAMERA

public static final int KEYCODE_CLEAR

public static final int KEYCODE_COMMA

public static final int KEYCODE_D

public static final int KEYCODE_DEL

public static final int KEYCODE_DPAD_CENTER

public static final int KEYCODE_DPAD_DOWN

public static final int KEYCODE_DPAD_LEFT

public static final int KEYCODE_DPAD_RIGHT

public static final int KEYCODE_DPAD_UP

public static final int KEYCODE_E

public static final int KEYCODE_ENDCALL

public static final int KEYCODE_ENTER

public static final int KEYCODE_ENVELOPE

public static final int KEYCODE_EQUALS

public static final int KEYCODE_EXPLORER

public static final int KEYCODE_F

public static final int KEYCODE_FOCUS

public static final int KEYCODE_G

public static final int KEYCODE_GRAVE

public static final int KEYCODE_H

public static final int KEYCODE_HEADSETHOOK

public static final int KEYCODE_HOME

public static final int KEYCODE_I

public static final int KEYCODE_J

public static final int KEYCODE_K

public static final int KEYCODE_L

public static final int KEYCODE_LEFT_BRACKET

public static final int KEYCODE_M

public static final int KEYCODE_MENU

public static final int KEYCODE_MINUS

public static final int KEYCODE_N

public static final int KEYCODE_NOTIFICATION

public static final int KEYCODE_NUM

public static final int KEYCODE_O

public static final int KEYCODE_P

public static final int KEYCODE_PERIOD

public static final int KEYCODE_PLUS

public static final int KEYCODE_POUND

public static final int KEYCODE_POWER

public static final int KEYCODE_Q

public static final int KEYCODE_R

public static final int KEYCODE_RIGHT_BRACKET

public static final int KEYCODE_S

public static final int KEYCODE_SEARCH

public static final int KEYCODE_SEMICOLON

public static final int KEYCODE_SHIFT_LEFT

public static final int KEYCODE_SHIFT_RIGHT

public static final int KEYCODE_SLASH

public static final int KEYCODE_SOFT_LEFT

public static final int KEYCODE_SOFT_RIGHT

public static final int KEYCODE_SPACE

public static final int KEYCODE_STAR

public static final int KEYCODE_SYM

public static final int KEYCODE_T

public static final int KEYCODE_TAB

public static final int KEYCODE_U

public static final int KEYCODE_UNKNOWN

public static final int KEYCODE_V

public static final int KEYCODE_VOLUME_DOWN

public static final int KEYCODE_VOLUME_UP

public static final int KEYCODE_W

public static final int KEYCODE_X

public static final int KEYCODE_Y

public static final int KEYCODE_Z

public static final int afterDescendants

public static final int alarm

public static final int alertTitle

public static final int all

public static final int alternative

public static final int alwaysScroll

public static final int alwaysUse

public static final int amPm

public static final int animation

public static final int arrow

public static final int auto

public static final int auto_fit

public static final int background

public static final int backspace

public static final int batteryInfo

public static final int batteryInfoIcon

public static final int batteryInfoSpacer

public static final int batteryInfoText

public static final int beforeDescendants

public static final int behind

public static final int blocksDescendants

public static final int body

public static final int bold

public static final int bottom

public static final int bottom_to_top

public static final int button1

public static final int button2

public static final int button3

public static final int button4

public static final int button5

public static final int button6

public static final int buttonPanel

public static final int cancel

public static final int category_description

public static final int category_name

public static final int center

public static final int centerCrop

public static final int centerInside

public static final int center_horizontal

public static final int center_vertical

public static final int characterPicker

public static final int characters

public static final int check

public static final int checkbox

public static final int clamp

public static final int clearDefaultHint

public static final int clear_all_button

public static final int close

public static final int collapsing

public static final int column

public static final int columnWidth

public static final int container

public static final int content

public static final int contentPanel

public static final int custom

public static final int customPanel

public static final int cycle

public static final int dangerous

public static final int dangerous_perms_list

public static final int date

public static final int datePicker

public static final int day

public static final int decimal

public static final int decrement

public static final int disabled

public static final int edit

public static final int editable

public static final int edittext_container

public static final int eight

public static final int email

public static final int emergencyCall

public static final int emergencyCallAlone

public static final int emergencyCallButton

public static final int emergencyCallTogether

public static final int empty

public static final int end

public static final int expanded_menu

public static final int ffwd

public static final int fill

public static final int fill_horizontal

public static final int fill_parent

public static final int fill_vertical

public static final int fitCenter

public static final int fitEnd

public static final int fitStart

public static final int fitXY

public static final int five

public static final int fontScale

public static final int footerForgotPattern

public static final int footerNormal

public static final int forgotPattern

public static final int four

public static final int frame

public static final int gone

public static final int header

public static final int headerSimBad1

public static final int headerSimBad2

public static final int headerSimOk1

public static final int headerSimOk2

public static final int headerText

public static final int high

public static final int hint

public static final int horizontal

public static final int hour

public static final int icon

public static final int icon1

public static final int icon2

public static final int icon_menu

public static final int icons

public static final int image

public static final int increment

public static final int index

public static final int infinite

public static final int input

public static final int insideInset

public static final int insideOverlay

public static final int instructions

public static final int integer

public static final int invisible

public static final int italic

public static final int keyboard

public static final int keyboardHidden

public static final int keyguard

public static final int label

public static final int landscape

public static final int latestItems

public static final int latestTitle

public static final int left

public static final int leftSpacer

public static final int left_icon

public static final int left_to_right

public static final int level

public static final int level_percent

public static final int line

public static final int linear

public static final int list

public static final int listview

public static final int locale

public static final int lockInstructions

public static final int lockPattern

public static final int lock_screen

public static final int login

public static final int low

public static final int map

public static final int matrix

public static final int mcc

public static final int mediacontroller_progress

public static final int menu

public static final int message

public static final int meter

public static final int middle

public static final int minute

public static final int mirror

public static final int mnc

public static final int monospace

public static final int month

public static final int multiple

public static final int multipleChoice

public static final int music

public static final int navigation

public static final int next

public static final int nextAlarmInfo

public static final int nextAlarmSpacer

public static final int nextAlarmText

public static final int nine

public static final int noNotificationsTitle

public static final int no_applications_message

public static final int no_permissions

public static final int non_dangerous_perms_list

public static final int none

public static final int normal

public static final int nosensor

public static final int notification

public static final int notificationIcons

public static final int notificationLinearLayout

public static final int number

public static final int off

public static final int ok

public static final int one

public static final int oneLine

public static final int ongoingItems

public static final int ongoingTitle

public static final int orientation

public static final int other_stream_icon

public static final int outsideInset

public static final int outsideOverlay

public static final int oval

public static final int padding

public static final int parent

public static final int parentPanel

public static final int password

public static final int pause

public static final int perm_icon

public static final int permission_group

public static final int permission_list

public static final int phone

public static final int pinDisplay

public static final int pinDisplayGroup

public static final int plmnLabel

public static final int portrait

public static final int prev

public static final int primary

public static final int progress

public static final int progress_circular

public static final int progress_horizontal

public static final int progress_number

public static final int progress_percent

public static final int queryRewriteFromData

public static final int queryRewriteFromText

public static final int radial

public static final int radio

public static final int radio_power

public static final int random

public static final int rectangle

public static final int repeat

public static final int restart

public static final int reverse

public static final int rew

public static final int right

public static final int rightSpacer

public static final int right_container

public static final int right_icon

public static final int right_to_left

public static final int ring

public static final int ringer_stream_icon

public static final int ringtone

public static final int row

public static final int sans

public static final int screenLockedInfo

public static final int scroll

public static final int scrollView

public static final int scrolling

public static final int search_app_icon1

public static final int search_app_text1

public static final int search_badge

public static final int search_bar

public static final int search_edit_frame

public static final int search_go_btn

public static final int search_src_text

public static final int search_suggest_list

public static final int secondary

public static final int secondaryProgress

public static final int seekbar

public static final int select_dialog_listview

public static final int selectedIcon

public static final int sensor

public static final int sentences

public static final int separator

public static final int serif

public static final int setting_name

public static final int setting_value_layout

public static final int setting_value_text

public static final int seven

public static final int shortcut

public static final int showSearchIconAsBadge

public static final int showSearchLabelAsBadge

public static final int show_more

public static final int show_more_icon

public static final int show_more_text

public static final int signature

public static final int signatureOrSystem

public static final int signed

public static final int silent

public static final int single

public static final int singleChoice

public static final int singleInstance

public static final int singleTask

public static final int singleTop

public static final int six

public static final int spacer

public static final int spacerTop

public static final int spacingWidth

public static final int spannable

public static final int spnLabel

public static final int start

public static final int status

public static final int statusIcons

public static final int subtitle

public static final int summary

public static final int sweep

public static final int system

public static final int tabcontent

public static final int tabhost

public static final int tabs

public static final int text

public static final int text1

public static final int text2

public static final int three

public static final int ticker

public static final int tickerIcon

public static final int tickerText

public static final int time

public static final int timePicker

public static final int time_current

public static final int timepicker_input

public static final int title

public static final int titleDivider

public static final int title_container

public static final int title_template

public static final int toggle

public static final int top

public static final int topHeader

public static final int topPanel

public static final int top_to_bottom

public static final int touchscreen

public static final int two

public static final int twoLine

public static final int unlockLockIcon

public static final int unspecified

public static final int useDefaultText

public static final int user

public static final int vertical

public static final int visible

public static final int voice

public static final int web

public static final int widget_frame

public static final int words

public static final int wrap_content

public static final int year

public static final int zero

public static final int zoomControls

public static final int zoomIn

public static final int zoomMagnify

public static final int zoomOut
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =layout )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/R; )
public final class com.android.internal.R$layout extends java.lang.Object

----------------FIELDS----------------

public static final int activity_list_item

public static final int alert_dialog

public static final int alert_dialog_progress

public static final int always_use_checkbox

public static final int app_permission_item

public static final int app_perms_summary

public static final int auto_complete_list

public static final int battery_low

public static final int battery_status

public static final int browser_link_context_header

public static final int character_picker

public static final int character_picker_button

public static final int date_picker

public static final int date_picker_dialog

public static final int dialog_custom_title

public static final int dialog_title

public static final int dialog_title_icons

public static final int expandable_list_content

public static final int expanded_menu_layout

public static final int global_actions_item

public static final int google_web_content_helper_layout

public static final int icon_menu_item_layout

public static final int icon_menu_layout

public static final int keyguard

public static final int keyguard_screen_glogin_unlock

public static final int keyguard_screen_lock

public static final int keyguard_screen_sim_pin_landscape

public static final int keyguard_screen_sim_pin_portrait

public static final int keyguard_screen_unlock_landscape

public static final int keyguard_screen_unlock_portrait

public static final int list_content

public static final int list_menu_item_checkbox

public static final int list_menu_item_icon

public static final int list_menu_item_layout

public static final int list_menu_item_radio

public static final int media_controller

public static final int menu_item

public static final int menu_item_divider

public static final int number_picker

public static final int number_picker_edit

public static final int popup_menu_layout

public static final int power_dialog

public static final int preference

public static final int preference_category

public static final int preference_child

public static final int preference_dialog_edittext

public static final int preference_information

public static final int preference_list_content

public static final int preference_widget_checkbox

public static final int preferences

public static final int progress_dialog

public static final int recent_apps_dialog

public static final int recent_apps_icon

public static final int resolve_list_item

public static final int safe_mode

public static final int screen

public static final int screen_custom_title

public static final int screen_progress

public static final int screen_simple

public static final int screen_title

public static final int screen_title_icons

public static final int search_bar

public static final int search_dropdown_app_selector

public static final int search_dropdown_item_1line

public static final int search_dropdown_item_2line

public static final int search_dropdown_item_icons_1line

public static final int search_dropdown_item_icons_2line

public static final int seekbar_dialog

public static final int select_dialog

public static final int select_dialog_item

public static final int select_dialog_multichoice

public static final int select_dialog_singlechoice

public static final int setting_list_category

public static final int setting_list_expanded_category

public static final int setting_list_setting

public static final int setting_list_setting_value_text

public static final int simple_dropdown_hint

public static final int simple_dropdown_item_1line

public static final int simple_dropdown_item_2line

public static final int simple_expandable_list_item_1

public static final int simple_expandable_list_item_2

public static final int simple_gallery_item

public static final int simple_list_item_1

public static final int simple_list_item_2

public static final int simple_list_item_checked

public static final int simple_list_item_multiple_choice

public static final int simple_list_item_single_choice

public static final int simple_spinner_dropdown_item

public static final int simple_spinner_item

public static final int status_bar

public static final int status_bar_expanded

public static final int status_bar_icon

public static final int status_bar_latest_event

public static final int status_bar_latest_event_content

public static final int status_bar_tracking

public static final int submenu_item

public static final int tab_content

public static final int tab_indicator

public static final int test_list_item

public static final int textview_hint

public static final int time_picker

public static final int time_picker_dialog

public static final int time_picker_text

public static final int transient_notification

public static final int two_line_list_item

public static final int typing_filter

public static final int volume_adjust

public static final int zoom_controls

public static final int zoom_magnify
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/R; )
@dalvik.annotation.InnerClass (accessFlags =25 name =plurals )
public final class com.android.internal.R$plurals extends java.lang.Object

----------------FIELDS----------------

public static final int wifi_available

public static final int wifi_available_detailed
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/R; )
@dalvik.annotation.InnerClass (accessFlags =25 name =raw )
public final class com.android.internal.R$raw extends java.lang.Object

----------------FIELDS----------------

public static final int fallbackring
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =string )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/R; )
public final class com.android.internal.R$string extends java.lang.Object

----------------FIELDS----------------

public static final int BaMmi

public static final int CLIRDefaultOffNextCallOff

public static final int CLIRDefaultOffNextCallOn

public static final int CLIRDefaultOnNextCallOff

public static final int CLIRDefaultOnNextCallOn

public static final int CLIRPermanent

public static final int CfMmi

public static final int ClipMmi

public static final int ClirMmi

public static final int CwMmi

public static final int Midnight

public static final int Noon

public static final int PinMmi

public static final int PwdMmi

public static final int VideoView_error_button

public static final int VideoView_error_text_unknown

public static final int VideoView_error_title

public static final int abbrev_month

public static final int abbrev_month_day

public static final int abbrev_month_day_year

public static final int abbrev_month_year

public static final int activate_keyguard

public static final int aerr_application

public static final int aerr_process

public static final int aerr_title

public static final int ago

public static final int alwaysUse

public static final int am

public static final int anr_activity_application

public static final int anr_activity_process

public static final int anr_application_process

public static final int anr_process

public static final int anr_title

public static final int badPin

public static final int badPuk

public static final int battery_low_percent_format

public static final int battery_low_subtitle

public static final int battery_low_title

public static final int battery_status_charging

public static final int battery_status_text_percent_format

public static final int before

public static final int browserSavedFormData

public static final int byteShort

public static final int cancel

public static final int capital_off

public static final int capital_on

public static final int cfReasonBusy

public static final int cfReasonNR

public static final int cfReasonNRy

public static final int cfReasonUnconditional

public static final int cfTemplateForwarded

public static final int cfTemplateForwardedTime

public static final int cfTemplateNotForwarded

public static final int cfTemplateRegistered

public static final int cfTemplateRegisteredTime

public static final int chooseActivity

public static final int clearDefaultHintMsg

public static final int compass_accuracy_banner

public static final int compass_accuracy_notificaction_body

public static final int compass_accuracy_notificaction_title

public static final int contentServiceSync

public static final int contentServiceSyncErrorNotificationDesc

public static final int contentServiceSyncNotificationDesc

public static final int contentServiceSyncNotificationTitle

public static final int contentServiceTooManyDeletesNotificationDesc

public static final int contentServiceXmppAvailable

public static final int copy

public static final int copyAll

public static final int copyUrl

public static final int cut

public static final int cutAll

public static final int daily

public static final int daily_format

public static final int date1_date2

public static final int date1_time1_date2_time2

public static final int date_picker_month

public static final int date_picker_set

public static final int date_range_separator

public static final int date_time_set

public static final int day

public static final int day_of_week_long_friday

public static final int day_of_week_long_monday

public static final int day_of_week_long_saturday

public static final int day_of_week_long_sunday

public static final int day_of_week_long_thursday

public static final int day_of_week_long_tuesday

public static final int day_of_week_long_wednesday

public static final int day_of_week_medium_friday

public static final int day_of_week_medium_monday

public static final int day_of_week_medium_saturday

public static final int day_of_week_medium_sunday

public static final int day_of_week_medium_thursday

public static final int day_of_week_medium_tuesday

public static final int day_of_week_medium_wednesday

public static final int day_of_week_short_friday

public static final int day_of_week_short_monday

public static final int day_of_week_short_saturday

public static final int day_of_week_short_sunday

public static final int day_of_week_short_thursday

public static final int day_of_week_short_tuesday

public static final int day_of_week_short_wednesday

public static final int day_of_week_shorter_friday

public static final int day_of_week_shorter_monday

public static final int day_of_week_shorter_saturday

public static final int day_of_week_shorter_sunday

public static final int day_of_week_shorter_thursday

public static final int day_of_week_shorter_tuesday

public static final int day_of_week_shorter_wednesday

public static final int day_of_week_shortest_friday

public static final int day_of_week_shortest_monday

public static final int day_of_week_shortest_saturday

public static final int day_of_week_shortest_sunday

public static final int day_of_week_shortest_thursday

public static final int day_of_week_shortest_tuesday

public static final int day_of_week_shortest_wednesday

public static final int days

public static final int daysDurationFuturePlural

public static final int daysDurationPastPlural

public static final int debug

public static final int defaultMsisdnAlphaTag

public static final int defaultVoiceMailAlphaTag

public static final int default_permission_group

public static final int elapsed_time_short_format_h_mm_ss

public static final int elapsed_time_short_format_mm_ss

public static final int ellipsis

public static final int emergency_call_dialog_call

public static final int emergency_call_dialog_cancel

public static final int emergency_call_dialog_number_for_display

public static final int emergency_call_dialog_text

public static final int emergency_call_number_uri

public static final int emptyPhoneNumber

public static final int every_weekday

public static final int factorytest_failed

public static final int factorytest_no_action

public static final int factorytest_not_system

public static final int factorytest_reboot

public static final int force_close

public static final int friday

public static final int gigabyteShort

public static final int global_action_lock

public static final int global_action_power_off

public static final int global_action_silent_mode_off_status

public static final int global_action_silent_mode_on_status

public static final int global_action_toggle_silent_mode

public static final int global_actions

public static final int googlewebcontenthelper_loading

public static final int hour

public static final int hours

public static final int httpError

public static final int httpErrorAuth

public static final int httpErrorBadUrl

public static final int httpErrorConnect

public static final int httpErrorFailedSslHandshake

public static final int httpErrorFile

public static final int httpErrorFileNotFound

public static final int httpErrorIO

public static final int httpErrorLookup

public static final int httpErrorOk

public static final int httpErrorProxyAuth

public static final int httpErrorRedirectLoop

public static final int httpErrorTimeout

public static final int httpErrorTooManyRequests

public static final int httpErrorUnsupportedAuthScheme

public static final int httpErrorUnsupportedScheme

public static final int in

public static final int invalidPin

public static final int keyguard_label_text

public static final int keyguard_password_emergency_instructions

public static final int keyguard_password_enter_pin_code

public static final int keyguard_password_instructions

public static final int keyguard_password_wrong_pin_code

public static final int kilobyteShort

public static final int lockscreen_carrier_default

public static final int lockscreen_carrier_key

public static final int lockscreen_emergency_call

public static final int lockscreen_failed_attempts_almost_glogin

public static final int lockscreen_forgot_pattern_button_text

public static final int lockscreen_glogin_instructions

public static final int lockscreen_glogin_invalid_input

public static final int lockscreen_glogin_password_hint

public static final int lockscreen_glogin_submit_button

public static final int lockscreen_glogin_too_many_attempts

public static final int lockscreen_glogin_username_hint

public static final int lockscreen_instructions_when_pattern_disabled

public static final int lockscreen_instructions_when_pattern_enabled

public static final int lockscreen_low_battery

public static final int lockscreen_missing_sim_instructions

public static final int lockscreen_missing_sim_message

public static final int lockscreen_missing_sim_message_short

public static final int lockscreen_network_locked_message

public static final int lockscreen_pattern_correct

public static final int lockscreen_pattern_instructions

public static final int lockscreen_pattern_wrong

public static final int lockscreen_plugged_in

public static final int lockscreen_screen_locked

public static final int lockscreen_sim_locked_message

public static final int lockscreen_sim_puk_locked_instructions

public static final int lockscreen_sim_puk_locked_message

public static final int lockscreen_sim_unlock_progress_dialog_message

public static final int lockscreen_too_many_failed_attempts_countdown

public static final int lockscreen_too_many_failed_attempts_dialog_message

public static final int lockscreen_too_many_failed_attempts_dialog_title

public static final int low_internal_storage_text

public static final int low_internal_storage_view_text

public static final int low_internal_storage_view_title

public static final int low_memory

public static final int me

public static final int megabyteShort

public static final int menu_delete_shortcut_label

public static final int menu_enter_shortcut_label

public static final int menu_space_shortcut_label

public static final int midnight

public static final int minute

public static final int minutes

public static final int mismatchPin

public static final int mmiComplete

public static final int mmiError

public static final int monday

public static final int month

public static final int month_day

public static final int month_day_year

public static final int month_long_april

public static final int month_long_august

public static final int month_long_december

public static final int month_long_february

public static final int month_long_january

public static final int month_long_july

public static final int month_long_june

public static final int month_long_march

public static final int month_long_may

public static final int month_long_november

public static final int month_long_october

public static final int month_long_september

public static final int month_medium_april

public static final int month_medium_august

public static final int month_medium_december

public static final int month_medium_february

public static final int month_medium_january

public static final int month_medium_july

public static final int month_medium_june

public static final int month_medium_march

public static final int month_medium_may

public static final int month_medium_november

public static final int month_medium_october

public static final int month_medium_september

public static final int month_shortest_april

public static final int month_shortest_august

public static final int month_shortest_december

public static final int month_shortest_february

public static final int month_shortest_january

public static final int month_shortest_july

public static final int month_shortest_june

public static final int month_shortest_march

public static final int month_shortest_may

public static final int month_shortest_november

public static final int month_shortest_october

public static final int month_shortest_september

public static final int month_year

public static final int monthly

public static final int monthly_format

public static final int more_item_label

public static final int needPuk2

public static final int no

public static final int noApplications

public static final int no_permissions

public static final int no_recent_tasks

public static final int noon

public static final int numeric_date

public static final int numeric_date_notation

public static final int numeric_md1_md2

public static final int numeric_md1_time1_md2_time2

public static final int numeric_mdy1_mdy2

public static final int numeric_mdy1_time1_mdy2_time2

public static final int numeric_wday1_md1_time1_wday2_md2_time2

public static final int numeric_wday1_md1_wday2_md2

public static final int numeric_wday1_mdy1_time1_wday2_mdy2_time2

public static final int numeric_wday1_mdy1_wday2_mdy2

public static final int ok

public static final int oneMonthDurationPast

public static final int open_permission_deny

public static final int passwordIncorrect

public static final int paste

public static final int permdesc_accessCoarseLocation

public static final int permdesc_accessFineLocation

public static final int permdesc_accessLocationExtraCommands

public static final int permdesc_accessMockLocation

public static final int permdesc_accessNetworkState

public static final int permdesc_accessPhoneInterface

public static final int permdesc_accessSurfaceFlinger

public static final int permdesc_accessWifiState

public static final int permdesc_addSystemService

public static final int permdesc_batteryStats

public static final int permdesc_bluetooth

public static final int permdesc_bluetoothAdmin

public static final int permdesc_brick

public static final int permdesc_broadcastPackageRemoved

public static final int permdesc_broadcastSticky

public static final int permdesc_callPhone

public static final int permdesc_callPrivileged

public static final int permdesc_camera

public static final int permdesc_changeComponentState

public static final int permdesc_changeConfiguration

public static final int permdesc_changeNetworkState

public static final int permdesc_changeWifiState

public static final int permdesc_checkinProperties

public static final int permdesc_clearAppCache

public static final int permdesc_clearAppUserData

public static final int permdesc_createNetworkSockets

public static final int permdesc_deleteCacheFiles

public static final int permdesc_deletePackages

public static final int permdesc_devicePower

public static final int permdesc_diagnostic

public static final int permdesc_disableKeyguard

public static final int permdesc_dump

public static final int permdesc_expandStatusBar

public static final int permdesc_factoryTest

public static final int permdesc_flashlight

public static final int permdesc_forceBack

public static final int permdesc_fotaUpdate

public static final int permdesc_getAccounts

public static final int permdesc_getPackageSize

public static final int permdesc_getTasks

public static final int permdesc_hardware_test

public static final int permdesc_injectEvents

public static final int permdesc_installPackages

public static final int permdesc_internalSystemWindow

public static final int permdesc_locationUpdates

public static final int permdesc_manageAppTokens

public static final int permdesc_masterClear

public static final int permdesc_modifyAudioSettings

public static final int permdesc_modifyPhoneState

public static final int permdesc_mount_unmount_filesystems

public static final int permdesc_persistentActivity

public static final int permdesc_processOutgoingCalls

public static final int permdesc_raisedThreadPriority

public static final int permdesc_readCalendar

public static final int permdesc_readContacts

public static final int permdesc_readFrameBuffer

public static final int permdesc_readInputState

public static final int permdesc_readLogs

public static final int permdesc_readOwnerData

public static final int permdesc_readPhoneState

public static final int permdesc_readSms

public static final int permdesc_readSyncSettings

public static final int permdesc_readSyncStats

public static final int permdesc_reboot

public static final int permdesc_receiveBootCompleted

public static final int permdesc_receiveMms

public static final int permdesc_receiveSms

public static final int permdesc_receiveWapPush

public static final int permdesc_recordAudio

public static final int permdesc_reorderTasks

public static final int permdesc_restartPackages

public static final int permdesc_runInstrumentation

public static final int permdesc_runSetActivityWatcher

public static final int permdesc_sendSms

public static final int permdesc_setAlwaysFinish

public static final int permdesc_setAnimationScale

public static final int permdesc_setDebugApp

public static final int permdesc_setOrientation

public static final int permdesc_setPreferredApplications

public static final int permdesc_setProcessForeground

public static final int permdesc_setProcessLimit

public static final int permdesc_setTimeZone

public static final int permdesc_setWallpaper

public static final int permdesc_setWallpaperHints

public static final int permdesc_signalPersistentProcesses

public static final int permdesc_statusBar

public static final int permdesc_subscribedFeedsRead

public static final int permdesc_subscribedFeedsWrite

public static final int permdesc_systemAlertWindow

public static final int permdesc_vibrate

public static final int permdesc_wakeLock

public static final int permdesc_writeApnSettings

public static final int permdesc_writeCalendar

public static final int permdesc_writeContacts

public static final int permdesc_writeGservices

public static final int permdesc_writeOwnerData

public static final int permdesc_writeSettings

public static final int permdesc_writeSms

public static final int permdesc_writeSyncSettings

public static final int permgroupdesc_accounts

public static final int permgroupdesc_costMoney

public static final int permgroupdesc_developmentTools

public static final int permgroupdesc_hardwareControls

public static final int permgroupdesc_location

public static final int permgroupdesc_messages

public static final int permgroupdesc_network

public static final int permgroupdesc_personalInfo

public static final int permgroupdesc_phoneCalls

public static final int permgroupdesc_systemTools

public static final int permgrouplab_accounts

public static final int permgrouplab_costMoney

public static final int permgrouplab_developmentTools

public static final int permgrouplab_hardwareControls

public static final int permgrouplab_location

public static final int permgrouplab_messages

public static final int permgrouplab_network

public static final int permgrouplab_personalInfo

public static final int permgrouplab_phoneCalls

public static final int permgrouplab_systemTools

public static final int permissions_format

public static final int permlab_accessCoarseLocation

public static final int permlab_accessFineLocation

public static final int permlab_accessLocationExtraCommands

public static final int permlab_accessMockLocation

public static final int permlab_accessNetworkState

public static final int permlab_accessPhoneInterface

public static final int permlab_accessSurfaceFlinger

public static final int permlab_accessWifiState

public static final int permlab_addSystemService

public static final int permlab_batteryStats

public static final int permlab_bluetooth

public static final int permlab_bluetoothAdmin

public static final int permlab_brick

public static final int permlab_broadcastPackageRemoved

public static final int permlab_broadcastSticky

public static final int permlab_callPhone

public static final int permlab_callPrivileged

public static final int permlab_camera

public static final int permlab_changeComponentState

public static final int permlab_changeConfiguration

public static final int permlab_changeNetworkState

public static final int permlab_changeWifiState

public static final int permlab_checkinProperties

public static final int permlab_clearAppCache

public static final int permlab_clearAppUserData

public static final int permlab_createNetworkSockets

public static final int permlab_deleteCacheFiles

public static final int permlab_deletePackages

public static final int permlab_devicePower

public static final int permlab_diagnostic

public static final int permlab_disableKeyguard

public static final int permlab_dump

public static final int permlab_expandStatusBar

public static final int permlab_factoryTest

public static final int permlab_flashlight

public static final int permlab_forceBack

public static final int permlab_fotaUpdate

public static final int permlab_getAccounts

public static final int permlab_getPackageSize

public static final int permlab_getTasks

public static final int permlab_hardware_test

public static final int permlab_injectEvents

public static final int permlab_installPackages

public static final int permlab_internalSystemWindow

public static final int permlab_locationUpdates

public static final int permlab_manageAppTokens

public static final int permlab_masterClear

public static final int permlab_modifyAudioSettings

public static final int permlab_modifyPhoneState

public static final int permlab_mount_unmount_filesystems

public static final int permlab_persistentActivity

public static final int permlab_processOutgoingCalls

public static final int permlab_raisedThreadPriority

public static final int permlab_readCalendar

public static final int permlab_readContacts

public static final int permlab_readFrameBuffer

public static final int permlab_readInputState

public static final int permlab_readLogs

public static final int permlab_readOwnerData

public static final int permlab_readPhoneState

public static final int permlab_readSms

public static final int permlab_readSyncSettings

public static final int permlab_readSyncStats

public static final int permlab_reboot

public static final int permlab_receiveBootCompleted

public static final int permlab_receiveMms

public static final int permlab_receiveSms

public static final int permlab_receiveWapPush

public static final int permlab_recordAudio

public static final int permlab_reorderTasks

public static final int permlab_restartPackages

public static final int permlab_runInstrumentation

public static final int permlab_runSetActivityWatcher

public static final int permlab_sendSms

public static final int permlab_setAlwaysFinish

public static final int permlab_setAnimationScale

public static final int permlab_setDebugApp

public static final int permlab_setOrientation

public static final int permlab_setPreferredApplications

public static final int permlab_setProcessForeground

public static final int permlab_setProcessLimit

public static final int permlab_setTimeZone

public static final int permlab_setWallpaper

public static final int permlab_setWallpaperHints

public static final int permlab_signalPersistentProcesses

public static final int permlab_statusBar

public static final int permlab_subscribedFeedsRead

public static final int permlab_subscribedFeedsWrite

public static final int permlab_systemAlertWindow

public static final int permlab_vibrate

public static final int permlab_wakeLock

public static final int permlab_writeApnSettings

public static final int permlab_writeCalendar

public static final int permlab_writeContacts

public static final int permlab_writeGservices

public static final int permlab_writeOwnerData

public static final int permlab_writeSettings

public static final int permlab_writeSms

public static final int permlab_writeSyncSettings

public static final int perms_hide

public static final int perms_show_all

public static final int petabyteShort

public static final int pm

public static final int power_dialog

public static final int power_off

public static final int prepend_shortcut_label

public static final int preposition_for_date

public static final int preposition_for_time

public static final int preposition_for_year

public static final int primaryEmailAddressLabel

public static final int ringtone_default

public static final int ringtone_default_with_actual

public static final int ringtone_picker_title

public static final int ringtone_silent

public static final int ringtone_unknown

public static final int safeMode

public static final int same_month_md1_md2

public static final int same_month_md1_time1_md2_time2

public static final int same_month_mdy1_mdy2

public static final int same_month_mdy1_time1_mdy2_time2

public static final int same_month_wday1_md1_time1_wday2_md2_time2

public static final int same_month_wday1_md1_wday2_md2

public static final int same_month_wday1_mdy1_time1_wday2_mdy2_time2

public static final int same_month_wday1_mdy1_wday2_mdy2

public static final int same_year_md1_md2

public static final int same_year_md1_time1_md2_time2

public static final int same_year_mdy1_mdy2

public static final int same_year_mdy1_time1_mdy2_time2

public static final int same_year_wday1_md1_time1_wday2_md2_time2

public static final int same_year_wday1_md1_wday2_md2

public static final int same_year_wday1_mdy1_time1_wday2_mdy2_time2

public static final int same_year_wday1_mdy1_wday2_mdy2

public static final int saturday

public static final int save_password_label

public static final int save_password_message

public static final int save_password_never

public static final int save_password_notnow

public static final int save_password_remember

public static final int screen_lock

public static final int screen_progress

public static final int search_go

public static final int search_hint_placeholder

public static final int second

public static final int seconds

public static final int selectAll

public static final int selectMenuLabel

public static final int select_character

public static final int sendText

public static final int serviceClassData

public static final int serviceClassDataAsync

public static final int serviceClassDataSync

public static final int serviceClassFAX

public static final int serviceClassPAD

public static final int serviceClassPacket

public static final int serviceClassSMS

public static final int serviceClassVoice

public static final int serviceDisabled

public static final int serviceEnabled

public static final int serviceEnabledFor

public static final int serviceErased

public static final int serviceNotProvisioned

public static final int serviceRegistered

public static final int shutdown_confirm

public static final int shutdown_progress

public static final int silent_mode

public static final int simAbsentLabel

public static final int simNetworkPersonalizationLabel

public static final int simPINLabel

public static final int simPUKLabel

public static final int sms_control_default_app_name

public static final int sms_control_message

public static final int sms_control_no

public static final int sms_control_title

public static final int sms_control_yes

public static final int status_bar_applications_label

public static final int status_bar_applications_title

public static final int status_bar_clear_all_button

public static final int status_bar_close

public static final int status_bar_date_format

public static final int status_bar_latest_events_label

public static final int status_bar_latest_events_title

public static final int status_bar_no_notifications

public static final int status_bar_no_notifications_title

public static final int status_bar_ongoing_events_label

public static final int status_bar_ongoing_events_title

public static final int status_bar_time_format

public static final int sunday

public static final int terabyteShort

public static final int text_copied

public static final int thursday

public static final int time1_time2

public static final int time_date

public static final int time_picker_ColonBetweenHourAndMinute_text

public static final int time_picker_set

public static final int time_picker_setButton_text

public static final int time_wday

public static final int time_wday_date

public static final int today

public static final int tomorrow

public static final int tuesday

public static final int turn_off_radio

public static final int turn_on_radio

public static final int unknownName

public static final int untitled

public static final int volume_alarm

public static final int volume_call

public static final int volume_music

public static final int volume_ringtone

public static final int volume_unknown

public static final int wait

public static final int wday1_date1_time1_wday2_date2_time2

public static final int wday1_date1_wday2_date2

public static final int wday_date

public static final int web_user_agent

public static final int wednesday

public static final int week

public static final int weekly

public static final int weekly_format

public static final int weeks

public static final int whichApplication

public static final int year

public static final int yearly

public static final int yearly_format

public static final int years

public static final int yes

public static final int yesterday
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/R; )
@dalvik.annotation.InnerClass (accessFlags =25 name =style )
public final class com.android.internal.R$style extends java.lang.Object

----------------FIELDS----------------

public static final int AlertDialog

public static final int Animation

public static final int Animation_Activity

public static final int Animation_Dialog

public static final int Animation_DropDownDown

public static final int Animation_DropDownUp

public static final int Animation_OptionsPanel

public static final int Animation_SubMenuPanel

public static final int Animation_Toast

public static final int Animation_Translucent

public static final int Animation_TypingFilter

public static final int Animation_TypingFilterRestore

public static final int DialogWindowTitle

public static final int MediaButton

public static final int MediaButton_Ffwd

public static final int MediaButton_Next

public static final int MediaButton_Pause

public static final int MediaButton_Play

public static final int MediaButton_Previous

public static final int MediaButton_Rew

public static final int Preference

public static final int Preference_Category

public static final int Preference_CheckBoxPreference

public static final int Preference_DialogPreference

public static final int Preference_DialogPreference_EditTextPreference

public static final int Preference_DialogPreference_YesNoPreference

public static final int Preference_Information

public static final int Preference_PreferenceScreen

public static final int Preference_RingtonePreference

public static final int TextAppearance

public static final int TextAppearance_DialogWindowTitle

public static final int TextAppearance_Inverse

public static final int TextAppearance_Large

public static final int TextAppearance_Large_Inverse

public static final int TextAppearance_Medium

public static final int TextAppearance_Medium_Inverse

public static final int TextAppearance_Small

public static final int TextAppearance_Small_Inverse

public static final int TextAppearance_StatusBarTitle

public static final int TextAppearance_Theme

public static final int TextAppearance_Theme_Dialog

public static final int TextAppearance_Theme_Dialog_AppError

public static final int TextAppearance_Widget

public static final int TextAppearance_Widget_Button

public static final int TextAppearance_Widget_DropDownHint

public static final int TextAppearance_Widget_DropDownItem

public static final int TextAppearance_Widget_EditText

public static final int TextAppearance_Widget_IconMenu_Item

public static final int TextAppearance_Widget_TabWidget

public static final int TextAppearance_Widget_TextView

public static final int TextAppearance_Widget_TextView_PopupMenu

public static final int TextAppearance_Widget_TextView_SpinnerItem

public static final int TextAppearance_WindowTitle

public static final int Theme

public static final int Theme_Black

public static final int Theme_Black_NoTitleBar

public static final int Theme_Black_NoTitleBar_Fullscreen

public static final int Theme_Dialog

public static final int Theme_Dialog_Alert

public static final int Theme_Dialog_AppError

public static final int Theme_ExpandedMenu

public static final int Theme_IconMenu

public static final int Theme_Light

public static final int Theme_Light_NoTitleBar

public static final int Theme_Light_NoTitleBar_Fullscreen

public static final int Theme_NoTitleBar

public static final int Theme_NoTitleBar_Fullscreen

public static final int Theme_Translucent

public static final int Theme_Translucent_NoTitleBar

public static final int Theme_Translucent_NoTitleBar_Fullscreen

public static final int Widget

public static final int Widget_AbsListView

public static final int Widget_AutoCompleteTextView

public static final int Widget_Button

public static final int Widget_Button_Inset

public static final int Widget_Button_Small

public static final int Widget_Button_Toggle

public static final int Widget_CompoundButton

public static final int Widget_CompoundButton_CheckBox

public static final int Widget_CompoundButton_RadioButton

public static final int Widget_CompoundButton_Star

public static final int Widget_DropDownItem

public static final int Widget_DropDownItem_Spinner

public static final int Widget_EditText

public static final int Widget_ExpandableListView

public static final int Widget_Gallery

public static final int Widget_GridView

public static final int Widget_ImageButton

public static final int Widget_ImageWell

public static final int Widget_ListView

public static final int Widget_ListView_DropDown

public static final int Widget_ListView_Menu

public static final int Widget_ListView_White

public static final int Widget_PopupWindow

public static final int Widget_ProgressBar

public static final int Widget_ProgressBar_Horizontal

public static final int Widget_ProgressBar_Large

public static final int Widget_ProgressBar_Small

public static final int Widget_ProgressBar_Small_Title

public static final int Widget_RatingBar

public static final int Widget_RatingBar_Indicator

public static final int Widget_RatingBar_Small

public static final int Widget_ScrollView

public static final int Widget_SeekBar

public static final int Widget_Spinner

public static final int Widget_TabWidget

public static final int Widget_TextView

public static final int Widget_TextView_ListSeparator

public static final int Widget_TextView_PopupMenu

public static final int Widget_TextView_SpinnerItem

public static final int Widget_WebView

public static final int WindowTitle

public static final int WindowTitleBackground
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/R; )
@dalvik.annotation.InnerClass (accessFlags =25 name =styleable )
public final class com.android.internal.R$styleable extends java.lang.Object

----------------FIELDS----------------

public static final int[] AbsListView

public static final int AbsListView_cacheColorHint

public static final int AbsListView_drawSelectorOnTop

public static final int AbsListView_listSelector

public static final int AbsListView_scrollingCache

public static final int AbsListView_stackFromBottom

public static final int AbsListView_textFilterEnabled

public static final int AbsListView_transcriptMode

public static final int[] AbsSpinner

public static final int AbsSpinner_entries

public static final int[] AbsoluteLayout_Layout

public static final int AbsoluteLayout_Layout_layout_x

public static final int AbsoluteLayout_Layout_layout_y

public static final int[] AccelerateInterpolator

public static final int AccelerateInterpolator_factor

public static final int[] AlertDialog

public static final int AlertDialog_bottomBright

public static final int AlertDialog_bottomDark

public static final int AlertDialog_bottomMedium

public static final int AlertDialog_centerBright

public static final int AlertDialog_centerDark

public static final int AlertDialog_centerMedium

public static final int AlertDialog_fullBright

public static final int AlertDialog_fullDark

public static final int AlertDialog_topBright

public static final int AlertDialog_topDark

public static final int[] AlphaAnimation

public static final int AlphaAnimation_fromAlpha

public static final int AlphaAnimation_toAlpha

public static final int[] AnalogClock

public static final int AnalogClock_dial

public static final int AnalogClock_hand_hour

public static final int AnalogClock_hand_minute

public static final int[] AndroidManifest

public static final int[] AndroidManifestAction

public static final int AndroidManifestAction_name

public static final int[] AndroidManifestActivity

public static final int[] AndroidManifestActivityAlias

public static final int AndroidManifestActivityAlias_enabled

public static final int AndroidManifestActivityAlias_exported

public static final int AndroidManifestActivityAlias_icon

public static final int AndroidManifestActivityAlias_label

public static final int AndroidManifestActivityAlias_name

public static final int AndroidManifestActivityAlias_permission

public static final int AndroidManifestActivityAlias_targetActivity

public static final int AndroidManifestActivity_allowTaskReparenting

public static final int AndroidManifestActivity_alwaysRetainTaskState

public static final int AndroidManifestActivity_clearTaskOnLaunch

public static final int AndroidManifestActivity_configChanges

public static final int AndroidManifestActivity_enabled

public static final int AndroidManifestActivity_excludeFromRecents

public static final int AndroidManifestActivity_exported

public static final int AndroidManifestActivity_finishOnTaskLaunch

public static final int AndroidManifestActivity_icon

public static final int AndroidManifestActivity_label

public static final int AndroidManifestActivity_launchMode

public static final int AndroidManifestActivity_multiprocess

public static final int AndroidManifestActivity_name

public static final int AndroidManifestActivity_permission

public static final int AndroidManifestActivity_process

public static final int AndroidManifestActivity_screenOrientation

public static final int AndroidManifestActivity_stateNotNeeded

public static final int AndroidManifestActivity_taskAffinity

public static final int AndroidManifestActivity_theme

public static final int[] AndroidManifestApplication

public static final int AndroidManifestApplication_allowClearUserData

public static final int AndroidManifestApplication_allowTaskReparenting

public static final int AndroidManifestApplication_debuggable

public static final int AndroidManifestApplication_description

public static final int AndroidManifestApplication_enabled

public static final int AndroidManifestApplication_hasCode

public static final int AndroidManifestApplication_icon

public static final int AndroidManifestApplication_label

public static final int AndroidManifestApplication_manageSpaceActivity

public static final int AndroidManifestApplication_name

public static final int AndroidManifestApplication_permission

public static final int AndroidManifestApplication_persistent

public static final int AndroidManifestApplication_process

public static final int AndroidManifestApplication_taskAffinity

public static final int AndroidManifestApplication_theme

public static final int[] AndroidManifestCategory

public static final int AndroidManifestCategory_name

public static final int[] AndroidManifestData

public static final int AndroidManifestData_host

public static final int AndroidManifestData_mimeType

public static final int AndroidManifestData_path

public static final int AndroidManifestData_pathPattern

public static final int AndroidManifestData_pathPrefix

public static final int AndroidManifestData_port

public static final int AndroidManifestData_scheme

public static final int[] AndroidManifestGrantUriPermission

public static final int AndroidManifestGrantUriPermission_path

public static final int AndroidManifestGrantUriPermission_pathPattern

public static final int AndroidManifestGrantUriPermission_pathPrefix

public static final int[] AndroidManifestInstrumentation

public static final int AndroidManifestInstrumentation_functionalTest

public static final int AndroidManifestInstrumentation_handleProfiling

public static final int AndroidManifestInstrumentation_icon

public static final int AndroidManifestInstrumentation_label

public static final int AndroidManifestInstrumentation_name

public static final int AndroidManifestInstrumentation_targetPackage

public static final int[] AndroidManifestIntentFilter

public static final int AndroidManifestIntentFilter_icon

public static final int AndroidManifestIntentFilter_label

public static final int AndroidManifestIntentFilter_priority

public static final int[] AndroidManifestMetaData

public static final int AndroidManifestMetaData_name

public static final int AndroidManifestMetaData_resource

public static final int AndroidManifestMetaData_value

public static final int[] AndroidManifestPermission

public static final int[] AndroidManifestPermissionGroup

public static final int AndroidManifestPermissionGroup_description

public static final int AndroidManifestPermissionGroup_icon

public static final int AndroidManifestPermissionGroup_label

public static final int AndroidManifestPermissionGroup_name

public static final int[] AndroidManifestPermissionTree

public static final int AndroidManifestPermissionTree_icon

public static final int AndroidManifestPermissionTree_label

public static final int AndroidManifestPermissionTree_name

public static final int AndroidManifestPermission_description

public static final int AndroidManifestPermission_icon

public static final int AndroidManifestPermission_label

public static final int AndroidManifestPermission_name

public static final int AndroidManifestPermission_permissionGroup

public static final int AndroidManifestPermission_protectionLevel

public static final int[] AndroidManifestProvider

public static final int AndroidManifestProvider_authorities

public static final int AndroidManifestProvider_enabled

public static final int AndroidManifestProvider_exported

public static final int AndroidManifestProvider_grantUriPermissions

public static final int AndroidManifestProvider_icon

public static final int AndroidManifestProvider_initOrder

public static final int AndroidManifestProvider_label

public static final int AndroidManifestProvider_multiprocess

public static final int AndroidManifestProvider_name

public static final int AndroidManifestProvider_permission

public static final int AndroidManifestProvider_process

public static final int AndroidManifestProvider_readPermission

public static final int AndroidManifestProvider_syncable

public static final int AndroidManifestProvider_writePermission

public static final int[] AndroidManifestReceiver

public static final int AndroidManifestReceiver_enabled

public static final int AndroidManifestReceiver_exported

public static final int AndroidManifestReceiver_icon

public static final int AndroidManifestReceiver_label

public static final int AndroidManifestReceiver_name

public static final int AndroidManifestReceiver_permission

public static final int AndroidManifestReceiver_process

public static final int[] AndroidManifestService

public static final int AndroidManifestService_enabled

public static final int AndroidManifestService_exported

public static final int AndroidManifestService_icon

public static final int AndroidManifestService_label

public static final int AndroidManifestService_name

public static final int AndroidManifestService_permission

public static final int AndroidManifestService_process

public static final int[] AndroidManifestUsesLibrary

public static final int AndroidManifestUsesLibrary_name

public static final int[] AndroidManifestUsesPermission

public static final int AndroidManifestUsesPermission_name

public static final int[] AndroidManifestUsesSdk

public static final int AndroidManifestUsesSdk_minSdkVersion

public static final int AndroidManifest_sharedUserId

public static final int AndroidManifest_versionCode

public static final int AndroidManifest_versionName

public static final int[] Animation

public static final int[] AnimationDrawable

public static final int[] AnimationDrawableItem

public static final int AnimationDrawableItem_drawable

public static final int AnimationDrawableItem_duration

public static final int AnimationDrawable_oneshot

public static final int AnimationDrawable_variablePadding

public static final int AnimationDrawable_visible

public static final int[] AnimationSet

public static final int AnimationSet_shareInterpolator

public static final int Animation_duration

public static final int Animation_fillAfter

public static final int Animation_fillBefore

public static final int Animation_interpolator

public static final int Animation_repeatCount

public static final int Animation_repeatMode

public static final int Animation_startOffset

public static final int Animation_zAdjustment

public static final int[] AutoCompleteTextView

public static final int AutoCompleteTextView_completionHint

public static final int AutoCompleteTextView_completionHintView

public static final int AutoCompleteTextView_completionThreshold

public static final int AutoCompleteTextView_dropDownSelector

public static final int[] BitmapDrawable

public static final int BitmapDrawable_antialias

public static final int BitmapDrawable_dither

public static final int BitmapDrawable_filter

public static final int BitmapDrawable_gravity

public static final int BitmapDrawable_src

public static final int BitmapDrawable_tileMode

public static final int[] Button

public static final int[] CheckBoxPreference

public static final int CheckBoxPreference_disableDependentsState

public static final int CheckBoxPreference_summaryOff

public static final int CheckBoxPreference_summaryOn

public static final int[] CheckedTextView

public static final int CheckedTextView_checkMark

public static final int CheckedTextView_checked

public static final int[] Chronometer

public static final int Chronometer_format

public static final int[] ClipDrawable

public static final int ClipDrawable_clipOrientation

public static final int ClipDrawable_drawable

public static final int ClipDrawable_gravity

public static final int[] ColorDrawable

public static final int ColorDrawable_color

public static final int[] CompoundButton

public static final int CompoundButton_button

public static final int CompoundButton_checked

public static final int[] CycleInterpolator

public static final int CycleInterpolator_cycles

public static final int[] DatePicker

public static final int DatePicker_endYear

public static final int DatePicker_startYear

public static final int[] DecelerateInterpolator

public static final int DecelerateInterpolator_factor

public static final int[] DialogPreference

public static final int DialogPreference_dialogIcon

public static final int DialogPreference_dialogLayout

public static final int DialogPreference_dialogMessage

public static final int DialogPreference_dialogTitle

public static final int DialogPreference_negativeButtonText

public static final int DialogPreference_positiveButtonText

public static final int[] Drawable

public static final int[] DrawableCorners

public static final int DrawableCorners_bottomLeftRadius

public static final int DrawableCorners_bottomRightRadius

public static final int DrawableCorners_radius

public static final int DrawableCorners_topLeftRadius

public static final int DrawableCorners_topRightRadius

public static final int[] DrawableStates

public static final int DrawableStates_state_active

public static final int DrawableStates_state_checkable

public static final int DrawableStates_state_checked

public static final int DrawableStates_state_enabled

public static final int DrawableStates_state_first

public static final int DrawableStates_state_focused

public static final int DrawableStates_state_last

public static final int DrawableStates_state_middle

public static final int DrawableStates_state_pressed

public static final int DrawableStates_state_selected

public static final int DrawableStates_state_single

public static final int DrawableStates_state_window_focused

public static final int Drawable_visible

public static final int[] EditText

public static final int[] ExpandableListChildIndicatorState

public static final int ExpandableListChildIndicatorState_state_last

public static final int[] ExpandableListGroupIndicatorState

public static final int ExpandableListGroupIndicatorState_state_empty

public static final int ExpandableListGroupIndicatorState_state_expanded

public static final int[] ExpandableListView

public static final int ExpandableListView_childDivider

public static final int ExpandableListView_childIndicator

public static final int ExpandableListView_childIndicatorLeft

public static final int ExpandableListView_childIndicatorRight

public static final int ExpandableListView_groupIndicator

public static final int ExpandableListView_indicatorLeft

public static final int ExpandableListView_indicatorRight

public static final int[] FrameLayout

public static final int[] FrameLayout_Layout

public static final int FrameLayout_Layout_layout_gravity

public static final int FrameLayout_foreground

public static final int FrameLayout_foregroundGravity

public static final int FrameLayout_measureAllChildren

public static final int[] Gallery

public static final int Gallery_animationDuration

public static final int Gallery_gravity

public static final int Gallery_spacing

public static final int Gallery_unselectedAlpha

public static final int[] GradientDrawable

public static final int[] GradientDrawableGradient

public static final int GradientDrawableGradient_angle

public static final int GradientDrawableGradient_centerColor

public static final int GradientDrawableGradient_centerX

public static final int GradientDrawableGradient_centerY

public static final int GradientDrawableGradient_endColor

public static final int GradientDrawableGradient_gradientRadius

public static final int GradientDrawableGradient_startColor

public static final int GradientDrawableGradient_type

public static final int GradientDrawableGradient_useLevel

public static final int[] GradientDrawablePadding

public static final int GradientDrawablePadding_bottom

public static final int GradientDrawablePadding_left

public static final int GradientDrawablePadding_right

public static final int GradientDrawablePadding_top

public static final int[] GradientDrawableSize

public static final int GradientDrawableSize_height

public static final int GradientDrawableSize_width

public static final int[] GradientDrawableSolid

public static final int GradientDrawableSolid_color

public static final int[] GradientDrawableStroke

public static final int GradientDrawableStroke_color

public static final int GradientDrawableStroke_dashGap

public static final int GradientDrawableStroke_dashWidth

public static final int GradientDrawableStroke_width

public static final int GradientDrawable_innerRadiusRatio

public static final int GradientDrawable_shape

public static final int GradientDrawable_thicknessRatio

public static final int GradientDrawable_useLevel

public static final int GradientDrawable_visible

public static final int[] GridLayoutAnimation

public static final int GridLayoutAnimation_columnDelay

public static final int GridLayoutAnimation_direction

public static final int GridLayoutAnimation_directionPriority

public static final int GridLayoutAnimation_rowDelay

public static final int[] GridView

public static final int GridView_columnWidth

public static final int GridView_gravity

public static final int GridView_horizontalSpacing

public static final int GridView_numColumns

public static final int GridView_stretchMode

public static final int GridView_verticalSpacing

public static final int[] IconMenuView

public static final int IconMenuView_maxItemsPerRow

public static final int IconMenuView_maxRows

public static final int IconMenuView_moreIcon

public static final int IconMenuView_rowHeight

public static final int[] ImageSwitcher

public static final int[] ImageView

public static final int ImageView_adjustViewBounds

public static final int ImageView_baselineAlignBottom

public static final int ImageView_cropToPadding

public static final int ImageView_maxHeight

public static final int ImageView_maxWidth

public static final int ImageView_scaleType

public static final int ImageView_src

public static final int ImageView_tint

public static final int[] InsetDrawable

public static final int InsetDrawable_drawable

public static final int InsetDrawable_insetBottom

public static final int InsetDrawable_insetLeft

public static final int InsetDrawable_insetRight

public static final int InsetDrawable_insetTop

public static final int InsetDrawable_visible

public static final int[] Intent

public static final int[] IntentCategory

public static final int IntentCategory_name

public static final int[] IntentExtra

public static final int IntentExtra_name

public static final int IntentExtra_value

public static final int Intent_action

public static final int Intent_data

public static final int Intent_mimeType

public static final int Intent_targetClass

public static final int Intent_targetPackage

public static final int[] LayerDrawableItem

public static final int LayerDrawableItem_bottom

public static final int LayerDrawableItem_drawable

public static final int LayerDrawableItem_id

public static final int LayerDrawableItem_left

public static final int LayerDrawableItem_right

public static final int LayerDrawableItem_top

public static final int[] LayoutAnimation

public static final int LayoutAnimation_animation

public static final int LayoutAnimation_animationOrder

public static final int LayoutAnimation_delay

public static final int LayoutAnimation_interpolator

public static final int[] LevelListDrawableItem

public static final int LevelListDrawableItem_drawable

public static final int LevelListDrawableItem_maxLevel

public static final int LevelListDrawableItem_minLevel

public static final int[] LinearLayout

public static final int[] LinearLayout_Layout

public static final int LinearLayout_Layout_layout_gravity

public static final int LinearLayout_Layout_layout_height

public static final int LinearLayout_Layout_layout_weight

public static final int LinearLayout_Layout_layout_width

public static final int LinearLayout_baselineAligned

public static final int LinearLayout_baselineAlignedChildIndex

public static final int LinearLayout_gravity

public static final int LinearLayout_orientation

public static final int LinearLayout_weightSum

public static final int[] ListPreference

public static final int ListPreference_entries

public static final int ListPreference_entryValues

public static final int[] ListView

public static final int ListView_choiceMode

public static final int ListView_divider

public static final int ListView_dividerHeight

public static final int ListView_entries

public static final int[] MapView

public static final int MapView_apiKey

public static final int[] Menu

public static final int[] MenuGroup

public static final int MenuGroup_checkableBehavior

public static final int MenuGroup_enabled

public static final int MenuGroup_id

public static final int MenuGroup_menuCategory

public static final int MenuGroup_orderInCategory

public static final int MenuGroup_visible

public static final int[] MenuItem

public static final int[] MenuItemCheckedFocusedState

public static final int MenuItemCheckedFocusedState_state_checkable

public static final int MenuItemCheckedFocusedState_state_checked

public static final int MenuItemCheckedFocusedState_state_focused

public static final int[] MenuItemCheckedState

public static final int MenuItemCheckedState_state_checkable

public static final int MenuItemCheckedState_state_checked

public static final int[] MenuItemUncheckedFocusedState

public static final int MenuItemUncheckedFocusedState_state_checkable

public static final int MenuItemUncheckedFocusedState_state_focused

public static final int[] MenuItemUncheckedState

public static final int MenuItemUncheckedState_state_checkable

public static final int MenuItem_alphabeticShortcut

public static final int MenuItem_checkable

public static final int MenuItem_checked

public static final int MenuItem_enabled

public static final int MenuItem_icon

public static final int MenuItem_id

public static final int MenuItem_menuCategory

public static final int MenuItem_numericShortcut

public static final int MenuItem_orderInCategory

public static final int MenuItem_title

public static final int MenuItem_titleCondensed

public static final int MenuItem_visible

public static final int[] MenuView

public static final int MenuView_headerBackground

public static final int MenuView_horizontalDivider

public static final int MenuView_itemBackground

public static final int MenuView_itemIconDisabledAlpha

public static final int MenuView_itemTextAppearance

public static final int MenuView_verticalDivider

public static final int MenuView_windowAnimationStyle

public static final int[] PopupWindow

public static final int[] PopupWindowBackgroundState

public static final int PopupWindowBackgroundState_state_above_anchor

public static final int PopupWindow_popupBackground

public static final int[] Preference

public static final int[] PreferenceGroup

public static final int PreferenceGroup_orderingFromXml

public static final int Preference_defaultValue

public static final int Preference_dependency

public static final int Preference_enabled

public static final int Preference_key

public static final int Preference_layout

public static final int Preference_order

public static final int Preference_persistent

public static final int Preference_selectable

public static final int Preference_shouldDisableView

public static final int Preference_summary

public static final int Preference_title

public static final int Preference_widgetLayout

public static final int[] ProgressBar

public static final int ProgressBar_indeterminate

public static final int ProgressBar_indeterminateBehavior

public static final int ProgressBar_indeterminateDrawable

public static final int ProgressBar_indeterminateDuration

public static final int ProgressBar_indeterminateOnly

public static final int ProgressBar_interpolator

public static final int ProgressBar_max

public static final int ProgressBar_maxHeight

public static final int ProgressBar_maxWidth

public static final int ProgressBar_minHeight

public static final int ProgressBar_minWidth

public static final int ProgressBar_progress

public static final int ProgressBar_progressDrawable

public static final int ProgressBar_secondaryProgress

public static final int[] RadioGroup

public static final int RadioGroup_checkedButton

public static final int RadioGroup_orientation

public static final int[] RatingBar

public static final int RatingBar_isIndicator

public static final int RatingBar_numStars

public static final int RatingBar_rating

public static final int RatingBar_stepSize

public static final int[] RelativeLayout

public static final int[] RelativeLayout_Layout

public static final int RelativeLayout_Layout_layout_above

public static final int RelativeLayout_Layout_layout_alignBaseline

public static final int RelativeLayout_Layout_layout_alignBottom

public static final int RelativeLayout_Layout_layout_alignLeft

public static final int RelativeLayout_Layout_layout_alignParentBottom

public static final int RelativeLayout_Layout_layout_alignParentLeft

public static final int RelativeLayout_Layout_layout_alignParentRight

public static final int RelativeLayout_Layout_layout_alignParentTop

public static final int RelativeLayout_Layout_layout_alignRight

public static final int RelativeLayout_Layout_layout_alignTop

public static final int RelativeLayout_Layout_layout_alignWithParentIfMissing

public static final int RelativeLayout_Layout_layout_below

public static final int RelativeLayout_Layout_layout_centerHorizontal

public static final int RelativeLayout_Layout_layout_centerInParent

public static final int RelativeLayout_Layout_layout_centerVertical

public static final int RelativeLayout_Layout_layout_toLeftOf

public static final int RelativeLayout_Layout_layout_toRightOf

public static final int RelativeLayout_gravity

public static final int RelativeLayout_ignoreGravity

public static final int[] RingtonePreference

public static final int RingtonePreference_ringtoneType

public static final int RingtonePreference_showDefault

public static final int RingtonePreference_showSilent

public static final int[] RotateAnimation

public static final int RotateAnimation_fromDegrees

public static final int RotateAnimation_pivotX

public static final int RotateAnimation_pivotY

public static final int RotateAnimation_toDegrees

public static final int[] RotateDrawable

public static final int RotateDrawable_drawable

public static final int RotateDrawable_fromDegrees

public static final int RotateDrawable_pivotX

public static final int RotateDrawable_pivotY

public static final int RotateDrawable_toDegrees

public static final int RotateDrawable_visible

public static final int[] ScaleAnimation

public static final int ScaleAnimation_fromXScale

public static final int ScaleAnimation_fromYScale

public static final int ScaleAnimation_pivotX

public static final int ScaleAnimation_pivotY

public static final int ScaleAnimation_toXScale

public static final int ScaleAnimation_toYScale

public static final int[] ScaleDrawable

public static final int ScaleDrawable_drawable

public static final int ScaleDrawable_scaleGravity

public static final int ScaleDrawable_scaleHeight

public static final int ScaleDrawable_scaleWidth

public static final int[] ScrollView

public static final int ScrollView_fillViewport

public static final int[] Searchable

public static final int[] SearchableActionKey

public static final int SearchableActionKey_keycode

public static final int SearchableActionKey_queryActionMsg

public static final int SearchableActionKey_suggestActionMsg

public static final int SearchableActionKey_suggestActionMsgColumn

public static final int Searchable_hint

public static final int Searchable_icon

public static final int Searchable_label

public static final int Searchable_searchButtonText

public static final int Searchable_searchMode

public static final int Searchable_searchSuggestAuthority

public static final int Searchable_searchSuggestIntentAction

public static final int Searchable_searchSuggestIntentData

public static final int Searchable_searchSuggestPath

public static final int Searchable_searchSuggestSelection

public static final int[] SeekBar

public static final int SeekBar_thumb

public static final int SeekBar_thumbOffset

public static final int[] ShapeDrawable

public static final int[] ShapeDrawablePadding

public static final int ShapeDrawablePadding_bottom

public static final int ShapeDrawablePadding_left

public static final int ShapeDrawablePadding_right

public static final int ShapeDrawablePadding_top

public static final int ShapeDrawable_color

public static final int ShapeDrawable_height

public static final int ShapeDrawable_width

public static final int[] SlidingDrawer

public static final int SlidingDrawer_animateOnClick

public static final int SlidingDrawer_bottomOffset

public static final int SlidingDrawer_content

public static final int SlidingDrawer_handle

public static final int SlidingDrawer_orientation

public static final int SlidingDrawer_topOffset

public static final int[] Spinner

public static final int Spinner_prompt

public static final int[] StateListDrawable

public static final int StateListDrawable_constantSize

public static final int StateListDrawable_variablePadding

public static final int StateListDrawable_visible

public static final int[] TabWidget

public static final int[] TableLayout

public static final int TableLayout_collapseColumns

public static final int TableLayout_shrinkColumns

public static final int TableLayout_stretchColumns

public static final int[] TableRow

public static final int[] TableRow_Cell

public static final int TableRow_Cell_layout_column

public static final int TableRow_Cell_layout_span

public static final int[] TextAppearance

public static final int TextAppearance_textColor

public static final int TextAppearance_textColorHighlight

public static final int TextAppearance_textColorHint

public static final int TextAppearance_textColorLink

public static final int TextAppearance_textSize

public static final int TextAppearance_textStyle

public static final int TextAppearance_typeface

public static final int[] TextSwitcher

public static final int[] TextView

public static final int TextView_autoLink

public static final int TextView_autoText

public static final int TextView_bufferType

public static final int TextView_capitalize

public static final int TextView_cursorVisible

public static final int TextView_digits

public static final int TextView_drawableBottom

public static final int TextView_drawableLeft

public static final int TextView_drawablePadding

public static final int TextView_drawableRight

public static final int TextView_drawableTop

public static final int TextView_editable

public static final int TextView_ellipsize

public static final int TextView_ems

public static final int TextView_enabled

public static final int TextView_freezesText

public static final int TextView_gravity

public static final int TextView_height

public static final int TextView_hint

public static final int TextView_includeFontPadding

public static final int TextView_inputMethod

public static final int TextView_lineSpacingExtra

public static final int TextView_lineSpacingMultiplier

public static final int TextView_lines

public static final int TextView_linksClickable

public static final int TextView_maxEms

public static final int TextView_maxHeight

public static final int TextView_maxLength

public static final int TextView_maxLines

public static final int TextView_maxWidth

public static final int TextView_minEms

public static final int TextView_minHeight

public static final int TextView_minLines

public static final int TextView_minWidth

public static final int TextView_numeric

public static final int TextView_password

public static final int TextView_phoneNumber

public static final int TextView_scrollHorizontally

public static final int TextView_selectAllOnFocus

public static final int TextView_shadowColor

public static final int TextView_shadowDx

public static final int TextView_shadowDy

public static final int TextView_shadowRadius

public static final int TextView_singleLine

public static final int TextView_text

public static final int TextView_textAppearance

public static final int TextView_textColor

public static final int TextView_textColorHighlight

public static final int TextView_textColorHint

public static final int TextView_textColorLink

public static final int TextView_textScaleX

public static final int TextView_textSize

public static final int TextView_textStyle

public static final int TextView_typeface

public static final int TextView_width

public static final int[] Theme

public static final int Theme_absListViewStyle

public static final int Theme_alertDialogStyle

public static final int Theme_autoCompleteTextViewStyle

public static final int Theme_backgroundDimAmount

public static final int Theme_buttonStyle

public static final int Theme_buttonStyleInset

public static final int Theme_buttonStyleSmall

public static final int Theme_buttonStyleToggle

public static final int Theme_checkBoxPreferenceStyle

public static final int Theme_checkboxStyle

public static final int Theme_colorBackground

public static final int Theme_colorForeground

public static final int Theme_colorForegroundInverse

public static final int Theme_dialogPreferenceStyle

public static final int Theme_disabledAlpha

public static final int Theme_dropDownHintAppearance

public static final int Theme_dropDownItemStyle

public static final int Theme_dropDownListViewStyle

public static final int Theme_editTextPreferenceStyle

public static final int Theme_editTextStyle

public static final int Theme_expandableListPreferredChildIndicatorLeft

public static final int Theme_expandableListPreferredChildIndicatorRight

public static final int Theme_expandableListPreferredChildPaddingLeft

public static final int Theme_expandableListPreferredItemIndicatorLeft

public static final int Theme_expandableListPreferredItemIndicatorRight

public static final int Theme_expandableListPreferredItemPaddingLeft

public static final int Theme_expandableListViewStyle

public static final int Theme_galleryItemBackground

public static final int Theme_galleryStyle

public static final int Theme_gridViewStyle

public static final int Theme_imageButtonStyle

public static final int Theme_imageWellStyle

public static final int Theme_listChoiceIndicatorMultiple

public static final int Theme_listChoiceIndicatorSingle

public static final int Theme_listDivider

public static final int Theme_listPreferredItemHeight

public static final int Theme_listSeparatorTextViewStyle

public static final int Theme_listViewStyle

public static final int Theme_listViewWhiteStyle

public static final int Theme_mapViewStyle

public static final int Theme_panelBackground

public static final int Theme_panelColorBackground

public static final int Theme_panelColorForeground

public static final int Theme_panelFullBackground

public static final int Theme_panelTextAppearance

public static final int Theme_popupWindowStyle

public static final int Theme_preferenceCategoryStyle

public static final int Theme_preferenceInformationStyle

public static final int Theme_preferenceLayoutChild

public static final int Theme_preferenceScreenStyle

public static final int Theme_preferenceStyle

public static final int Theme_progressBarStyle

public static final int Theme_progressBarStyleHorizontal

public static final int Theme_progressBarStyleLarge

public static final int Theme_progressBarStyleSmall

public static final int Theme_progressBarStyleSmallTitle

public static final int Theme_radioButtonStyle

public static final int Theme_ratingBarStyle

public static final int Theme_ratingBarStyleIndicator

public static final int Theme_ratingBarStyleSmall

public static final int Theme_ringtonePreferenceStyle

public static final int Theme_scrollViewStyle

public static final int Theme_seekBarStyle

public static final int Theme_spinnerDropDownItemStyle

public static final int Theme_spinnerItemStyle

public static final int Theme_spinnerStyle

public static final int Theme_starStyle

public static final int Theme_tabWidgetStyle

public static final int Theme_textAppearance

public static final int Theme_textAppearanceButton

public static final int Theme_textAppearanceInverse

public static final int Theme_textAppearanceLarge

public static final int Theme_textAppearanceLargeInverse

public static final int Theme_textAppearanceMedium

public static final int Theme_textAppearanceMediumInverse

public static final int Theme_textAppearanceSmall

public static final int Theme_textAppearanceSmallInverse

public static final int Theme_textCheckMark

public static final int Theme_textCheckMarkInverse

public static final int Theme_textColorHintInverse

public static final int Theme_textColorPrimary

public static final int Theme_textColorPrimaryDisableOnly

public static final int Theme_textColorPrimaryInverse

public static final int Theme_textColorPrimaryInverseNoDisable

public static final int Theme_textColorPrimaryNoDisable

public static final int Theme_textColorSecondary

public static final int Theme_textColorSecondaryInverse

public static final int Theme_textColorSecondaryInverseNoDisable

public static final int Theme_textColorSecondaryNoDisable

public static final int Theme_textColorTertiary

public static final int Theme_textColorTertiaryInverse

public static final int Theme_textViewStyle

public static final int Theme_webViewStyle

public static final int Theme_windowAnimationStyle

public static final int Theme_windowBackground

public static final int Theme_windowContentOverlay

public static final int Theme_windowFrame

public static final int Theme_windowFullscreen

public static final int Theme_windowIsFloating

public static final int Theme_windowIsTranslucent

public static final int Theme_windowNoTitle

public static final int Theme_windowTitleBackgroundStyle

public static final int Theme_windowTitleSize

public static final int Theme_windowTitleStyle

public static final int Theme_yesNoPreferenceStyle

public static final int[] ToggleButton

public static final int ToggleButton_disabledAlpha

public static final int ToggleButton_textOff

public static final int ToggleButton_textOn

public static final int[] TranslateAnimation

public static final int TranslateAnimation_fromXDelta

public static final int TranslateAnimation_fromYDelta

public static final int TranslateAnimation_toXDelta

public static final int TranslateAnimation_toYDelta

public static final int[] TwoLineListItem

public static final int TwoLineListItem_mode

public static final int[] VerticalSlider_Layout

public static final int VerticalSlider_Layout_layout_scale

public static final int[] View

public static final int[] ViewAnimator

public static final int ViewAnimator_inAnimation

public static final int ViewAnimator_outAnimation

public static final int[] ViewDrawableStates

public static final int ViewDrawableStates_state_enabled

public static final int ViewDrawableStates_state_focused

public static final int ViewDrawableStates_state_pressed

public static final int ViewDrawableStates_state_selected

public static final int ViewDrawableStates_state_window_focused

public static final int[] ViewFlipper

public static final int ViewFlipper_flipInterval

public static final int[] ViewGroup

public static final int[] ViewGroup_Layout

public static final int ViewGroup_Layout_layout_height

public static final int ViewGroup_Layout_layout_width

public static final int[] ViewGroup_MarginLayout

public static final int ViewGroup_MarginLayout_layout_height

public static final int ViewGroup_MarginLayout_layout_margin

public static final int ViewGroup_MarginLayout_layout_marginBottom

public static final int ViewGroup_MarginLayout_layout_marginLeft

public static final int ViewGroup_MarginLayout_layout_marginRight

public static final int ViewGroup_MarginLayout_layout_marginTop

public static final int ViewGroup_MarginLayout_layout_width

public static final int ViewGroup_addStatesFromChildren

public static final int ViewGroup_alwaysDrawnWithCache

public static final int ViewGroup_animationCache

public static final int ViewGroup_clipChildren

public static final int ViewGroup_clipToPadding

public static final int ViewGroup_descendantFocusability

public static final int ViewGroup_layoutAnimation

public static final int ViewGroup_persistentDrawingCache

public static final int[] ViewStub

public static final int ViewStub_inflatedId

public static final int ViewStub_layout

public static final int[] ViewSwitcher

public static final int View_background

public static final int View_clickable

public static final int View_drawingCacheQuality

public static final int View_duplicateParentState

public static final int View_fadingEdge

public static final int View_fadingEdgeLength

public static final int View_fitsSystemWindows

public static final int View_focusable

public static final int View_focusableInTouchMode

public static final int View_id

public static final int View_keepScreenOn

public static final int View_longClickable

public static final int View_minHeight

public static final int View_minWidth

public static final int View_nextFocusDown

public static final int View_nextFocusLeft

public static final int View_nextFocusRight

public static final int View_nextFocusUp

public static final int View_padding

public static final int View_paddingBottom

public static final int View_paddingLeft

public static final int View_paddingRight

public static final int View_paddingTop

public static final int View_saveEnabled

public static final int View_scrollX

public static final int View_scrollY

public static final int View_scrollbarAlwaysDrawHorizontalTrack

public static final int View_scrollbarAlwaysDrawVerticalTrack

public static final int View_scrollbarSize

public static final int View_scrollbarStyle

public static final int View_scrollbarThumbHorizontal

public static final int View_scrollbarThumbVertical

public static final int View_scrollbarTrackHorizontal

public static final int View_scrollbarTrackVertical

public static final int View_scrollbars

public static final int View_soundEffectsEnabled

public static final int View_tag

public static final int View_visibility

public static final int[] VolumePreference

public static final int VolumePreference_streamType

public static final int[] Window

public static final int[] WindowAnimation

public static final int WindowAnimation_activityCloseEnterAnimation

public static final int WindowAnimation_activityCloseExitAnimation

public static final int WindowAnimation_activityOpenEnterAnimation

public static final int WindowAnimation_activityOpenExitAnimation

public static final int WindowAnimation_taskCloseEnterAnimation

public static final int WindowAnimation_taskCloseExitAnimation

public static final int WindowAnimation_taskOpenEnterAnimation

public static final int WindowAnimation_taskOpenExitAnimation

public static final int WindowAnimation_taskToBackEnterAnimation

public static final int WindowAnimation_taskToBackExitAnimation

public static final int WindowAnimation_taskToFrontEnterAnimation

public static final int WindowAnimation_taskToFrontExitAnimation

public static final int WindowAnimation_windowEnterAnimation

public static final int WindowAnimation_windowExitAnimation

public static final int WindowAnimation_windowHideAnimation

public static final int WindowAnimation_windowShowAnimation

public static final int Window_textColor

public static final int Window_windowAnimationStyle

public static final int Window_windowBackground

public static final int Window_windowContentOverlay

public static final int Window_windowFrame

public static final int Window_windowFullscreen

public static final int Window_windowIsFloating

public static final int Window_windowIsTranslucent

public static final int Window_windowNoTitle
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =xml )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/R; )
public final class com.android.internal.R$xml extends java.lang.Object

----------------FIELDS----------------

public static final int apns

public static final int autotext

public static final int preferred_time_zones

public static final int time_zones_by_country
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/R$styleable;Lcom/android/internal/R$xml;Lcom/android/internal/R$style;Lcom/android/internal/R$string;Lcom/android/internal/R$raw;Lcom/android/internal/R$plurals;Lcom/android/internal/R$layout;Lcom/android/internal/R$id;Lcom/android/internal/R$drawable;Lcom/android/internal/R$dimen;Lcom/android/internal/R$color;Lcom/android/internal/R$attr;Lcom/android/internal/R$array;Lcom/android/internal/R$anim; )
public final class com.android.internal.R extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________


public abstract class com.android.internal.app.AlertActivity extends android.app.Activity implements android.content.DialogInterface

----------------FIELDS----------------

protected com.android.internal.app.AlertController mAlert

protected com.android.internal.app.AlertController$AlertParams mAlertParams
----------------METHODS----------------

public void <init>()

public void cancel()

public void dismiss()

protected void onCreate(
android.os.Bundle)

public boolean onKeyDown(
int
android.view.KeyEvent)

public boolean onKeyUp(
int
android.view.KeyEvent)

protected void setupAlert()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/app/AlertController; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class com.android.internal.app.AlertController$1 extends java.lang.Object implements android.view.View$OnClickListener

----------------FIELDS----------------

final com.android.internal.app.AlertController this$0
----------------METHODS----------------

 void <init>(
com.android.internal.app.AlertController)

public void onClick(
android.view.View)

________________CLASS________________

@dalvik.annotation.Signature (value =Landroid/widget/ArrayAdapter<Ljava/lang/CharSequence;>; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class com.android.internal.app.AlertController$AlertParams$1 extends android.widget.ArrayAdapter

----------------FIELDS----------------

final com.android.internal.app.AlertController$AlertParams this$0

final android.widget.ListView val$listView
----------------METHODS----------------

 void <init>(
com.android.internal.app.AlertController$AlertParams
android.content.Context
int
int
java.lang.CharSequence[]
android.widget.ListView)

public android.view.View getView(
int
android.view.View
android.view.ViewGroup)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class com.android.internal.app.AlertController$AlertParams$2 extends android.widget.CursorAdapter

----------------FIELDS----------------

final com.android.internal.app.AlertController$AlertParams this$0

final android.widget.ListView val$listView
----------------METHODS----------------

 void <init>(
com.android.internal.app.AlertController$AlertParams
android.content.Context
android.database.Cursor
boolean
android.widget.ListView)

public void bindView(
android.view.View
android.content.Context
android.database.Cursor)

public android.view.View newView(
android.content.Context
android.database.Cursor
android.view.ViewGroup)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class com.android.internal.app.AlertController$AlertParams$3 extends java.lang.Object implements android.widget.AdapterView$OnItemClickListener

----------------FIELDS----------------

final com.android.internal.app.AlertController$AlertParams this$0

final com.android.internal.app.AlertController val$dialog
----------------METHODS----------------

 void <init>(
com.android.internal.app.AlertController$AlertParams
com.android.internal.app.AlertController)

public void onItemClick(
android.widget.AdapterView
android.view.View
int
long)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class com.android.internal.app.AlertController$AlertParams$4 extends java.lang.Object implements android.widget.AdapterView$OnItemClickListener

----------------FIELDS----------------

final com.android.internal.app.AlertController$AlertParams this$0

final com.android.internal.app.AlertController val$dialog

final android.widget.ListView val$listView
----------------METHODS----------------

 void <init>(
com.android.internal.app.AlertController$AlertParams
android.widget.ListView
com.android.internal.app.AlertController)

public void onItemClick(
android.widget.AdapterView
android.view.View
int
long)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/app/AlertController$AlertParams; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnPrepareListViewListener )
public abstract interface class com.android.internal.app.AlertController$AlertParams$OnPrepareListViewListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onPrepareListView(
android.widget.ListView)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =AlertParams )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/app/AlertController; )
@dalvik.annotation.MemberClasses (value =Lcom/android/internal/app/AlertController$AlertParams$OnPrepareListViewListener; )
public class com.android.internal.app.AlertController$AlertParams extends java.lang.Object

----------------FIELDS----------------

public android.widget.ListAdapter mAdapter

public boolean mCancelable

public int mCheckedItem

public boolean[] mCheckedItems

public final android.content.Context mContext

public android.database.Cursor mCursor

public android.view.View mCustomTitleView

public boolean mForceInverseBackground

public android.graphics.drawable.Drawable mIcon

public int mIconId

public final android.view.LayoutInflater mInflater

public java.lang.String mIsCheckedColumn

public boolean mIsMultiChoice

public boolean mIsSingleChoice

public java.lang.CharSequence[] mItems

public java.lang.String mLabelColumn

public java.lang.CharSequence mMessage

public android.content.DialogInterface$OnClickListener mNegativeButtonListener

public java.lang.CharSequence mNegativeButtonText

public android.content.DialogInterface$OnClickListener mNeutralButtonListener

public java.lang.CharSequence mNeutralButtonText

public android.content.DialogInterface$OnCancelListener mOnCancelListener

public android.content.DialogInterface$OnMultiChoiceClickListener mOnCheckboxClickListener

public android.content.DialogInterface$OnClickListener mOnClickListener

public android.widget.AdapterView$OnItemSelectedListener mOnItemSelectedListener

public android.content.DialogInterface$OnKeyListener mOnKeyListener

public com.android.internal.app.AlertController$AlertParams$OnPrepareListViewListener mOnPrepareListViewListener

public android.content.DialogInterface$OnClickListener mPositiveButtonListener

public java.lang.CharSequence mPositiveButtonText

public java.lang.CharSequence mTitle

public android.view.View mView
----------------METHODS----------------

public void <init>(
android.content.Context)

private void createListView(
com.android.internal.app.AlertController)

public void apply(
com.android.internal.app.AlertController)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/app/AlertController; )
@dalvik.annotation.InnerClass (accessFlags =26 name =ButtonHandler )
final class com.android.internal.app.AlertController$ButtonHandler extends android.os.Handler

----------------FIELDS----------------

private static final int MSG_DISMISS_DIALOG
@dalvik.annotation.Signature (value =Ljava/lang/ref/WeakReference<Landroid/content/DialogInterface;>; )
private java.lang.ref.WeakReference mDialog
----------------METHODS----------------

public void <init>(
android.content.DialogInterface)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/app/AlertController$AlertParams;Lcom/android/internal/app/AlertController$ButtonHandler; )
public class com.android.internal.app.AlertController extends java.lang.Object

----------------FIELDS----------------

private android.widget.ListAdapter mAdapter

private android.widget.Button mButton1

private android.os.Message mButton1Message

private java.lang.CharSequence mButton1Text

private android.widget.Button mButton2

private android.os.Message mButton2Message

private java.lang.CharSequence mButton2Text

private android.widget.Button mButton3

private android.os.Message mButton3Message

private java.lang.CharSequence mButton3Text

 android.view.View$OnClickListener mButtonHandler

private int mCheckedItem

private final android.content.Context mContext

private android.view.View mCustomTitleView

private final android.content.DialogInterface mDialogInterface

private boolean mForceInverseBackground

private android.os.Handler mHandler

private android.graphics.drawable.Drawable mIcon

private int mIconId

private android.widget.ImageView mIconView

private android.widget.ListView mListView

private java.lang.CharSequence mMessage

private android.widget.TextView mMessageView

private android.widget.ScrollView mScrollView

private java.lang.CharSequence mTitle

private android.widget.TextView mTitleView

private android.view.View mView

private final android.view.Window mWindow
----------------METHODS----------------

public void <init>(
android.content.Context
android.content.DialogInterface
android.view.Window)

static android.widget.Button access$000(
com.android.internal.app.AlertController)

static android.os.Message access$100(
com.android.internal.app.AlertController)

static android.widget.ListView access$1002(
com.android.internal.app.AlertController
android.widget.ListView)

static android.widget.Button access$200(
com.android.internal.app.AlertController)

static android.os.Message access$300(
com.android.internal.app.AlertController)

static android.widget.Button access$400(
com.android.internal.app.AlertController)

static android.os.Message access$500(
com.android.internal.app.AlertController)

static android.content.DialogInterface access$600(
com.android.internal.app.AlertController)

static android.os.Handler access$700(
com.android.internal.app.AlertController)

static android.widget.ListAdapter access$802(
com.android.internal.app.AlertController
android.widget.ListAdapter)

static int access$902(
com.android.internal.app.AlertController
int)

private void centerButton(
android.widget.Button)

private int getLargeTextSize()

private void setBackground(
android.widget.LinearLayout
android.widget.LinearLayout
android.view.View
boolean
android.content.res.TypedArray
boolean
android.view.View)

private boolean setupButtons()

private void setupContent(
android.widget.LinearLayout)

private boolean setupTitle(
android.widget.LinearLayout
boolean)

private void setupView()

public android.widget.ListView getListView()

public void installContent()

public boolean onKeyDown(
int
android.view.KeyEvent)

public boolean onKeyUp(
int
android.view.KeyEvent)

public void setButton(
java.lang.CharSequence
android.content.DialogInterface$OnClickListener)

public void setButton(
java.lang.CharSequence
android.os.Message)

public void setButton2(
java.lang.CharSequence
android.content.DialogInterface$OnClickListener)

public void setButton2(
java.lang.CharSequence
android.os.Message)

public void setButton3(
java.lang.CharSequence
android.content.DialogInterface$OnClickListener)

public void setButton3(
java.lang.CharSequence
android.os.Message)

public void setCustomTitle(
android.view.View)

public void setIcon(
int)

public void setIcon(
android.graphics.drawable.Drawable)

public void setInverseBackgroundForced(
boolean)

public void setMessage(
java.lang.CharSequence)

public void setTitle(
java.lang.CharSequence)

public void setView(
android.view.View)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/app/ResolverActivity$ResolveListAdapter; )
public class com.android.internal.app.ResolverActivity extends com.android.internal.app.AlertActivity implements android.content.DialogInterface$OnClickListener, android.widget.CompoundButton$OnCheckedChangeListener

----------------FIELDS----------------

private com.android.internal.app.ResolverActivity$ResolveListAdapter mAdapter

private android.widget.CheckBox mAlwaysCheck

private android.widget.TextView mClearDefaultHint
----------------METHODS----------------

public void <init>()

static android.widget.CheckBox access$100(
com.android.internal.app.ResolverActivity)

public void onCheckedChanged(
android.widget.CompoundButton
boolean)

public void onClick(
android.content.DialogInterface
int)

protected void onCreate(
android.os.Bundle)

protected void onCreate(
android.os.Bundle
android.content.Intent
java.lang.CharSequence
boolean)

________________CLASS________________


public class com.android.internal.app.ChooserActivity extends com.android.internal.app.ResolverActivity

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

protected void onCreate(
android.os.Bundle)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/app/IBatteryStats$Stub; )
public abstract interface class com.android.internal.app.IBatteryStats extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract long getAwakeTimeBattery()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract long getAwakeTimePlugged()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void noteStartWakelock(
int
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void noteStopWakelock(
int
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void setOnBattery(
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/app/IBatteryStats$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class com.android.internal.app.IBatteryStats$Stub$Proxy extends java.lang.Object implements com.android.internal.app.IBatteryStats

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public long getAwakeTimeBattery()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public long getAwakeTimePlugged()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void noteStartWakelock(
int
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void noteStopWakelock(
int
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void setOnBattery(
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/app/IBatteryStats$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/app/IBatteryStats; )
public abstract class com.android.internal.app.IBatteryStats$Stub extends android.os.Binder implements com.android.internal.app.IBatteryStats

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_getAwakeTimeBattery

static final int TRANSACTION_getAwakeTimePlugged

static final int TRANSACTION_noteStartWakelock

static final int TRANSACTION_noteStopWakelock

static final int TRANSACTION_setOnBattery
----------------METHODS----------------

public void <init>()

public static com.android.internal.app.IBatteryStats asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/app/ResolverActivity; )
@dalvik.annotation.InnerClass (accessFlags =18 name =ResolveListAdapter )
final class com.android.internal.app.ResolverActivity$ResolveListAdapter extends android.widget.BaseAdapter

----------------FIELDS----------------

private final android.view.LayoutInflater mInflater

private final android.content.Intent mIntent
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/content/pm/ResolveInfo;>; )
private java.util.List mList

final com.android.internal.app.ResolverActivity this$0
----------------METHODS----------------

public void <init>(
com.android.internal.app.ResolverActivity
android.content.Context
android.content.Intent)

static java.util.List access$000(
com.android.internal.app.ResolverActivity$ResolveListAdapter)

private final void bindView(
android.view.View
android.content.pm.ResolveInfo)

public int getCount()

public java.lang.Object getItem(
int)

public long getItemId(
int)

public android.view.View getView(
int
android.view.View
android.view.ViewGroup)

public android.content.Intent intentForPosition(
int)

public android.content.pm.ResolveInfo resolveInfoForPosition(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/app/RingtonePickerActivity; )
 class com.android.internal.app.RingtonePickerActivity$1 extends java.lang.Object implements android.content.DialogInterface$OnClickListener

----------------FIELDS----------------

final com.android.internal.app.RingtonePickerActivity this$0
----------------METHODS----------------

 void <init>(
com.android.internal.app.RingtonePickerActivity)

public void onClick(
android.content.DialogInterface
int)

________________CLASS________________


public final class com.android.internal.app.RingtonePickerActivity extends com.android.internal.app.AlertActivity implements android.widget.AdapterView$OnItemSelectedListener, java.lang.Runnable, android.content.DialogInterface$OnClickListener, com.android.internal.app.AlertController$AlertParams$OnPrepareListViewListener

----------------FIELDS----------------

private static final int DELAY_MS_SELECTION_PLAYED

private static final java.lang.String TAG

private int mClickedPos

private android.database.Cursor mCursor

private android.media.Ringtone mDefaultRingtone

private int mDefaultRingtonePos

private android.net.Uri mExistingUri

private android.os.Handler mHandler

private boolean mHasDefaultItem

private boolean mHasSilentItem

private android.content.DialogInterface$OnClickListener mRingtoneClickListener

private android.media.RingtoneManager mRingtoneManager

private int mSampleRingtonePos

private int mSilentPos

private int mStaticItemCount

private android.net.Uri mUriForDefaultItem
----------------METHODS----------------

public void <init>()

static int access$002(
com.android.internal.app.RingtonePickerActivity
int)

static void access$100(
com.android.internal.app.RingtonePickerActivity
int
int)

private int addDefaultRingtoneItem(
android.widget.ListView)

private int addSilentItem(
android.widget.ListView)

private int addStaticItem(
android.widget.ListView
int)

private int getListPosition(
int)

private int getRingtoneManagerPosition(
int)

private void playRingtone(
int
int)

private void stopAnyPlayingRingtone()

public void onClick(
android.content.DialogInterface
int)

protected void onCreate(
android.os.Bundle)

public void onItemSelected(
android.widget.AdapterView
android.view.View
int
long)

public void onNothingSelected(
android.widget.AdapterView)

protected void onPause()

public void onPrepareListView(
android.widget.ListView)

protected void onStop()

public void run()

________________CLASS________________


public class com.android.internal.database.ArrayListCursor extends android.database.AbstractCursor

----------------FIELDS----------------

private java.lang.String[] mColumnNames
@dalvik.annotation.Signature (value =[Ljava/util/ArrayList<Ljava/lang/Object;>; )
private java.util.ArrayList[] mRows
----------------METHODS----------------
@dalvik.annotation.Signature (value =([Ljava/lang/String;Ljava/util/ArrayList<Ljava/util/ArrayList;>;)V )
public void <init>(
java.lang.String[]
java.util.ArrayList)

public boolean deleteRow()

public java.lang.String[] getColumnNames()

public int getCount()

public double getDouble(
int)

public float getFloat(
int)

public int getInt(
int)

public long getLong(
int)

public short getShort(
int)

public java.lang.String getString(
int)

public boolean isNull(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/database/SortCursor; )
 class com.android.internal.database.SortCursor$1 extends android.database.DataSetObserver

----------------FIELDS----------------

final com.android.internal.database.SortCursor this$0
----------------METHODS----------------

 void <init>(
com.android.internal.database.SortCursor)

public void onChanged()

public void onInvalidated()

________________CLASS________________


public class com.android.internal.database.SortCursor extends android.database.AbstractCursor

----------------FIELDS----------------

private static final java.lang.String TAG

private final int ROWCACHESIZE

private int[][] mCurRowNumCache

private android.database.Cursor mCursor

private int[] mCursorCache

private android.database.Cursor[] mCursors

private int mLastCacheHit

private android.database.DataSetObserver mObserver

private int[] mRowNumCache

private int[] mSortColumns
----------------METHODS----------------

public void <init>(
android.database.Cursor[]
java.lang.String)

static int access$002(
com.android.internal.database.SortCursor
int)

static int access$102(
com.android.internal.database.SortCursor
int)

public void close()

public boolean commitUpdates()

public void deactivate()

public boolean deleteRow()

public byte[] getBlob(
int)

public java.lang.String[] getColumnNames()

public int getCount()

public double getDouble(
int)

public float getFloat(
int)

public int getInt(
int)

public long getLong(
int)

public short getShort(
int)

public java.lang.String getString(
int)

public boolean isNull(
int)

public boolean onMove(
int
int)

public void registerDataSetObserver(
android.database.DataSetObserver)

public boolean requery()

public void unregisterDataSetObserver(
android.database.DataSetObserver)

________________CLASS________________


public final class com.android.internal.graphics.NativeUtils extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

public static native boolean nativeScrollRect(
android.graphics.Canvas
android.graphics.Rect
int
int)

________________CLASS________________


public abstract interface class com.android.internal.http.multipart.PartSource extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract java.io.InputStream createInputStream()

public abstract java.lang.String getFileName()

public abstract long getLength()

________________CLASS________________


public class com.android.internal.http.multipart.ByteArrayPartSource extends java.lang.Object implements com.android.internal.http.multipart.PartSource

----------------FIELDS----------------

private byte[] bytes

private java.lang.String fileName
----------------METHODS----------------

public void <init>(
java.lang.String
byte[])

public java.io.InputStream createInputStream()

public java.lang.String getFileName()

public long getLength()

________________CLASS________________


public abstract class com.android.internal.http.multipart.Part extends java.lang.Object

----------------FIELDS----------------

protected static final java.lang.String BOUNDARY

protected static final byte[] BOUNDARY_BYTES

protected static final java.lang.String CHARSET

protected static final byte[] CHARSET_BYTES

protected static final java.lang.String CONTENT_DISPOSITION

protected static final byte[] CONTENT_DISPOSITION_BYTES

protected static final java.lang.String CONTENT_TRANSFER_ENCODING

protected static final byte[] CONTENT_TRANSFER_ENCODING_BYTES

protected static final java.lang.String CONTENT_TYPE

protected static final byte[] CONTENT_TYPE_BYTES

protected static final java.lang.String CRLF

protected static final byte[] CRLF_BYTES

private static final byte[] DEFAULT_BOUNDARY_BYTES

protected static final java.lang.String EXTRA

protected static final byte[] EXTRA_BYTES

private static final org.apache.commons.logging.Log LOG

protected static final java.lang.String QUOTE

protected static final byte[] QUOTE_BYTES

private byte[] boundaryBytes
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static java.lang.String getBoundary()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public static long getLengthOfParts(
com.android.internal.http.multipart.Part[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public static long getLengthOfParts(
com.android.internal.http.multipart.Part[]
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public static void sendParts(
java.io.OutputStream
com.android.internal.http.multipart.Part[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public static void sendParts(
java.io.OutputStream
com.android.internal.http.multipart.Part[]
byte[])

public abstract java.lang.String getCharSet()

public abstract java.lang.String getContentType()

public abstract java.lang.String getName()

protected byte[] getPartBoundary()

public abstract java.lang.String getTransferEncoding()

public boolean isRepeatable()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public long length()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected abstract long lengthOfData()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void send(
java.io.OutputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void sendContentTypeHeader(
java.io.OutputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected abstract void sendData(
java.io.OutputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void sendDispositionHeader(
java.io.OutputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void sendEnd(
java.io.OutputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void sendEndOfHeader(
java.io.OutputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void sendStart(
java.io.OutputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void sendTransferEncodingHeader(
java.io.OutputStream)

 void setPartBoundary(
byte[])

public java.lang.String toString()

________________CLASS________________


public abstract class com.android.internal.http.multipart.PartBase extends com.android.internal.http.multipart.Part

----------------FIELDS----------------

private java.lang.String charSet

private java.lang.String contentType

private java.lang.String name

private java.lang.String transferEncoding
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

public java.lang.String getCharSet()

public java.lang.String getContentType()

public java.lang.String getName()

public java.lang.String getTransferEncoding()

public void setCharSet(
java.lang.String)

public void setContentType(
java.lang.String)

public void setName(
java.lang.String)

public void setTransferEncoding(
java.lang.String)

________________CLASS________________


public class com.android.internal.http.multipart.FilePart extends com.android.internal.http.multipart.PartBase

----------------FIELDS----------------

public static final java.lang.String DEFAULT_CHARSET

public static final java.lang.String DEFAULT_CONTENT_TYPE

public static final java.lang.String DEFAULT_TRANSFER_ENCODING

protected static final java.lang.String FILE_NAME

private static final byte[] FILE_NAME_BYTES

private static final org.apache.commons.logging.Log LOG

private com.android.internal.http.multipart.PartSource source
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String
com.android.internal.http.multipart.PartSource)

public void <init>(
java.lang.String
com.android.internal.http.multipart.PartSource
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public void <init>(
java.lang.String
java.io.File)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public void <init>(
java.lang.String
java.io.File
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public void <init>(
java.lang.String
java.lang.String
java.io.File)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public void <init>(
java.lang.String
java.lang.String
java.io.File
java.lang.String
java.lang.String)

protected com.android.internal.http.multipart.PartSource getSource()

protected long lengthOfData()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void sendData(
java.io.OutputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void sendDispositionHeader(
java.io.OutputStream)

________________CLASS________________


public class com.android.internal.http.multipart.FilePartSource extends java.lang.Object implements com.android.internal.http.multipart.PartSource

----------------FIELDS----------------

private java.io.File file

private java.lang.String fileName
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public void <init>(
java.io.File)
@dalvik.annotation.Throws (value =Ljava/io/FileNotFoundException; )
public void <init>(
java.lang.String
java.io.File)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.io.InputStream createInputStream()

public java.lang.String getFileName()

public long getLength()

________________CLASS________________


public abstract interface class org.apache.http.HttpEntity extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void consumeContent()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalStateException; )
public abstract java.io.InputStream getContent()

public abstract org.apache.http.Header getContentEncoding()

public abstract long getContentLength()

public abstract org.apache.http.Header getContentType()

public abstract boolean isChunked()

public abstract boolean isRepeatable()

public abstract boolean isStreaming()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void writeTo(
java.io.OutputStream)

________________CLASS________________


public abstract class org.apache.http.entity.AbstractHttpEntity extends java.lang.Object implements org.apache.http.HttpEntity

----------------FIELDS----------------

protected boolean chunked

protected org.apache.http.Header contentEncoding

protected org.apache.http.Header contentType
----------------METHODS----------------

protected void <init>()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/UnsupportedOperationException; )
public void consumeContent()

public org.apache.http.Header getContentEncoding()

public org.apache.http.Header getContentType()

public boolean isChunked()

public void setChunked(
boolean)

public void setContentEncoding(
java.lang.String)

public void setContentEncoding(
org.apache.http.Header)

public void setContentType(
java.lang.String)

public void setContentType(
org.apache.http.Header)

________________CLASS________________


public class com.android.internal.http.multipart.MultipartEntity extends org.apache.http.entity.AbstractHttpEntity

----------------FIELDS----------------

public static final java.lang.String MULTIPART_BOUNDARY

private static byte[] MULTIPART_CHARS

private static final java.lang.String MULTIPART_FORM_CONTENT_TYPE

private static final org.apache.commons.logging.Log log

private boolean contentConsumed

private byte[] multipartBoundary

private org.apache.http.params.HttpParams params

protected com.android.internal.http.multipart.Part[] parts
----------------METHODS----------------

static void <clinit>()

public void <init>(
com.android.internal.http.multipart.Part[])

public void <init>(
com.android.internal.http.multipart.Part[]
org.apache.http.params.HttpParams)

private static byte[] generateMultipartBoundary()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalStateException; )
public java.io.InputStream getContent()

public long getContentLength()

public org.apache.http.Header getContentType()

protected byte[] getMultipartBoundary()

public boolean isRepeatable()

public boolean isStreaming()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeTo(
java.io.OutputStream)

________________CLASS________________


public class com.android.internal.http.multipart.StringPart extends com.android.internal.http.multipart.PartBase

----------------FIELDS----------------

public static final java.lang.String DEFAULT_CHARSET

public static final java.lang.String DEFAULT_CONTENT_TYPE

public static final java.lang.String DEFAULT_TRANSFER_ENCODING

private static final org.apache.commons.logging.Log LOG

private byte[] content

private java.lang.String value
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String
java.lang.String)

public void <init>(
java.lang.String
java.lang.String
java.lang.String)

private byte[] getContent()

protected long lengthOfData()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void sendData(
java.io.OutputStream)

public void setCharSet(
java.lang.String)

________________CLASS________________


public class com.android.internal.location.CellState extends java.lang.Object

----------------FIELDS----------------

public static int RADIO_TYPE_CDMA

public static int RADIO_TYPE_GPRS

public static int RADIO_TYPE_WCDMA

public static java.lang.String TAG

private java.lang.String mCarrier

private int mCid

private int mHomeMcc

private int mHomeMnc

private int mLac

private int mMcc

private int mMnc

private int mRadioType

private long mTime
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
android.telephony.ServiceState
android.telephony.CellLocation)

public boolean equals(
com.android.internal.location.CellState)

public java.lang.String getCarrier()

public int getCid()

public int getHomeMcc()

public int getHomeMnc()

public int getLac()

public int getMcc()

public int getMnc()

public int getRadioType()

public long getTime()

public boolean isValid()

public void setCarrier(
java.lang.String)

public void setHomeMcc(
int)

public void setHomeMnc(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =GpsEventThread )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/location/GpsLocationProvider; )
 class com.android.internal.location.GpsLocationProvider$GpsEventThread extends java.lang.Thread

----------------FIELDS----------------

final com.android.internal.location.GpsLocationProvider this$0
----------------METHODS----------------

public void <init>(
com.android.internal.location.GpsLocationProvider)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/location/GpsLocationProvider; )
@dalvik.annotation.InnerClass (accessFlags =2 name =GpsNetworkThread )
 class com.android.internal.location.GpsLocationProvider$GpsNetworkThread extends java.lang.Thread

----------------FIELDS----------------

private long mNextNtpTime

private long mNextXtraTime

private boolean mXtraDownloadRequested

final com.android.internal.location.GpsLocationProvider this$0
----------------METHODS----------------

public void <init>(
com.android.internal.location.GpsLocationProvider)

private long getWaitTime()

public void run()

 void signal()

 void xtraDownloadRequest()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =18 name =Listener )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/location/GpsLocationProvider; )
final class com.android.internal.location.GpsLocationProvider$Listener extends java.lang.Object implements android.os.IBinder$DeathRecipient

----------------FIELDS----------------

final android.location.IGpsStatusListener mListener

 int mSensors

final com.android.internal.location.GpsLocationProvider this$0
----------------METHODS----------------

 void <init>(
com.android.internal.location.GpsLocationProvider
android.location.IGpsStatusListener)

public void binderDied()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/location/GpsLocationProvider$GpsNetworkThread;Lcom/android/internal/location/GpsLocationProvider$GpsEventThread;Lcom/android/internal/location/GpsLocationProvider$Listener; )
public class com.android.internal.location.GpsLocationProvider extends android.location.LocationProviderImpl

----------------FIELDS----------------

private static final int ALMANAC_MASK

private static final int EPHEMERIS_MASK

public static final java.lang.String EXTRA_ENABLED

private static final int GPS_DELETE_ALL

private static final int GPS_DELETE_ALMANAC

private static final int GPS_DELETE_CELLDB_INFO

private static final int GPS_DELETE_EPHEMERIS

private static final int GPS_DELETE_HEALTH

private static final int GPS_DELETE_IONO

private static final int GPS_DELETE_POSITION

private static final int GPS_DELETE_RTI

private static final int GPS_DELETE_SADATA

private static final int GPS_DELETE_SVDIR

private static final int GPS_DELETE_SVSTEER

private static final int GPS_DELETE_TIME

private static final int GPS_DELETE_UTC

public static final java.lang.String GPS_ENABLED_CHANGE_ACTION

public static final java.lang.String GPS_FIX_CHANGE_ACTION

private static final int GPS_STATUS_ENGINE_OFF

private static final int GPS_STATUS_ENGINE_ON

private static final int GPS_STATUS_NONE

private static final int GPS_STATUS_SESSION_BEGIN

private static final int GPS_STATUS_SESSION_END

private static final int LOCATION_HAS_ACCURACY

private static final int LOCATION_HAS_ALTITUDE

private static final int LOCATION_HAS_BEARING

private static final int LOCATION_HAS_LAT_LONG

private static final int LOCATION_HAS_SPEED

private static final int LOCATION_INVALID

private static final int MAX_SVS

private static final long NTP_INTERVAL

private static final java.lang.String PROPERTIES_FILE

private static final long RECENT_FIX_TIMEOUT

private static final long RETRY_INTERVAL

private static final java.lang.String TAG

private static final int USED_FOR_FIX_MASK

private com.android.internal.location.LocationCollector mCollector

private android.content.Context mContext

private boolean mEnabled

private com.android.internal.location.GpsLocationProvider$GpsEventThread mEventThread

private int mFixInterval

private long mFixRequestTime

private long mLastFixTime
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/android/internal/location/GpsLocationProvider$Listener;>; )
private java.util.ArrayList mListeners

private android.location.Location mLocation

private android.os.Bundle mLocationExtras

private int mLocationFlags

private boolean mLocationTracking

private boolean mNavigating

private boolean mNetworkAvailable

private com.android.internal.location.GpsLocationProvider$GpsNetworkThread mNetworkThread

private java.util.Properties mProperties

private float[] mSnrs

private boolean mStarted

private int mStatus

private long mStatusUpdateTime

private float[] mSvAzimuths

private int mSvCount

private float[] mSvElevations

private int[] mSvMasks

private int[] mSvs

private int mTTFF
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context
com.android.internal.location.LocationCollector)

static java.util.ArrayList access$000(
com.android.internal.location.GpsLocationProvider)

static boolean access$100(
com.android.internal.location.GpsLocationProvider)

static boolean access$200(
com.android.internal.location.GpsLocationProvider)

static void access$300(
com.android.internal.location.GpsLocationProvider)

static boolean access$400(
com.android.internal.location.GpsLocationProvider)

static android.content.Context access$500(
com.android.internal.location.GpsLocationProvider)

static java.util.Properties access$600(
com.android.internal.location.GpsLocationProvider)

static boolean access$700(
com.android.internal.location.GpsLocationProvider)

static void access$800(
com.android.internal.location.GpsLocationProvider
long
long
int)

static void access$900(
com.android.internal.location.GpsLocationProvider
byte[]
int)

private static native void class_init_native()

private boolean deleteAidingData(
android.os.Bundle)

public static boolean isSupported()

private native void native_cleanup()

private native void native_delete_aiding_data(
int)

private native void native_disable()

private native boolean native_init()

private native void native_inject_time(
long
long
int)

private native void native_inject_xtra_data(
byte[]
int)

private static native boolean native_is_supported()

private native int native_read_sv_status(
int[]
float[]
float[]
float[]
int[])

private native void native_set_fix_frequency(
int)

private native boolean native_start(
boolean
int)

private native boolean native_stop()

private native boolean native_supports_xtra()

private native void native_wait_for_event()

private void reportLocation(
int
double
double
double
float
float
float
long)

private void reportStatus(
int)

private void reportSvStatus()

private void updateStatus(
int
int)

private void xtraDownloadRequest()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void addGpsStatusListener(
android.location.IGpsStatusListener)

public void disable()

public void enable()

public void enableLocationTracking(
boolean)

public int getAccuracy()

public boolean getLocation(
android.location.Location)

public int getPowerRequirement()

public int getStatus(
android.os.Bundle)

public long getStatusUpdateTime()

public boolean hasMonetaryCost()

public boolean isEnabled()

public boolean isLocationTracking()

public void removeGpsStatusListener(
android.location.IGpsStatusListener)

public boolean requiresCell()

public boolean requiresNetwork()

public boolean requiresSatellite()

public boolean sendExtraCommand(
java.lang.String
android.os.Bundle)

public void setMinTime(
long)

public void startNavigating()

public void stopNavigating()

public boolean supportsAltitude()

public boolean supportsBearing()

public boolean supportsSpeed()

public void updateNetworkState(
int)

________________CLASS________________


public class com.android.internal.location.GpsXtraDownloader extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG

private android.content.Context mContext

private int mNextServerIndex

private java.lang.String[] mXtraServers
----------------METHODS----------------

 void <init>(
android.content.Context
java.util.Properties)

protected static byte[] doDownload(
java.lang.String
boolean
java.lang.String
int)

 byte[] downloadXtraData()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1 name =Cache )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/location/LocationCache; )
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>Ljava/util/LinkedHashMap; )
public class com.android.internal.location.LocationCache$Cache extends java.util.LinkedHashMap

----------------FIELDS----------------

private final int mCapacity

private final java.lang.String mDir

private final java.lang.String mFile

private long mLastSaveTime

private final long mMaxAge

final com.android.internal.location.LocationCache this$0
----------------METHODS----------------

public void <init>(
com.android.internal.location.LocationCache
java.lang.String
java.lang.String
int
long)

static com.android.internal.location.LocationCache$Record access$000(
com.android.internal.location.LocationCache$Cache
java.lang.String)

static void access$100(
com.android.internal.location.LocationCache$Cache)

static void access$200(
com.android.internal.location.LocationCache$Cache
java.lang.String
com.android.internal.location.LocationCache$Record)

private void insert(
java.lang.String
com.android.internal.location.LocationCache$Record)

private void load()

private com.android.internal.location.LocationCache$Record lookup(
java.lang.String)

private void save()

protected boolean removeEldestEntry(
java.util.Map$Entry)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1 name =LocationCentroid )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/location/LocationCache; )
public class com.android.internal.location.LocationCache$LocationCentroid extends java.lang.Object

----------------FIELDS----------------

static final int MAX_SIZE

 double mCentroidLat

 double mCentroidLng

 int mConfidenceSum

 double mLatSum

 double[] mLats

 double mLngSum

 double[] mLngs

 int mNumber

 int[] mRadii

final com.android.internal.location.LocationCache this$0
----------------METHODS----------------

 void <init>(
com.android.internal.location.LocationCache)

public void addLocation(
double
double
int
int)

public int getAccuracy()

public double getCentroidLat()

public double getCentroidLng()

public int getConfidence()

public int getNumber()

public void reset()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Record )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/location/LocationCache; )
public class com.android.internal.location.LocationCache$Record extends java.lang.Object

----------------FIELDS----------------

private final int accuracy

private final int confidence

private final double lat

private final double lng

private final long originTime
----------------METHODS----------------

public void <init>()

public void <init>(
int
int
double
double
long)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public static com.android.internal.location.LocationCache$Record read(
java.io.DataInput)

public int getAccuracy()

public int getConfidence()

public double getLat()

public double getLng()

public long getTime()

public boolean isValid()

public java.lang.String toString()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
java.io.DataOutput)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/location/LocationCache$LocationCentroid;Lcom/android/internal/location/LocationCache$Cache;Lcom/android/internal/location/LocationCache$Record; )
public class com.android.internal.location.LocationCache extends java.lang.Object

----------------FIELDS----------------

private static final int CACHE_DB_VERSION

private static final long CELL_SMOOTHING_WINDOW

private static final int MAX_ACCURACY_ALLOWED

private static final int MAX_CELL_RECORDS

private static final long MAX_CELL_REFRESH_RECORD_AGE

private static final int MAX_WIFI_RECORDS

private static final long MAX_WIFI_REFRESH_RECORD_AGE

private static final long SAVE_FREQUENCY

private static final java.lang.String TAG

private static final int WIFI_MAX_MISS_ALLOWED

private static final int WIFI_MIN_AP_REQUIRED

private static final java.lang.String mCellCacheFile

private static final java.lang.String mWifiCacheFile

private final java.lang.String EXTRA_KEY_LOCATION_TYPE

private final java.lang.String EXTRA_VALUE_LOCATION_TYPE_CELL

private final java.lang.String EXTRA_VALUE_LOCATION_TYPE_WIFI
@dalvik.annotation.Signature (value =Lcom/android/internal/location/LocationCache$Cache<Lcom/android/internal/location/LocationCache$Record;>; )
private final com.android.internal.location.LocationCache$Cache mCellCache

private final com.android.internal.location.LocationCache$LocationCentroid mCellCentroid
@dalvik.annotation.Signature (value =Lcom/android/internal/location/LocationCache$Cache<Lcom/android/internal/location/LocationCache$Record;>; )
private final com.android.internal.location.LocationCache$Cache mWifiCache

private final com.android.internal.location.LocationCache$LocationCentroid mWifiCentroid
----------------METHODS----------------

public void <init>()

private java.lang.String getCellCacheKey(
int
int
int
int)

public void insert(
int
int
int
int
double
double
int
int
long)

public void insert(
java.lang.String
double
double
int
int
long)
@dalvik.annotation.Signature (value =(Lcom/android/internal/location/CellState;Ljava/util/List<Lcom/android/internal/location/CellState;>;Ljava/util/List<Landroid/net/wifi/ScanResult;>;Landroid/location/Location;)Z )
public boolean lookup(
com.android.internal.location.CellState
java.util.List
java.util.List
android.location.Location)

public void save()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/location/LocationCollector; )
 class com.android.internal.location.LocationCollector$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/location/LocationCollector; )
@dalvik.annotation.InnerClass (accessFlags =2 name =CellUploads )
 class com.android.internal.location.LocationCollector$CellUploads extends java.lang.Object

----------------FIELDS----------------

private final int MIN_DISTANCE

private final int SIZE

private final java.lang.String[] cells

private final float[] distance

private int index

private final double[] latitudes

private final double[] longitudes

final com.android.internal.location.LocationCollector this$0

private final boolean[] valid
----------------METHODS----------------

private void <init>(
com.android.internal.location.LocationCollector)

 void <init>(
com.android.internal.location.LocationCollector
com.android.internal.location.LocationCollector$1)

static boolean access$100(
com.android.internal.location.LocationCollector$CellUploads
com.android.internal.location.CellState
android.location.Location)

private boolean contains(
com.android.internal.location.CellState
android.location.Location)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/location/LocationCollector$1;Lcom/android/internal/location/LocationCollector$CellUploads; )
public class com.android.internal.location.LocationCollector extends java.lang.Object

----------------FIELDS----------------

private static final int BURST_MEASUREMENT_INTERVAL

private static final int BURST_NUM_SAMPLES

private static final long BURST_REST_TIME_ON_BATTERY

private static final long BURST_REST_TIME_PLUGGED

private static final double CHARGED_BATTERY_LEVEL

private static final int MAX_BURSTS_FROM_SAME_LOCATION

private static final double MIN_BATTERY_LEVEL

private static final int MIN_CHANGED_WIFI_POINTS

private static final int MIN_DISTANCE_BETWEEN_BURSTS

private static final int MIN_DISTANCE_BETWEEN_REPORTS

private static final long MIN_TIME_BETWEEN_WIFI_REPORTS

private static final long MIN_VALID_LOCATION_TIME

private static final java.lang.String TAG

private boolean mBatteryChargedAndPlugged

private boolean mBatteryLevelIsHealthy

private com.android.internal.location.CellState mCellState

private com.android.internal.location.LocationCollector$CellUploads mCellUploads

private int mCurrentBurstNumSamples

private long mCurrentBurstStartTime

private long mLastBurstEndTime

private android.location.Location mLastBurstLocation

private android.location.Location mLastKnownLocation

private long mLastKnownLocationTime

private android.location.Location mLastUploadedLocation

private long mLastUploadedLocationTime

private long mLastWifiScanElapsedTime

private long mLastWifiScanRealTime

private com.android.internal.location.LocationMasfClient mMasfClient

private boolean mNetworkProviderIsEnabled

private int mNumBurstsFromLastLocation
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/net/wifi/ScanResult;>; )
private java.util.List mWifiCurrentScanResults
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/net/wifi/ScanResult;>; )
private java.util.List mWifiLastScanResults

private boolean mWifiUploadedWithoutLocation
----------------METHODS----------------

public void <init>(
com.android.internal.location.LocationMasfClient)

private void addToQueue(
int)

private boolean isCollectionEnabled()

private void log(
java.lang.String)

public void updateBatteryState(
int
int
boolean)

public void updateCellState(
com.android.internal.location.CellState)

public void updateLocation(
android.location.Location)

public void updateNetworkProviderStatus(
boolean)
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/net/wifi/ScanResult;>;)V )
public void updateWifiScanResults(
java.util.List)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class com.android.internal.location.LocationMasfClient$1 extends java.lang.Object implements com.google.masf.ServiceCallback

----------------FIELDS----------------

final com.android.internal.location.LocationMasfClient this$0

final com.android.internal.location.NetworkLocationProvider$Callback val$finalCallback
----------------METHODS----------------

 void <init>(
com.android.internal.location.LocationMasfClient
com.android.internal.location.NetworkLocationProvider$Callback)

public void onRequestComplete(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class com.android.internal.location.LocationMasfClient$2 extends java.lang.Object implements com.google.masf.ServiceCallback

----------------FIELDS----------------

final com.android.internal.location.LocationMasfClient this$0
----------------METHODS----------------

 void <init>(
com.android.internal.location.LocationMasfClient)

public void onRequestComplete(
java.lang.Object)

________________CLASS________________


public class com.android.internal.location.LocationMasfClient extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String APPLICATION_NAME

private static final java.lang.String APPLICATION_VERSION

private static final int COLLECTION_EVENT_LOG_TAG

private static final java.lang.String DISTRIBUTION_CHANNEL

private static final double E7

private static final java.lang.String EXTRA_KEY_LOCATION_SOURCE

private static final java.lang.String EXTRA_VALUE_LOCATION_SOURCE_CACHED

private static final java.lang.String EXTRA_VALUE_LOCATION_SOURCE_SERVER

private static final java.lang.String MASF_SERVER_ADDRESS

private static final int MAX_WIFI_TO_INCLUDE

private static java.lang.String PLATFORM_BUILD

private static final java.lang.String PLATFORM_ID

private static final java.lang.String PLATFORM_KEY_FILE

private static final java.lang.String REQUEST_QUERY_LOC

private static final long REQUEST_TIMEOUT

private static final java.lang.String REQUEST_UPLOAD_LOC

static final java.lang.String TAG

private final int MAX_COLLECTION_BUFFER_SIZE

private final long MIN_COLLECTION_INTERVAL
@dalvik.annotation.Signature (value =Ljava/util/List<Lcom/android/internal/location/CellState;>; )
private java.util.List mCellHistory

private com.android.internal.location.CellState mCellState

private com.google.common.io.protocol.ProtoBuf mCellularPlatformProfile

private com.google.common.io.protocol.ProtoBuf mCurrentCollectionRequest

private long mLastCollectionUploadTime

private android.location.Location mLocation

private com.android.internal.location.LocationCache mLocationCache

private java.lang.String mPlatformKey

private com.google.common.io.protocol.ProtoBuf mPlatformProfile
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/net/wifi/ScanResult;>; )
private java.util.List mWifiScanResults
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

static boolean access$000(
com.android.internal.location.LocationMasfClient
com.google.common.io.protocol.ProtoBuf)

static android.location.Location access$100(
com.android.internal.location.LocationMasfClient)

static void access$200(
com.android.internal.location.LocationMasfClient
java.lang.String)

private com.google.common.io.protocol.ProtoBuf createCellularPlatformProfile(
com.android.internal.location.CellState)

private com.google.common.io.protocol.ProtoBuf createPlatformProfile()

private com.google.common.io.protocol.ProtoBuf createPlatformProfile(
java.util.Locale)
@dalvik.annotation.Signature (value =(Lcom/google/common/io/protocol/ProtoBuf;Ljava/util/Locale;Ljava/util/List<Landroid/location/Address;>;)V )
private void getAddressFromProtoBuf(
com.google.common.io.protocol.ProtoBuf
java.util.Locale
java.util.List)

private java.lang.String getPlatformKey()

private boolean parseNetworkLocationReply(
com.google.common.io.protocol.ProtoBuf)

private void setPlatformKey(
java.lang.String)

private void uploadCollectionReport(
boolean)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
@dalvik.annotation.Signature (value =(Ljava/util/Locale;Ljava/lang/String;Ljava/lang/String;DDDDILjava/util/List<Landroid/location/Address;>;)V )
public void forwardGeocode(
java.util.Locale
java.lang.String
java.lang.String
double
double
double
double
int
java.util.List)
@dalvik.annotation.Signature (value =(Ljava/util/Collection<Ljava/lang/String;>;ILcom/android/internal/location/CellState;Ljava/util/List<Lcom/android/internal/location/CellState;>;Ljava/util/List<Landroid/net/wifi/ScanResult;>;JLcom/android/internal/location/NetworkLocationProvider$Callback;)V )
public void getNetworkLocation(
java.util.Collection
int
com.android.internal.location.CellState
java.util.List
java.util.List
long
com.android.internal.location.NetworkLocationProvider$Callback)
@dalvik.annotation.Signature (value =(ILandroid/location/Location;Lcom/android/internal/location/CellState;Ljava/util/List<Landroid/net/wifi/ScanResult;>;JZ)V )
public void queueCollectionReport(
int
android.location.Location
com.android.internal.location.CellState
java.util.List
long
boolean)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
@dalvik.annotation.Signature (value =(Ljava/util/Locale;Ljava/lang/String;DDILjava/util/List<Landroid/location/Address;>;)V )
public void reverseGeocode(
java.util.Locale
java.lang.String
double
double
int
java.util.List)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =Callback )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/location/NetworkLocationProvider; )
public abstract interface class com.android.internal.location.NetworkLocationProvider$Callback extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void locationReceived(
android.location.Location
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class com.android.internal.location.NetworkLocationProvider$1 extends java.lang.Object implements com.android.internal.location.NetworkLocationProvider$Callback

----------------FIELDS----------------

final com.android.internal.location.NetworkLocationProvider this$0
----------------METHODS----------------

 void <init>(
com.android.internal.location.NetworkLocationProvider)

public void locationReceived(
android.location.Location
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/location/NetworkLocationProvider$Callback; )
public class com.android.internal.location.NetworkLocationProvider extends android.location.LocationProviderImpl

----------------FIELDS----------------

private static final int MAX_CELL_HISTORY_TO_KEEP

private static final long MAX_TIME_TO_WAIT_FOR_RADIO

private static final int MIN_NETWORK_RETRY_MILLIS

private static final long MIN_TIME_BETWEEN_WIFI_REPORTS

private static final java.lang.String TAG
@dalvik.annotation.Signature (value =Ljava/util/HashSet<Ljava/lang/String;>; )
private java.util.HashSet mApplications
@dalvik.annotation.Signature (value =Ljava/util/LinkedList<Lcom/android/internal/location/CellState;>; )
private java.util.LinkedList mCellHistory

private com.android.internal.location.CellState mCellState

private android.content.Context mContext

private boolean mEnabled

private long mLastCellLockTime

private long mLastCellStateChangeTime

private long mLastNetworkQueryTime

private long mLastSuccessfulNetworkQueryTime

private long mLastWifiScanElapsedTime

private long mLastWifiScanRealTime

private long mLastWifiScanTriggerTime

private android.location.Location mLocation

private com.android.internal.location.LocationMasfClient mMasfClient

private int mNetworkState

private int mStatus

private long mStatusUpdateTime

private boolean mTracking

private boolean mWifiEnabled
@dalvik.annotation.Signature (value =Ljava/util/List<Landroid/net/wifi/ScanResult;>; )
private java.util.List mWifiLastScanResults

private long mWifiScanFrequency
----------------METHODS----------------

public void <init>(
android.content.Context
com.android.internal.location.LocationMasfClient)

static android.location.Location access$000(
com.android.internal.location.NetworkLocationProvider)

static void access$100(
com.android.internal.location.NetworkLocationProvider
int)

static void access$200(
com.android.internal.location.NetworkLocationProvider)

static long access$302(
com.android.internal.location.NetworkLocationProvider
long)

private void clearLocation()

private void forceLocation()

public static boolean isSupported()

private void log(
java.lang.String)

private void updateLocation()

private void updateStatus(
int)

public void addListener(
java.lang.String[])

public void disable()

public void enable()

public void enableLocationTracking(
boolean)

public int getAccuracy()

public boolean getLocation(
android.location.Location)

public int getPowerRequirement()

public int getStatus(
android.os.Bundle)

public long getStatusUpdateTime()

public boolean hasMonetaryCost()

public boolean isEnabled()

public boolean isLocationTracking()

public void removeListener(
java.lang.String[])

public boolean requiresCell()

public boolean requiresNetwork()

public boolean requiresSatellite()

public void setMinTime(
long)

public boolean supportsAltitude()

public boolean supportsBearing()

public boolean supportsSpeed()

public void updateCellLockStatus(
boolean)

public void updateCellState(
com.android.internal.location.CellState)

public void updateNetworkState(
int)

public void updateWifiEnabledState(
boolean)
@dalvik.annotation.Signature (value =(Ljava/util/List<Landroid/net/wifi/ScanResult;>;)V )
public void updateWifiScanResults(
java.util.List)

________________CLASS________________


public class com.android.internal.location.NmeaParser extends java.lang.Object

----------------FIELDS----------------

private static final float KNOTS_TO_METERS_PER_SECOND

private static final java.lang.String TAG

private static final java.util.TimeZone sUtcTimeZone

private double mAltitude

private long mBaseTime

private float mBearing

private int mDay

private android.os.Bundle mExtras

private boolean mHasAltitude

private boolean mHasBearing

private boolean mHasSpeed

private double mLatitude

private android.location.Location mLocation

private double mLongitude

private int mMonth

private final java.lang.String mName

private boolean mNewWaypoint

private float mSpeed

private long mTime

private int mYear
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String)

private double convertFromHHMM(
java.lang.String)

private boolean updateAltitude(
java.lang.String)

private boolean updateBearing(
java.lang.String)

private boolean updateDate(
java.lang.String)

private boolean updateDoubleExtra(
java.lang.String
java.lang.String)

private boolean updateFloatExtra(
java.lang.String
java.lang.String)

private boolean updateIntExtra(
java.lang.String
java.lang.String)

private boolean updateLatLon(
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

private boolean updateSpeed(
java.lang.String)

private boolean updateTime(
java.lang.String)

private boolean updateTime(
java.lang.String
java.lang.String)

public android.location.Location getLocation()

public boolean parseSentence(
java.lang.String)

________________CLASS________________


public class com.android.internal.location.ProtoRequestListener extends java.lang.Object implements com.google.masf.protocol.Request$Listener

----------------FIELDS----------------

private static final java.lang.String TAG

private com.google.common.io.protocol.ProtoBuf protoResponse

private com.google.masf.services.AsyncResult result
----------------METHODS----------------

public void <init>(
com.google.common.io.protocol.ProtoBuf
com.google.masf.ServiceCallback)

public com.google.masf.services.AsyncResult getAsyncResult()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean requestComplete(
com.google.masf.protocol.Request
com.google.masf.protocol.Response)

public void requestException(
com.google.masf.protocol.Request
java.lang.Exception)

________________CLASS________________


public class com.android.internal.location.TrackProvider extends android.location.LocationProviderImpl

----------------FIELDS----------------

private static final long INTERVAL

static final java.lang.String LOG_TAG

private int mAccuracy

private double mAltitude

private long mBaseTime

private float mBearing

private boolean mEnabled

private android.os.Bundle mExtras

private boolean mHasAltitude

private boolean mHasBearing

private boolean mHasMonetaryCost

private boolean mHasSpeed

private android.location.Location mInitialLocation

private long mLastTime

private double mLatitude

private double mLongitude

private long mMaxTime

private long mMinTime

private int mPowerRequirement

private boolean mRepeat

private boolean mRequiresCell

private boolean mRequiresNetwork

private boolean mRequiresSatellite

private float mSpeed

private boolean mSupportsAltitude

private boolean mSupportsBearing

private boolean mSupportsSpeed

private long mTime

private float mTrackSpeed

private int mWaypointIndex
@dalvik.annotation.Signature (value =Ljava/util/List<Lcom/android/internal/location/Waypoint;>; )
private java.util.List mWaypoints
----------------METHODS----------------

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.io.File)

private static boolean booleanVal(
java.lang.String)

private void close(
java.io.Reader)

private static float floatVal(
java.lang.String)

private static int intVal(
java.lang.String)

private double interp(
double
double
float)

private void setTimes()

private void update()

public void disable()

public void enable()

public int getAccuracy()

public android.location.Location getInitialLocation()

public boolean getLocation(
android.location.Location)

public int getPowerRequirement()

public int getStatus(
android.os.Bundle)

public boolean hasMonetaryCost()

public boolean isEnabled()

public void readKml(
java.io.File)

public void readNmea(
java.lang.String
java.io.File)

public void readProperties(
java.io.File)

public void readTrack(
java.io.File)

public boolean requiresCell()

public boolean requiresNetwork()

public boolean requiresSatellite()

public void setAccuracy(
int)

public void setHasMonetaryCost(
boolean)

public void setPowerRequirement(
int)

public void setRepeat(
boolean)

public void setRequiresCell(
boolean)

public void setRequiresNetwork(
boolean)

public void setRequiresSatellite(
boolean)

public void setSupportsAltitude(
boolean)

public void setSupportsBearing(
boolean)

public void setSupportsSpeed(
boolean)

public void setTrackSpeed(
float)

public boolean supportsAltitude()

public boolean supportsBearing()

public boolean supportsSpeed()

________________CLASS________________


 class com.android.internal.location.Waypoint extends java.lang.Object

----------------FIELDS----------------

public android.location.Location mLocation
----------------METHODS----------------

public void <init>(
android.location.Location)

public void <init>(
java.lang.String
long
double
double
double)

public double getAltitude()

public float getBearing()

public android.os.Bundle getExtras()

public double getLatitude()

public android.location.Location getLocation()

public double getLongitude()

public float getSpeed()

public long getTime()

public boolean hasAltitude()

public boolean hasBearing()

public boolean hasSpeed()

public void setBearing(
float)

public void setSpeed(
float)

public java.lang.String toString()

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GAddress extends java.lang.Object

----------------FIELDS----------------

public static final int COMPONENT

public static final int FORMATTED_ADDRESS_LINE
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GAddressComponent extends java.lang.Object

----------------FIELDS----------------

public static final int FEATURE_TYPE

public static final int NAME
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GAppProfile extends java.lang.Object

----------------FIELDS----------------

public static final int APP_KEY

public static final int APP_NAME

public static final int REQUEST_TYPE

public static final int SEARCH_TERM

public static final int SEARCH_TYPE
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GCell extends java.lang.Object

----------------FIELDS----------------

public static final int AGE

public static final int CELLID

public static final int LAC

public static final int MCC

public static final int MNC

public static final int PRIMARY_SCRAMBLING_CODE

public static final int RSSI

public static final int TIMING_ADVANCE
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GCellularPlatformProfile extends java.lang.Object

----------------FIELDS----------------

public static final int CARRIER

public static final int HOME_MCC

public static final int HOME_MNC

public static final int IP

public static final int RADIO_TYPE

public static final int RADIO_TYPE_CDMA

public static final int RADIO_TYPE_GPRS

public static final int RADIO_TYPE_WCDMA
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GCellularProfile extends java.lang.Object

----------------FIELDS----------------

public static final int HISTORICAL_CELLS

public static final int NEIGHBORS

public static final int PREFETCH_MODE

public static final int PRIMARY_CELL

public static final int TIMESTAMP
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GDebugProfile extends java.lang.Object

----------------FIELDS----------------

public static final int ACTUAL_REQUEST

public static final int CACHE_LOCATION

public static final int TRIGGER

public static final int TRIGGER_CELL_AND_WIFI_CHANGE

public static final int TRIGGER_CELL_CHANGE

public static final int TRIGGER_COLLECTION_CONTINUE_BURST

public static final int TRIGGER_COLLECTION_END_BURST

public static final int TRIGGER_COLLECTION_END_BURST_AT_SAME_LOCATION

public static final int TRIGGER_COLLECTION_MOVED_DISTANCE

public static final int TRIGGER_COLLECTION_RESTART_BURST

public static final int TRIGGER_COLLECTION_START_BURST

public static final int TRIGGER_GPS_CHANGE

public static final int TRIGGER_OTHER

public static final int TRIGGER_WIFI_CHANGE
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GDeviceLocation extends java.lang.Object

----------------FIELDS----------------

public static final int CELL

public static final int LOCATION

public static final int WIFI_DEVICE
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GFeature extends java.lang.Object

----------------FIELDS----------------

public static final int ADDRESS

public static final int BOUNDS

public static final int CENTER

public static final int FEATURE_TYPE

public static final int FEATURE_TYPE_ADMINISTRATIVE_AREA

public static final int FEATURE_TYPE_COUNTRY

public static final int FEATURE_TYPE_COUNTRY_CODE

public static final int FEATURE_TYPE_LOCALITY

public static final int FEATURE_TYPE_POST_CODE

public static final int FEATURE_TYPE_PREMISES

public static final int FEATURE_TYPE_SUB_ADMINISTRATIVE_AREA

public static final int FEATURE_TYPE_SUB_LOCALITY

public static final int FEATURE_TYPE_SUB_THOROUGHFARE

public static final int FEATURE_TYPE_THOROUGHFARE

public static final int FEATURE_TYPE_UNKNOWN_TYPE

public static final int NAME
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GGeocodeRequest extends java.lang.Object

----------------FIELDS----------------

public static final int BOUNDING_BOX

public static final int INCLUDE_BOUNDING_BOXES

public static final int NUM_FEATURE_LIMIT
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GGpsProfile extends java.lang.Object

----------------FIELDS----------------

public static final int FIX_QUALITY_DGPS_FIX

public static final int FIX_QUALITY_GPS_FIX

public static final int FIX_QUALITY_INVALID

public static final int GPS_FIX_TYPE

public static final int HDOP

public static final int PDOP

public static final int VDOP
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GLatLng extends java.lang.Object

----------------FIELDS----------------

public static final int LAT_E7

public static final int LNG_E7
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GLocReply extends java.lang.Object

----------------FIELDS----------------

public static final int PLATFORM_KEY

public static final int REPLY_ELEMENTS

public static final int STATUS
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GLocReplyElement extends java.lang.Object

----------------FIELDS----------------

public static final int DEVICE_LOCATION

public static final int LOCATION

public static final int STATUS
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GLocRequest extends java.lang.Object

----------------FIELDS----------------

public static final int APP_PROFILES

public static final int MASF_CLIENT_INFO

public static final int PLATFORM_PROFILE

public static final int REQUEST_ELEMENTS

public static final int USER_PROFILE
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GLocRequestElement extends java.lang.Object

----------------FIELDS----------------

public static final int CELLULAR_PROFILE

public static final int DEBUG_PROFILE

public static final int GEOCODE

public static final int LOCATION

public static final int WIFI_PROFILE
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GLocation extends java.lang.Object

----------------FIELDS----------------

public static final int ACCURACY

public static final int ALTITUDE

public static final int CONFIDENCE

public static final int FEATURE

public static final int GPS_PROFILE

public static final int HEADING

public static final int LAT_LNG

public static final int LOCATION_STRING

public static final int LOCTYPE_CENTROID

public static final int LOCTYPE_GPS

public static final int LOCTYPE_MAPCENTER

public static final int LOCTYPE_TOWER_LOCATION

public static final int LOC_TYPE

public static final int MISC

public static final int OBSOLETE

public static final int SOURCE

public static final int TIMESTAMP

public static final int VELOCITY

public static final int VERTICAL_ACCURACY
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GPlatformProfile extends java.lang.Object

----------------FIELDS----------------

public static final int CELLULAR_PLATFORM_PROFILE

public static final int DISTRIBUTION_CHANNEL

public static final int LOCALE

public static final int PLATFORM

public static final int PLATFORM_KEY

public static final int VERSION

public static final int WIFI_PLATFORM_PROFILE
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GPrefetchMode extends java.lang.Object

----------------FIELDS----------------

public static final int PREFETCH_MODE_MORE_NEIGHBORS

public static final int PREFETCH_MODE_NO_PREFETCH

public static final int PREFETCH_MODE_REQUESTED_NEIGHBORS_ONLY
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GRectangle extends java.lang.Object

----------------FIELDS----------------

public static final int LOWER_LEFT

public static final int UPPER_RIGHT
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GUserProfile extends java.lang.Object

----------------FIELDS----------------

public static final int AUTH_TOKEN

public static final int USER_NAME
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GWifiDevice extends java.lang.Object

----------------FIELDS----------------

public static final int CHANNEL

public static final int MAC

public static final int NOISE

public static final int RSSI

public static final int SSID
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GWifiPlatformProfile extends java.lang.Object

----------------FIELDS----------------

public static final int RADIO_TYPE

public static final int RADIO_TYPE_WIFI802_11_A

public static final int RADIO_TYPE_WIFI802_11_B

public static final int RADIO_TYPE_WIFI802_11_G

public static final int RADIO_TYPE_WIFI802_11_N

public static final int SCANNER_IP

public static final int SCANNER_MAC
----------------METHODS----------------

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.GWifiProfile extends java.lang.Object

----------------FIELDS----------------

public static final int PREFETCH_MODE

public static final int TIMESTAMP

public static final int WIFI_DEVICES
----------------METHODS----------------

________________CLASS________________


public class com.android.internal.location.protocol.GaddressMessageTypes extends java.lang.Object

----------------FIELDS----------------

public static final com.google.common.io.protocol.ProtoBufType GADDRESS

public static final com.google.common.io.protocol.ProtoBufType GADDRESS_COMPONENT
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________


public class com.android.internal.location.protocol.GcellularMessageTypes extends java.lang.Object

----------------FIELDS----------------

public static final com.google.common.io.protocol.ProtoBufType GCELL

public static final com.google.common.io.protocol.ProtoBufType GCELLULAR_PROFILE
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________


public class com.android.internal.location.protocol.GdebugprofileMessageTypes extends java.lang.Object

----------------FIELDS----------------

public static final com.google.common.io.protocol.ProtoBufType GDEBUG_PROFILE
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________


public class com.android.internal.location.protocol.GfeatureMessageTypes extends java.lang.Object

----------------FIELDS----------------

public static final com.google.common.io.protocol.ProtoBufType GFEATURE

public static final com.google.common.io.protocol.ProtoBufType GFEATURE_TYPE
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________


public class com.android.internal.location.protocol.GlatlngMessageTypes extends java.lang.Object

----------------FIELDS----------------

public static final com.google.common.io.protocol.ProtoBufType GLAT_LNG
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________


public class com.android.internal.location.protocol.GlocationMessageTypes extends java.lang.Object

----------------FIELDS----------------

public static final com.google.common.io.protocol.ProtoBufType GAPP_PROFILE

public static final com.google.common.io.protocol.ProtoBufType GCELLULAR_PLATFORM_PROFILE

public static final com.google.common.io.protocol.ProtoBufType GDEVICE_LOCATION

public static final com.google.common.io.protocol.ProtoBufType GGPS_PROFILE

public static final com.google.common.io.protocol.ProtoBufType GLOCATION

public static final com.google.common.io.protocol.ProtoBufType GPLATFORM_PROFILE

public static final com.google.common.io.protocol.ProtoBufType GPREFETCH_MODE

public static final com.google.common.io.protocol.ProtoBufType GUSER_PROFILE

public static final com.google.common.io.protocol.ProtoBufType GWIFI_PLATFORM_PROFILE
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________


public class com.android.internal.location.protocol.GrectangleMessageTypes extends java.lang.Object

----------------FIELDS----------------

public static final com.google.common.io.protocol.ProtoBufType GRECTANGLE
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________


public class com.android.internal.location.protocol.GwifiMessageTypes extends java.lang.Object

----------------FIELDS----------------

public static final com.google.common.io.protocol.ProtoBufType GWIFI_DEVICE

public static final com.google.common.io.protocol.ProtoBufType GWIFI_PROFILE
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________


public class com.android.internal.location.protocol.LocserverMessageTypes extends java.lang.Object

----------------FIELDS----------------

public static final com.google.common.io.protocol.ProtoBufType GGEOCODE_REQUEST

public static final com.google.common.io.protocol.ProtoBufType GLOC_REPLY

public static final com.google.common.io.protocol.ProtoBufType GLOC_REPLY_ELEMENT

public static final com.google.common.io.protocol.ProtoBufType GLOC_REQUEST

public static final com.google.common.io.protocol.ProtoBufType GLOC_REQUEST_ELEMENT

public static final com.google.common.io.protocol.ProtoBufType RESPONSE_CODES
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________


public abstract interface class com.android.internal.location.protocol.ResponseCodes extends java.lang.Object

----------------FIELDS----------------

public static final int STATUS_AUTHORIZATION_REJECTED

public static final int STATUS_BLACKLISTED_IP_CELLID

public static final int STATUS_BLACKLISTED_IP_WIFI

public static final int STATUS_INVALID_CELLID_STRING_FORMAT

public static final int STATUS_INVALID_MAC_STRING_FORMAT

public static final int STATUS_INVALID_NUM_REQUESTS

public static final int STATUS_INVALID_OPERATION_CODE

public static final int STATUS_INVALID_REQUEST

public static final int STATUS_INVALID_USERLOCATION_FORMAT

public static final int STATUS_NON_EXISTENT_AP

public static final int STATUS_NON_EXISTENT_CELLID

public static final int STATUS_NON_SUPPORTED_OPERATION

public static final int STATUS_NON_SUPPORTED_OPERATION_IN_UPDATE

public static final int STATUS_NO_CELLIDDATA_FOR_UPDATE

public static final int STATUS_NO_SOURCE_EXISTS

public static final int STATUS_NO_STORE_EXISTS

public static final int STATUS_PLATFORM_KEY_EXPIRED

public static final int STATUS_SIGNAL_TOO_WEAK

public static final int STATUS_STATUS_FAILED

public static final int STATUS_STATUS_FAILED_NO_GEOCODE

public static final int STATUS_STATUS_FAILED_NO_SAVE

public static final int STATUS_STATUS_FAILED_NO_SOURCE

public static final int STATUS_STATUS_SUCCESS
----------------METHODS----------------

________________CLASS________________


public class com.android.internal.logging.AndroidConfig extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________


public class com.android.internal.logging.AndroidHandler extends java.util.logging.Handler

----------------FIELDS----------------

private static final java.util.logging.Formatter THE_FORMATTER
----------------METHODS----------------

static void <clinit>()

public void <init>()

static int getAndroidLevel(
java.util.logging.Level)

public void close()

public void flush()

public void publish(
java.util.logging.LogRecord)

________________CLASS________________


abstract class com.android.internal.os.LoggingPrintStream extends java.io.PrintStream

----------------FIELDS----------------

private final java.lang.StringBuilder builder

private final java.util.Formatter formatter
----------------METHODS----------------

protected void <init>()

private void flush(
boolean)

public java.io.PrintStream append(
char)

public java.io.PrintStream append(
java.lang.CharSequence)

public java.io.PrintStream append(
java.lang.CharSequence
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public volatile java.lang.Appendable append(
char)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public volatile java.lang.Appendable append(
java.lang.CharSequence)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public volatile java.lang.Appendable append(
java.lang.CharSequence
int
int)

public boolean checkError()

public void close()

public void flush()

public transient java.io.PrintStream format(
java.lang.String
java.lang.Object[])

public transient java.io.PrintStream format(
java.util.Locale
java.lang.String
java.lang.Object[])

protected abstract void log(
java.lang.String)

public void print(
char)

public void print(
double)

public void print(
float)

public void print(
int)

public void print(
long)

public void print(
java.lang.Object)

public void print(
java.lang.String)

public void print(
boolean)

public void print(
char[])

public transient java.io.PrintStream printf(
java.lang.String
java.lang.Object[])

public transient java.io.PrintStream printf(
java.util.Locale
java.lang.String
java.lang.Object[])

public void println()

public void println(
char)

public void println(
double)

public void println(
float)

public void println(
int)

public void println(
long)

public void println(
java.lang.Object)

public void println(
java.lang.String)

public void println(
boolean)

public void println(
char[])

protected void setError()

public void write(
int)

public void write(
byte[])

public void write(
byte[]
int
int)

________________CLASS________________


 class com.android.internal.os.AndroidPrintStream extends com.android.internal.os.LoggingPrintStream

----------------FIELDS----------------

private final int priority

private final java.lang.String tag
----------------METHODS----------------

public void <init>(
int
java.lang.String)

protected void log(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =24 name =GcWatcher )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/os/BinderInternal; )
final class com.android.internal.os.BinderInternal$GcWatcher extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/os/BinderInternal$GcWatcher; )
public class com.android.internal.os.BinderInternal extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/lang/ref/WeakReference<Lcom/android/internal/os/BinderInternal$GcWatcher;>; )
static java.lang.ref.WeakReference mGcWatcher

static long mLastGcTime
----------------METHODS----------------

static void <clinit>()

public void <init>()

static void forceBinderGc()

public static void forceGc(
java.lang.String)

public static final native android.os.IBinder getContextObject()

public static long getLastGcTime()

static final native void handleGc()

public static final native void joinThreadPool()

________________CLASS________________


public class com.android.internal.os.HandlerHelper extends android.os.Handler

----------------FIELDS----------------

private android.os.HandlerInterface mTarget
----------------METHODS----------------

public void <init>(
android.os.HandlerInterface)

public void handleMessage(
android.os.Message)

________________CLASS________________


public class com.android.internal.os.HandlerThread extends java.lang.Thread

----------------FIELDS----------------

final java.lang.Object mMonitor

 java.lang.Runnable mSetup

 android.os.Handler mh

 android.os.HandlerInterface mhi

 java.lang.Throwable mtr
----------------METHODS----------------

public void <init>(
android.os.HandlerInterface
java.lang.Runnable
java.lang.String)

public android.os.Handler getHandler()

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class com.android.internal.os.LoggingPrintStream$1 extends java.io.OutputStream

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
int)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class com.android.internal.os.RuntimeInit$1 extends org.apache.harmony.luni.internal.util.TimezoneGetter

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public java.lang.String getId()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =UncaughtHandler )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/os/RuntimeInit; )
 class com.android.internal.os.RuntimeInit$UncaughtHandler extends java.lang.Object implements java.lang.Thread$UncaughtExceptionHandler

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

 void <init>(
com.android.internal.os.RuntimeInit$1)

public void uncaughtException(
java.lang.Thread
java.lang.Throwable)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/os/RuntimeInit$UncaughtHandler; )
public class com.android.internal.os.RuntimeInit extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG

private static boolean initialized

private static android.os.IBinder mApplicationObject

private static final java.util.concurrent.atomic.AtomicInteger sInReportException
----------------METHODS----------------

static void <clinit>()

public void <init>()

private static final void commonInit()

public static void crash(
java.lang.String
java.lang.Throwable)

public static final native void finishInit()

public static native int getQwertyKeyboard()
@dalvik.annotation.Throws (value =Lcom/android/internal/os/ZygoteInit$MethodAndArgsCaller; )
private static void invokeStaticMain(
java.lang.String
java.lang.String[])

public static final native int isComputerOn()

public static final void main(
java.lang.String[])

private static byte[] marshallException(
java.lang.String
java.lang.Throwable)

public static void reportException(
java.lang.String
java.lang.Throwable
boolean)

public static final void setApplicationObject(
android.os.IBinder)

public static final native void turnComputerOn()

public static android.server.data.CrashData unmarshallException(
byte[])
@dalvik.annotation.Throws (value =Lcom/android/internal/os/ZygoteInit$MethodAndArgsCaller; )
public static final void zygoteInit(
java.lang.String[])

public static final native void zygoteInitNative()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/os/ZygoteConnection; )
@dalvik.annotation.InnerClass (accessFlags =8 name =Arguments )
 class com.android.internal.os.ZygoteConnection$Arguments extends java.lang.Object

----------------FIELDS----------------

 boolean capabilitiesSpecified

 java.lang.String classpath

 long effectiveCapabilities

 boolean enableDebugger

 int gid

 boolean gidSpecified

 int[] gids

 boolean peerWait

 long permittedCapabilities

 java.lang.String[] remainingArgs
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<[I>; )
 java.util.ArrayList rlimits

 boolean runtimeInit

 int uid

 boolean uidSpecified
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
 void <init>(
java.lang.String[])
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
private void parseArgs(
java.lang.String[])

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/os/ZygoteConnection$Arguments; )
 class com.android.internal.os.ZygoteConnection extends java.lang.Object

----------------FIELDS----------------

private static final int CONNECTION_TIMEOUT_MILLIS

private static final int MAX_ZYGOTE_ARGC

private static final java.lang.String TAG

private static final int[][] intArray2d

private static android.net.LocalSocket sPeerWaitSocket

private final android.net.LocalSocket mSocket

private final java.io.DataOutputStream mSocketOutStream

private final java.io.BufferedReader mSocketReader

private final android.net.Credentials peer
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
 void <init>(
android.net.LocalSocket)
@dalvik.annotation.Throws (value =Lcom/android/internal/os/ZygoteSecurityException; )
private static void applyCapabilitiesSecurityPolicy(
com.android.internal.os.ZygoteConnection$Arguments
android.net.Credentials)

private static void applyDebuggerSecurityPolicy(
com.android.internal.os.ZygoteConnection$Arguments)
@dalvik.annotation.Throws (value =Lcom/android/internal/os/ZygoteSecurityException; )
private static void applyRlimitSecurityPolicy(
com.android.internal.os.ZygoteConnection$Arguments
android.net.Credentials)
@dalvik.annotation.Throws (value =Lcom/android/internal/os/ZygoteSecurityException; )
private static void applyUidSecurityPolicy(
com.android.internal.os.ZygoteConnection$Arguments
android.net.Credentials)
@dalvik.annotation.Throws (value =Lcom/android/internal/os/ZygoteInit$MethodAndArgsCaller; )
private void handleChildProc(
com.android.internal.os.ZygoteConnection$Arguments
java.io.FileDescriptor[]
java.io.PrintStream)

private boolean handleParentProc(
int
java.io.FileDescriptor[]
com.android.internal.os.ZygoteConnection$Arguments)

private static void logAndPrintError(
java.io.PrintStream
java.lang.String
java.lang.Throwable)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private java.lang.String[] readArgumentList()

 void closeSocket()

 java.io.FileDescriptor getFileDesciptor()
@dalvik.annotation.Throws (value =Lcom/android/internal/os/ZygoteInit$MethodAndArgsCaller; )
 void run()
@dalvik.annotation.Throws (value =Lcom/android/internal/os/ZygoteInit$MethodAndArgsCaller; )
 boolean runOnce()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =MethodAndArgsCaller )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/os/ZygoteInit; )
public class com.android.internal.os.ZygoteInit$MethodAndArgsCaller extends java.lang.Exception implements java.lang.Runnable

----------------FIELDS----------------

private final java.lang.String[] mArgs

private final java.lang.reflect.Method mMethod
----------------METHODS----------------

public void <init>(
java.lang.reflect.Method
java.lang.String[])

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/os/ZygoteInit$MethodAndArgsCaller; )
public class com.android.internal.os.ZygoteInit extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String ANDROID_SOCKET_ENV

static final int GC_LOOP_COUNT

private static final int LOG_BOOT_PROGRESS_PRELOAD_END

private static final int LOG_BOOT_PROGRESS_PRELOAD_START

private static final java.lang.String PRELOADED_CLASSES

private static final int PRELOAD_GC_THRESHOLD

private static final boolean PRELOAD_RESOURCES

private static final int ROOT_GID

private static final int ROOT_UID

private static final java.lang.String TAG

private static final int UNPRIVILEGED_GID

private static final int UNPRIVILEGED_UID

private static final boolean ZYGOTE_FORK_MODE

private static android.content.res.Resources mResources

private static android.net.LocalServerSocket sServerSocket
----------------METHODS----------------

private void <init>()

private static com.android.internal.os.ZygoteConnection acceptCommandPeer()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static native long capgetPermitted(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static native void closeDescriptor(
java.io.FileDescriptor)

static void closeServerSocket()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static native java.io.FileDescriptor createFileDescriptor(
int)

static void gc()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static native int getpgid(
int)
@dalvik.annotation.Throws (value =Lcom/android/internal/os/ZygoteInit$MethodAndArgsCaller; )
private static void handleSystemServerProcess(
com.android.internal.os.ZygoteConnection$Arguments)
@dalvik.annotation.Throws (value =Lcom/android/internal/os/ZygoteInit$MethodAndArgsCaller; )
static void invokeStaticMain(
java.lang.ClassLoader
java.lang.String
java.lang.String[])

public static void main(
java.lang.String[])

private static void preloadClasses()

private static void preloadResources()

private static void registerZygoteSocket()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static native void reopenStdio(
java.io.FileDescriptor
java.io.FileDescriptor
java.io.FileDescriptor)
@dalvik.annotation.Throws (value =Lcom/android/internal/os/ZygoteInit$MethodAndArgsCaller; )
private static void runForkMode()
@dalvik.annotation.Throws (value =Lcom/android/internal/os/ZygoteInit$MethodAndArgsCaller; )
private static void runSelectLoopMode()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static native int selectReadable(
java.io.FileDescriptor[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static native void setCapabilities(
long
long)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static native void setCloseOnExec(
java.io.FileDescriptor
boolean)

private static void setEffectiveGroup(
int)

private static void setEffectiveUser(
int)

static native int setpgid(
int
int)

static native int setregid(
int
int)

static native int setreuid(
int
int)
@dalvik.annotation.Throws (value =Lcom/android/internal/os/ZygoteInit$MethodAndArgsCaller;Ljava/lang/RuntimeException; )
private static boolean startSystemServer()

________________CLASS________________


 class com.android.internal.os.ZygoteSecurityException extends java.lang.RuntimeException

----------------FIELDS----------------
----------------METHODS----------------

 void <init>(
java.lang.String)

________________CLASS________________


public abstract interface class com.android.internal.policy.IPolicy extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract android.view.LayoutInflater makeNewLayoutInflater(
android.content.Context)

public abstract android.view.Window makeNewWindow(
android.content.Context)

public abstract android.view.WindowManagerPolicy makeNewWindowManager()

________________CLASS________________


public final class com.android.internal.policy.PolicyManager extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String POLICY_IMPL_CLASS_NAME

private static final com.android.internal.policy.IPolicy sPolicy
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static android.view.LayoutInflater makeNewLayoutInflater(
android.content.Context)

public static android.view.Window makeNewWindow(
android.content.Context)

public static android.view.WindowManagerPolicy makeNewWindowManager()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Lcom/android/internal/preference/YesNoPreference$SavedState;>; )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/preference/YesNoPreference$SavedState; )
final class com.android.internal.preference.YesNoPreference$SavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public com.android.internal.preference.YesNoPreference$SavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public com.android.internal.preference.YesNoPreference$SavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =SavedState )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/preference/YesNoPreference; )
 class com.android.internal.preference.YesNoPreference$SavedState extends android.preference.Preference$BaseSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Lcom/android/internal/preference/YesNoPreference$SavedState;>; )
public static final android.os.Parcelable$Creator CREATOR

 boolean wasPositiveResult
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.os.Parcel)

public void <init>(
android.os.Parcelable)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/preference/YesNoPreference$SavedState; )
public class com.android.internal.preference.YesNoPreference extends android.preference.DialogPreference

----------------FIELDS----------------

private boolean mWasPositiveResult
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

public boolean getValue()

protected void onDialogClosed(
boolean)

protected java.lang.Object onGetDefaultValue(
android.content.res.TypedArray
int)

protected void onRestoreInstanceState(
android.os.Parcelable)

protected android.os.Parcelable onSaveInstanceState()

protected void onSetInitialValue(
boolean
java.lang.Object)

public void setValue(
boolean)

public boolean shouldDisableDependents()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =25 name =Favorites )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/provider/Settings; )
public final class com.android.internal.provider.Settings$Favorites extends java.lang.Object implements android.provider.BaseColumns

----------------FIELDS----------------

public static final java.lang.String CELLX

public static final java.lang.String CELLY

public static final java.lang.String CONTAINER

public static final int CONTAINER_DESKTOP

public static final android.net.Uri CONTENT_URI

public static final android.net.Uri CONTENT_URI_NO_NOTIFICATION

public static final java.lang.String ICON

public static final java.lang.String ICON_PACKAGE

public static final java.lang.String ICON_RESOURCE

public static final java.lang.String ICON_TYPE

public static final int ICON_TYPE_BITMAP

public static final int ICON_TYPE_RESOURCE

public static final java.lang.String ID

public static final java.lang.String INTENT

public static final java.lang.String IS_SHORTCUT

public static final java.lang.String ITEM_TYPE

public static final int ITEM_TYPE_APPLICATION

public static final int ITEM_TYPE_SHORTCUT

public static final int ITEM_TYPE_USER_FOLDER

public static final int ITEM_TYPE_WIDGET_CLOCK

public static final int ITEM_TYPE_WIDGET_PHOTO_FRAME

public static final int ITEM_TYPE_WIDGET_SEARCH

public static final java.lang.String SCREEN

public static final java.lang.String SPANX

public static final java.lang.String SPANY

public static final java.lang.String TITLE
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static android.net.Uri getContentUri(
long
boolean)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/provider/Settings$Favorites; )
public class com.android.internal.provider.Settings extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________


public class com.android.internal.telephony.ATParseEx extends java.lang.RuntimeException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public class com.android.internal.telephony.ATResponseParser extends java.lang.Object

----------------FIELDS----------------

private java.lang.String line

private int next

private int tokEnd

private int tokStart
----------------METHODS----------------

public void <init>(
java.lang.String)

private void nextTok()

private void skipPrefix()

private char skipWhiteSpace(
char)

public boolean hasMore()

public boolean nextBoolean()

public int nextInt()

public java.lang.String nextString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/Call; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/Call$State;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =State )
public final class com.android.internal.telephony.Call$State extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.Call$State[] $VALUES

public static final com.android.internal.telephony.Call$State ACTIVE

public static final com.android.internal.telephony.Call$State ALERTING

public static final com.android.internal.telephony.Call$State DIALING

public static final com.android.internal.telephony.Call$State DISCONNECTED

public static final com.android.internal.telephony.Call$State HOLDING

public static final com.android.internal.telephony.Call$State IDLE

public static final com.android.internal.telephony.Call$State INCOMING

public static final com.android.internal.telephony.Call$State WAITING
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.Call$State valueOf(
java.lang.String)

public static com.android.internal.telephony.Call$State[] values()

public boolean isAlive()

public boolean isDialing()

public boolean isRinging()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/Call$State; )
public abstract class com.android.internal.telephony.Call extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Signature (value =()Ljava/util/List<Lcom/android/internal/telephony/Connection;>; )
public abstract java.util.List getConnections()

public long getEarliestConnectTime()

public com.android.internal.telephony.Connection getEarliestConnection()

public long getEarliestCreateTime()

public abstract com.android.internal.telephony.Phone getPhone()

public abstract com.android.internal.telephony.Call$State getState()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public abstract void hangup()

public boolean hasConnection(
com.android.internal.telephony.Connection)

public boolean hasConnections()

public boolean isDialingOrAlerting()

public boolean isIdle()

public abstract boolean isMultiparty()

public boolean isRinging()

________________CLASS________________


public class com.android.internal.telephony.CallStateException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public class com.android.internal.telephony.CallerInfo extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String PRIVATE_NUMBER

private static final java.lang.String TAG

public static final java.lang.String UNKNOWN_NUMBER

private static boolean sSkipVmCheck

public android.graphics.drawable.Drawable cachedPhoto

public android.net.Uri contactRefUri

public android.net.Uri contactRingtoneUri

public boolean isCachedPhotoCurrent

public java.lang.String name

public boolean needUpdate

public java.lang.String numberLabel

public int numberType

public long person_id

public java.lang.String phoneLabel

public java.lang.String phoneNumber

public int photoResource

public boolean shouldSendToVoicemail
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static java.lang.String getCallerId(
android.content.Context
java.lang.String)

public static com.android.internal.telephony.CallerInfo getCallerInfo(
android.content.Context
android.net.Uri)

public static com.android.internal.telephony.CallerInfo getCallerInfo(
android.content.Context
android.net.Uri
android.database.Cursor)

public static com.android.internal.telephony.CallerInfo getCallerInfo(
android.content.Context
java.lang.String)

private static java.lang.String normalize(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/CallerInfoAsyncQuery; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class com.android.internal.telephony.CallerInfoAsyncQuery$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4 name =CallerInfoWorkerHandler )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler; )
public class com.android.internal.telephony.CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler$CallerInfoWorkerHandler extends android.content.AsyncQueryHandler$WorkerHandler

----------------FIELDS----------------

final com.android.internal.telephony.CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler this$1
----------------METHODS----------------

public void <init>(
com.android.internal.telephony.CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler
android.os.Looper)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =CallerInfoAsyncQueryHandler )
@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler$CallerInfoWorkerHandler; )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/CallerInfoAsyncQuery; )
 class com.android.internal.telephony.CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler extends android.content.AsyncQueryHandler

----------------FIELDS----------------

private com.android.internal.telephony.CallerInfo mCallerInfo

private android.content.Context mQueryContext

private android.net.Uri mQueryUri

final com.android.internal.telephony.CallerInfoAsyncQuery this$0
----------------METHODS----------------

private void <init>(
com.android.internal.telephony.CallerInfoAsyncQuery
android.content.Context)

 void <init>(
com.android.internal.telephony.CallerInfoAsyncQuery
android.content.Context
com.android.internal.telephony.CallerInfoAsyncQuery$1)

static android.content.Context access$302(
com.android.internal.telephony.CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler
android.content.Context)

static android.net.Uri access$402(
com.android.internal.telephony.CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler
android.net.Uri)

static com.android.internal.telephony.CallerInfo access$502(
com.android.internal.telephony.CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler
com.android.internal.telephony.CallerInfo)

protected android.os.Handler createHandler(
android.os.Looper)

protected void onQueryComplete(
int
java.lang.Object
android.database.Cursor)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =CookieWrapper )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/CallerInfoAsyncQuery; )
final class com.android.internal.telephony.CallerInfoAsyncQuery$CookieWrapper extends java.lang.Object

----------------FIELDS----------------

public java.lang.Object cookie

public int event

public com.android.internal.telephony.CallerInfoAsyncQuery$OnQueryCompleteListener listener

public java.lang.String number
----------------METHODS----------------

private void <init>()

 void <init>(
com.android.internal.telephony.CallerInfoAsyncQuery$1)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnQueryCompleteListener )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/CallerInfoAsyncQuery; )
public abstract interface class com.android.internal.telephony.CallerInfoAsyncQuery$OnQueryCompleteListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onQueryComplete(
int
java.lang.Object
com.android.internal.telephony.CallerInfo)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/CallerInfoAsyncQuery; )
@dalvik.annotation.InnerClass (accessFlags =9 name =QueryPoolException )
public class com.android.internal.telephony.CallerInfoAsyncQuery$QueryPoolException extends android.database.SQLException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/CallerInfoAsyncQuery$1;Lcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;Lcom/android/internal/telephony/CallerInfoAsyncQuery$QueryPoolException;Lcom/android/internal/telephony/CallerInfoAsyncQuery$CookieWrapper;Lcom/android/internal/telephony/CallerInfoAsyncQuery$OnQueryCompleteListener; )
public class com.android.internal.telephony.CallerInfoAsyncQuery extends java.lang.Object

----------------FIELDS----------------

private static final boolean DBG

private static final int EVENT_ADD_LISTENER

private static final int EVENT_EMERGENCY_NUMBER

private static final int EVENT_END_OF_QUEUE

private static final int EVENT_NEW_QUERY

private static final int EVENT_VOICEMAIL_NUMBER

private static final java.lang.String LOG_TAG

private static boolean sSkipVmCheck

private com.android.internal.telephony.CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler mHandler
----------------METHODS----------------

static void <clinit>()

private void <init>()

static void access$000(
com.android.internal.telephony.CallerInfoAsyncQuery)

private void allocate(
android.content.Context
android.net.Uri)

private static void log(
java.lang.String)

private void release()

public static com.android.internal.telephony.CallerInfoAsyncQuery startQuery(
int
android.content.Context
android.net.Uri
com.android.internal.telephony.CallerInfoAsyncQuery$OnQueryCompleteListener
java.lang.Object)

public static com.android.internal.telephony.CallerInfoAsyncQuery startQuery(
int
android.content.Context
java.lang.String
com.android.internal.telephony.CallerInfoAsyncQuery$OnQueryCompleteListener
java.lang.Object)

public void addQueryListener(
int
com.android.internal.telephony.CallerInfoAsyncQuery$OnQueryCompleteListener
java.lang.Object)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/Connection; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/Connection$DisconnectCause;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =DisconnectCause )
public final class com.android.internal.telephony.Connection$DisconnectCause extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.Connection$DisconnectCause[] $VALUES

public static final com.android.internal.telephony.Connection$DisconnectCause BUSY

public static final com.android.internal.telephony.Connection$DisconnectCause CALL_BARRED

public static final com.android.internal.telephony.Connection$DisconnectCause CONGESTION

public static final com.android.internal.telephony.Connection$DisconnectCause FDN_BLOCKED

public static final com.android.internal.telephony.Connection$DisconnectCause INCOMING_MISSED

public static final com.android.internal.telephony.Connection$DisconnectCause INCOMING_REJECTED

public static final com.android.internal.telephony.Connection$DisconnectCause INVALID_NUMBER

public static final com.android.internal.telephony.Connection$DisconnectCause LIMIT_EXCEEDED

public static final com.android.internal.telephony.Connection$DisconnectCause LOCAL

public static final com.android.internal.telephony.Connection$DisconnectCause LOST_SIGNAL

public static final com.android.internal.telephony.Connection$DisconnectCause MMI

public static final com.android.internal.telephony.Connection$DisconnectCause NORMAL

public static final com.android.internal.telephony.Connection$DisconnectCause NOT_DISCONNECTED

public static final com.android.internal.telephony.Connection$DisconnectCause OUT_OF_SERVICE

public static final com.android.internal.telephony.Connection$DisconnectCause POWER_OFF

public static final com.android.internal.telephony.Connection$DisconnectCause SIM_ERROR
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.Connection$DisconnectCause valueOf(
java.lang.String)

public static com.android.internal.telephony.Connection$DisconnectCause[] values()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/Connection; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =PostDialState )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/Connection$PostDialState;>; )
public final class com.android.internal.telephony.Connection$PostDialState extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.Connection$PostDialState[] $VALUES

public static final com.android.internal.telephony.Connection$PostDialState CANCELLED

public static final com.android.internal.telephony.Connection$PostDialState COMPLETE

public static final com.android.internal.telephony.Connection$PostDialState NOT_STARTED

public static final com.android.internal.telephony.Connection$PostDialState STARTED

public static final com.android.internal.telephony.Connection$PostDialState WAIT

public static final com.android.internal.telephony.Connection$PostDialState WILD
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.Connection$PostDialState valueOf(
java.lang.String)

public static com.android.internal.telephony.Connection$PostDialState[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/Connection$PostDialState;Lcom/android/internal/telephony/Connection$DisconnectCause; )
public abstract class com.android.internal.telephony.Connection extends java.lang.Object

----------------FIELDS----------------

 java.lang.Object userData
----------------METHODS----------------

public void <init>()

public abstract void cancelPostDial()

public abstract java.lang.String getAddress()

public abstract com.android.internal.telephony.Call getCall()

public abstract long getConnectTime()

public abstract long getCreateTime()

public abstract com.android.internal.telephony.Connection$DisconnectCause getDisconnectCause()

public abstract long getDisconnectTime()

public abstract long getDurationMillis()

public abstract long getHoldDurationMillis()

public abstract com.android.internal.telephony.Connection$PostDialState getPostDialState()

public abstract java.lang.String getRemainingPostDialString()

public com.android.internal.telephony.Call$State getState()

public java.lang.Object getUserData()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public abstract void hangup()

public boolean isAlive()

public abstract boolean isIncoming()

public boolean isRinging()

public abstract void proceedAfterWaitChar()

public abstract void proceedAfterWildChar(
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public abstract void separate()

public void setUserData(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/DefaultPhoneNotifier; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class com.android.internal.telephony.DefaultPhoneNotifier$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$com$android$internal$telephony$Phone$DataActivityState

static final int[] $SwitchMap$com$android$internal$telephony$Phone$DataState

static final int[] $SwitchMap$com$android$internal$telephony$Phone$State
----------------METHODS----------------

static void <clinit>()

________________CLASS________________


public abstract interface class com.android.internal.telephony.PhoneNotifier extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void notifyCallForwardingChanged(
com.android.internal.telephony.Phone)

public abstract void notifyCellLocation(
com.android.internal.telephony.Phone)

public abstract void notifyDataActivity(
com.android.internal.telephony.Phone)

public abstract void notifyDataConnection(
com.android.internal.telephony.Phone
java.lang.String)

public abstract void notifyDataConnectionFailed(
com.android.internal.telephony.Phone
java.lang.String)

public abstract void notifyMessageWaitingChanged(
com.android.internal.telephony.Phone)

public abstract void notifyPhoneState(
com.android.internal.telephony.Phone)

public abstract void notifyServiceState(
com.android.internal.telephony.Phone)

public abstract void notifySignalStrength(
com.android.internal.telephony.Phone)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/DefaultPhoneNotifier$1; )
public class com.android.internal.telephony.DefaultPhoneNotifier extends java.lang.Object implements com.android.internal.telephony.PhoneNotifier

----------------FIELDS----------------

private static final boolean DBG

static final java.lang.String LOG_TAG

private com.android.internal.telephony.ITelephonyRegistry mRegistry
----------------METHODS----------------

 void <init>()

public static int convertCallState(
com.android.internal.telephony.Phone$State)

public static com.android.internal.telephony.Phone$State convertCallState(
int)

public static int convertDataActivityState(
com.android.internal.telephony.Phone$DataActivityState)

public static com.android.internal.telephony.Phone$DataActivityState convertDataActivityState(
int)

public static int convertDataState(
com.android.internal.telephony.Phone$DataState)

public static com.android.internal.telephony.Phone$DataState convertDataState(
int)

private void log(
java.lang.String)

public void notifyCallForwardingChanged(
com.android.internal.telephony.Phone)

public void notifyCellLocation(
com.android.internal.telephony.Phone)

public void notifyDataActivity(
com.android.internal.telephony.Phone)

public void notifyDataConnection(
com.android.internal.telephony.Phone
java.lang.String)

public void notifyDataConnectionFailed(
com.android.internal.telephony.Phone
java.lang.String)

public void notifyMessageWaitingChanged(
com.android.internal.telephony.Phone)

public void notifyPhoneState(
com.android.internal.telephony.Phone)

public void notifyServiceState(
com.android.internal.telephony.Phone)

public void notifySignalStrength(
com.android.internal.telephony.Phone)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/IPhoneStateListener$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class com.android.internal.telephony.IPhoneStateListener$Stub$Proxy extends java.lang.Object implements com.android.internal.telephony.IPhoneStateListener

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onCallForwardingIndicatorChanged(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onCallStateChanged(
int
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onCellLocationChanged(
android.os.Bundle)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onDataActivity(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onDataConnectionStateChanged(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onMessageWaitingIndicatorChanged(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onServiceStateChanged(
android.telephony.ServiceState)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void onSignalStrengthChanged(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/IPhoneSubInfo$Stub; )
public abstract interface class com.android.internal.telephony.IPhoneSubInfo extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getDeviceId()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getDeviceSvn()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getLine1AlphaTag()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getLine1Number()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getSimSerialNumber()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getSubscriberId()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getVoiceMailAlphaTag()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getVoiceMailNumber()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/IPhoneSubInfo$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class com.android.internal.telephony.IPhoneSubInfo$Stub$Proxy extends java.lang.Object implements com.android.internal.telephony.IPhoneSubInfo

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getDeviceId()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getDeviceSvn()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getLine1AlphaTag()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getLine1Number()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getSimSerialNumber()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getSubscriberId()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getVoiceMailAlphaTag()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getVoiceMailNumber()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/IPhoneSubInfo; )
@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class com.android.internal.telephony.IPhoneSubInfo$Stub extends android.os.Binder implements com.android.internal.telephony.IPhoneSubInfo

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_getDeviceId

static final int TRANSACTION_getDeviceSvn

static final int TRANSACTION_getLine1AlphaTag

static final int TRANSACTION_getLine1Number

static final int TRANSACTION_getSimSerialNumber

static final int TRANSACTION_getSubscriberId

static final int TRANSACTION_getVoiceMailAlphaTag

static final int TRANSACTION_getVoiceMailNumber
----------------METHODS----------------

public void <init>()

public static com.android.internal.telephony.IPhoneSubInfo asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/ITelephony$Stub; )
public abstract interface class com.android.internal.telephony.ITelephony extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void call(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void cancelMissedCallsNotification()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void dial(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int disableApnType(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean disableDataConnectivity()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void disableLocationUpdates()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int enableApnType(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean enableDataConnectivity()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void enableLocationUpdates()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean endCall()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getCallState()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract android.os.Bundle getCellLocation()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getDataActivity()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int getDataState()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean handlePinMmi(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean isDataConnectivityPossible()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean isIdle()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean isOffhook()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean isRadioOn()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean isRinging()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean isSimPinEnabled()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean setRadio(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean supplyPin(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void toggleRadioOnOff()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void updateServiceLocation()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/ITelephony$Stub; )
 class com.android.internal.telephony.ITelephony$Stub$Proxy extends java.lang.Object implements com.android.internal.telephony.ITelephony

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void call(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void cancelMissedCallsNotification()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void dial(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int disableApnType(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean disableDataConnectivity()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void disableLocationUpdates()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int enableApnType(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean enableDataConnectivity()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void enableLocationUpdates()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean endCall()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getCallState()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public android.os.Bundle getCellLocation()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getDataActivity()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int getDataState()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean handlePinMmi(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean isDataConnectivityPossible()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean isIdle()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean isOffhook()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean isRadioOn()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean isRinging()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean isSimPinEnabled()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean setRadio(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean supplyPin(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void toggleRadioOnOff()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void updateServiceLocation()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/ITelephony$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/ITelephony; )
public abstract class com.android.internal.telephony.ITelephony$Stub extends android.os.Binder implements com.android.internal.telephony.ITelephony

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_call

static final int TRANSACTION_cancelMissedCallsNotification

static final int TRANSACTION_dial

static final int TRANSACTION_disableApnType

static final int TRANSACTION_disableDataConnectivity

static final int TRANSACTION_disableLocationUpdates

static final int TRANSACTION_enableApnType

static final int TRANSACTION_enableDataConnectivity

static final int TRANSACTION_enableLocationUpdates

static final int TRANSACTION_endCall

static final int TRANSACTION_getCallState

static final int TRANSACTION_getCellLocation

static final int TRANSACTION_getDataActivity

static final int TRANSACTION_getDataState

static final int TRANSACTION_handlePinMmi

static final int TRANSACTION_isDataConnectivityPossible

static final int TRANSACTION_isIdle

static final int TRANSACTION_isOffhook

static final int TRANSACTION_isRadioOn

static final int TRANSACTION_isRinging

static final int TRANSACTION_isSimPinEnabled

static final int TRANSACTION_setRadio

static final int TRANSACTION_supplyPin

static final int TRANSACTION_toggleRadioOnOff

static final int TRANSACTION_updateServiceLocation
----------------METHODS----------------

public void <init>()

public static com.android.internal.telephony.ITelephony asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/ITelephonyRegistry$Stub; )
public abstract interface class com.android.internal.telephony.ITelephonyRegistry extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void listen(
java.lang.String
com.android.internal.telephony.IPhoneStateListener
int
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void notifyCallForwardingChanged(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void notifyCallState(
int
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void notifyCellLocation(
android.os.Bundle)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void notifyDataActivity(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void notifyDataConnection(
int
boolean
java.lang.String
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void notifyDataConnectionFailed(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void notifyMessageWaitingChanged(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void notifyServiceState(
android.telephony.ServiceState)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void notifySignalStrength(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/ITelephonyRegistry$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class com.android.internal.telephony.ITelephonyRegistry$Stub$Proxy extends java.lang.Object implements com.android.internal.telephony.ITelephonyRegistry

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void listen(
java.lang.String
com.android.internal.telephony.IPhoneStateListener
int
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void notifyCallForwardingChanged(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void notifyCallState(
int
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void notifyCellLocation(
android.os.Bundle)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void notifyDataActivity(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void notifyDataConnection(
int
boolean
java.lang.String
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void notifyDataConnectionFailed(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void notifyMessageWaitingChanged(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void notifyServiceState(
android.telephony.ServiceState)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void notifySignalStrength(
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/ITelephonyRegistry; )
public abstract class com.android.internal.telephony.ITelephonyRegistry$Stub extends android.os.Binder implements com.android.internal.telephony.ITelephonyRegistry

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_listen

static final int TRANSACTION_notifyCallForwardingChanged

static final int TRANSACTION_notifyCallState

static final int TRANSACTION_notifyCellLocation

static final int TRANSACTION_notifyDataActivity

static final int TRANSACTION_notifyDataConnection

static final int TRANSACTION_notifyDataConnectionFailed

static final int TRANSACTION_notifyMessageWaitingChanged

static final int TRANSACTION_notifyServiceState

static final int TRANSACTION_notifySignalStrength
----------------METHODS----------------

public void <init>()

public static com.android.internal.telephony.ITelephonyRegistry asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16409 name =State )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/MmiCode; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/MmiCode$State;>; )
public final class com.android.internal.telephony.MmiCode$State extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.MmiCode$State[] $VALUES

public static final com.android.internal.telephony.MmiCode$State CANCELLED

public static final com.android.internal.telephony.MmiCode$State COMPLETE

public static final com.android.internal.telephony.MmiCode$State FAILED

public static final com.android.internal.telephony.MmiCode$State PENDING
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.MmiCode$State valueOf(
java.lang.String)

public static com.android.internal.telephony.MmiCode$State[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/MmiCode$State; )
public abstract interface class com.android.internal.telephony.MmiCode extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void cancel()

public abstract java.lang.CharSequence getMessage()

public abstract com.android.internal.telephony.MmiCode$State getState()

public abstract boolean isCancelable()

public abstract boolean isUssdRequest()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/Phone$DataActivityState;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =DataActivityState )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/Phone; )
public final class com.android.internal.telephony.Phone$DataActivityState extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.Phone$DataActivityState[] $VALUES

public static final com.android.internal.telephony.Phone$DataActivityState DATAIN

public static final com.android.internal.telephony.Phone$DataActivityState DATAINANDOUT

public static final com.android.internal.telephony.Phone$DataActivityState DATAOUT

public static final com.android.internal.telephony.Phone$DataActivityState NONE
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.Phone$DataActivityState valueOf(
java.lang.String)

public static com.android.internal.telephony.Phone$DataActivityState[] values()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16409 name =DataState )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/Phone; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/Phone$DataState;>; )
public final class com.android.internal.telephony.Phone$DataState extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.Phone$DataState[] $VALUES

public static final com.android.internal.telephony.Phone$DataState CONNECTED

public static final com.android.internal.telephony.Phone$DataState CONNECTING

public static final com.android.internal.telephony.Phone$DataState DISCONNECTED

public static final com.android.internal.telephony.Phone$DataState SUSPENDED
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.Phone$DataState valueOf(
java.lang.String)

public static com.android.internal.telephony.Phone$DataState[] values()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/Phone$State;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =State )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/Phone; )
public final class com.android.internal.telephony.Phone$State extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.Phone$State[] $VALUES

public static final com.android.internal.telephony.Phone$State IDLE

public static final com.android.internal.telephony.Phone$State OFFHOOK

public static final com.android.internal.telephony.Phone$State RINGING
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.Phone$State valueOf(
java.lang.String)

public static com.android.internal.telephony.Phone$State[] values()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/Phone$SuppService;>; )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/Phone; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =SuppService )
public final class com.android.internal.telephony.Phone$SuppService extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.Phone$SuppService[] $VALUES

public static final com.android.internal.telephony.Phone$SuppService CONFERENCE

public static final com.android.internal.telephony.Phone$SuppService HANGUP

public static final com.android.internal.telephony.Phone$SuppService REJECT

public static final com.android.internal.telephony.Phone$SuppService SEPARATE

public static final com.android.internal.telephony.Phone$SuppService SWITCH

public static final com.android.internal.telephony.Phone$SuppService TRANSFER

public static final com.android.internal.telephony.Phone$SuppService UNKNOWN
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.Phone$SuppService valueOf(
java.lang.String)

public static com.android.internal.telephony.Phone$SuppService[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/Phone$SuppService;Lcom/android/internal/telephony/Phone$DataActivityState;Lcom/android/internal/telephony/Phone$DataState;Lcom/android/internal/telephony/Phone$State; )
public abstract interface class com.android.internal.telephony.Phone extends java.lang.Object

----------------FIELDS----------------

public static final int APN_ALREADY_ACTIVE

public static final int APN_REQUEST_FAILED

public static final int APN_REQUEST_STARTED

public static final java.lang.String APN_TYPE_ALL

public static final java.lang.String APN_TYPE_DEFAULT

public static final java.lang.String APN_TYPE_MMS

public static final int APN_TYPE_NOT_AVAILABLE

public static final int BM_AUS2_BAND

public static final int BM_AUS_BAND

public static final int BM_BOUNDARY

public static final int BM_EURO_BAND

public static final int BM_JPN_BAND

public static final int BM_UNSPECIFIED

public static final int BM_US_BAND

public static final java.lang.String DATA_APN_KEY

public static final java.lang.String DATA_APN_TYPE_KEY

public static final java.lang.String DATA_IFACE_NAME_KEY

public static final boolean DEBUG_PHONE

public static final java.lang.String FAILURE_REASON_KEY

public static final java.lang.String FEATURE_ENABLE_MMS

public static final java.lang.String NETWORK_UNAVAILABLE_KEY

public static final int NT_AUTO_TYPE

public static final int NT_GSM_TYPE

public static final int NT_WCDMA_TYPE

public static final java.lang.String PHONE_NAME_KEY

public static final java.lang.String REASON_APN_CHANGED

public static final java.lang.String REASON_APN_SWITCHED

public static final java.lang.String REASON_DATA_DISABLED

public static final java.lang.String REASON_DATA_ENABLED

public static final java.lang.String REASON_GPRS_DETACHED

public static final java.lang.String REASON_RADIO_TURNED_OFF

public static final java.lang.String REASON_RESTORE_DEFAULT_APN

public static final java.lang.String REASON_ROAMING_OFF

public static final java.lang.String REASON_ROAMING_ON

public static final java.lang.String REASON_VOICE_CALL_ENDED

public static final java.lang.String REASON_VOICE_CALL_STARTED

public static final java.lang.String STATE_CHANGE_REASON_KEY

public static final java.lang.String STATE_KEY
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public abstract void acceptCall()

public abstract boolean canConference()

public abstract boolean canTransfer()

public abstract void clearDisconnected()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public abstract void conference()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public abstract com.android.internal.telephony.Connection dial(
java.lang.String)

public abstract int disableApnType(
java.lang.String)

public abstract boolean disableDataConnectivity()

public abstract void disableLocationUpdates()

public abstract int enableApnType(
java.lang.String)

public abstract boolean enableDataConnectivity()

public abstract void enableLocationUpdates()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public abstract void explicitCallTransfer()

public abstract java.lang.String getActiveApn()

public abstract java.lang.String[] getActiveApnTypes()

public abstract void getAvailableNetworks(
android.os.Message)

public abstract com.android.internal.telephony.Call getBackgroundCall()

public abstract boolean getCallForwardingIndicator()

public abstract void getCallForwardingOption(
int
android.os.Message)

public abstract void getCallWaiting(
android.os.Message)

public abstract android.telephony.CellLocation getCellLocation()

public abstract android.content.Context getContext()
@dalvik.annotation.Signature (value =()Ljava/util/List<Lcom/android/internal/telephony/gsm/PdpConnection;>; )
public abstract java.util.List getCurrentPdpList()

public abstract com.android.internal.telephony.Phone$DataActivityState getDataActivityState()

public abstract com.android.internal.telephony.Phone$DataState getDataConnectionState()

public abstract boolean getDataRoamingEnabled()

public abstract java.lang.String getDeviceId()

public abstract java.lang.String getDeviceSvn()

public abstract java.lang.String[] getDnsServers(
java.lang.String)

public abstract com.android.internal.telephony.Call getForegroundCall()

public abstract java.lang.String getGateway(
java.lang.String)

public abstract java.lang.String getInterfaceName(
java.lang.String)

public abstract java.lang.String getIpAddress(
java.lang.String)

public abstract java.lang.String getLine1AlphaTag()

public abstract java.lang.String getLine1Number()

public abstract boolean getMessageWaitingIndicator()

public abstract boolean getMute()

public abstract void getNeighboringCids(
android.os.Message)

public abstract void getOutgoingCallerIdDisplay(
android.os.Message)

public abstract void getPdpContextList(
android.os.Message)
@dalvik.annotation.Signature (value =()Ljava/util/List<+Lcom/android/internal/telephony/MmiCode;>; )
public abstract java.util.List getPendingMmiCodes()

public abstract java.lang.String getPhoneName()

public abstract void getPreferredNetworkType(
android.os.Message)

public abstract com.android.internal.telephony.Call getRingingCall()

public abstract android.telephony.ServiceState getServiceState()

public abstract int getSignalStrengthASU()

public abstract com.android.internal.telephony.SimCard getSimCard()

public abstract boolean getSimRecordsLoaded()

public abstract java.lang.String getSimSerialNumber()

public abstract com.android.internal.telephony.test.SimulatedRadioControl getSimulatedRadioControl()

public abstract com.android.internal.telephony.Phone$State getState()

public abstract java.lang.String getSubscriberId()

public abstract boolean getUnitTestMode()

public abstract java.lang.String getVoiceMailAlphaTag()

public abstract java.lang.String getVoiceMailNumber()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public abstract boolean handleInCallMmiCommands(
java.lang.String)

public abstract boolean handlePinMmi(
java.lang.String)

public abstract void invokeOemRilRequestRaw(
byte[]
android.os.Message)

public abstract void invokeOemRilRequestStrings(
java.lang.String[]
android.os.Message)

public abstract boolean isDataConnectivityPossible()

public abstract void queryAvailableBandMode(
android.os.Message)

public abstract void registerForDisconnect(
android.os.Handler
int
java.lang.Object)

public abstract void registerForIncomingRing(
android.os.Handler
int
java.lang.Object)

public abstract void registerForMmiComplete(
android.os.Handler
int
java.lang.Object)

public abstract void registerForMmiInitiate(
android.os.Handler
int
java.lang.Object)

public abstract void registerForNewRingingConnection(
android.os.Handler
int
java.lang.Object)

public abstract void registerForPhoneStateChanged(
android.os.Handler
int
java.lang.Object)

public abstract void registerForServiceStateChanged(
android.os.Handler
int
java.lang.Object)

public abstract void registerForSuppServiceFailed(
android.os.Handler
int
java.lang.Object)

public abstract void registerForSuppServiceNotification(
android.os.Handler
int
java.lang.Object)

public abstract void registerForUnknownConnection(
android.os.Handler
int
java.lang.Object)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public abstract void rejectCall()

public abstract void selectNetworkManually(
com.android.internal.telephony.gsm.NetworkInfo
android.os.Message)

public abstract void sendDtmf(
char)

public abstract void sendUssdResponse(
java.lang.String)

public abstract void setBandMode(
int
android.os.Message)

public abstract void setCallForwardingOption(
int
int
java.lang.String
int
android.os.Message)

public abstract void setCallWaiting(
boolean
android.os.Message)

public abstract void setDataRoamingEnabled(
boolean)

public abstract void setLine1Number(
java.lang.String
java.lang.String
android.os.Message)

public abstract void setMute(
boolean)

public abstract void setNetworkSelectionModeAutomatic(
android.os.Message)

public abstract void setOnPostDialCharacter(
android.os.Handler
int
java.lang.Object)

public abstract void setOutgoingCallerIdDisplay(
int
android.os.Message)

public abstract void setPreferredNetworkType(
int
android.os.Message)

public abstract void setRadioPower(
boolean)

public abstract void setUnitTestMode(
boolean)

public abstract void setVoiceMailNumber(
java.lang.String
java.lang.String
android.os.Message)

public abstract void startDtmf(
char)

public abstract void stopDtmf()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public abstract void switchHoldingAndActive()

public abstract void unregisterForDisconnect(
android.os.Handler)

public abstract void unregisterForIncomingRing(
android.os.Handler)

public abstract void unregisterForMmiComplete(
android.os.Handler)

public abstract void unregisterForMmiInitiate(
android.os.Handler)

public abstract void unregisterForNewRingingConnection(
android.os.Handler)

public abstract void unregisterForPhoneStateChanged(
android.os.Handler)

public abstract void unregisterForServiceStateChanged(
android.os.Handler)

public abstract void unregisterForSuppServiceFailed(
android.os.Handler)

public abstract void unregisterForSuppServiceNotification(
android.os.Handler)

public abstract void unregisterForUnknownConnection(
android.os.Handler)

public abstract void updateServiceLocation(
android.os.Message)

________________CLASS________________


public abstract class com.android.internal.telephony.PhoneBase extends java.lang.Object implements com.android.internal.telephony.Phone

----------------FIELDS----------------

private static final java.lang.String LOG_TAG

protected android.content.Context mContext

protected final android.os.RegistrantList mDisconnectRegistrants

protected final android.os.RegistrantList mIncomingRingRegistrants

protected android.os.Looper mLooper

protected final android.os.RegistrantList mMmiCompleteRegistrants

protected final android.os.RegistrantList mMmiRegistrants

protected final android.os.RegistrantList mNewRingingConnectionRegistrants

protected com.android.internal.telephony.PhoneNotifier mNotifier

protected final android.os.RegistrantList mPhoneStateRegistrants

protected final android.os.RegistrantList mServiceStateRegistrants

protected com.android.internal.telephony.test.SimulatedRadioControl mSimulatedRadioControl

protected final android.os.RegistrantList mSuppServiceFailedRegistrants

 boolean mUnitTestMode

protected final android.os.RegistrantList mUnknownConnectionRegistrants
----------------METHODS----------------

protected void <init>(
com.android.internal.telephony.PhoneNotifier
android.content.Context)

protected void <init>(
com.android.internal.telephony.PhoneNotifier
android.content.Context
boolean)

private void checkCorrectThread(
android.os.Handler)

public android.content.Context getContext()

public abstract java.util.List getPendingMmiCodes()

public com.android.internal.telephony.test.SimulatedRadioControl getSimulatedRadioControl()

public boolean getUnitTestMode()

protected void notifyCallStateChangedP()

protected void notifyDisconnectP(
com.android.internal.telephony.Connection)

protected void notifyNewRingingConnectionP(
com.android.internal.telephony.Connection)

protected void notifyServiceStateChangedP(
android.telephony.ServiceState)

public void registerForDisconnect(
android.os.Handler
int
java.lang.Object)

public void registerForIncomingRing(
android.os.Handler
int
java.lang.Object)

public void registerForMmiComplete(
android.os.Handler
int
java.lang.Object)

public void registerForMmiInitiate(
android.os.Handler
int
java.lang.Object)

public void registerForNewRingingConnection(
android.os.Handler
int
java.lang.Object)

public void registerForPhoneStateChanged(
android.os.Handler
int
java.lang.Object)

public void registerForServiceStateChanged(
android.os.Handler
int
java.lang.Object)

public void registerForSuppServiceFailed(
android.os.Handler
int
java.lang.Object)

public void registerForUnknownConnection(
android.os.Handler
int
java.lang.Object)

public void setUnitTestMode(
boolean)

public void unregisterForDisconnect(
android.os.Handler)

public void unregisterForIncomingRing(
android.os.Handler)

public void unregisterForMmiComplete(
android.os.Handler)

public void unregisterForMmiInitiate(
android.os.Handler)

public void unregisterForNewRingingConnection(
android.os.Handler)

public void unregisterForPhoneStateChanged(
android.os.Handler)

public void unregisterForServiceStateChanged(
android.os.Handler)

public void unregisterForSuppServiceFailed(
android.os.Handler)

public void unregisterForUnknownConnection(
android.os.Handler)

________________CLASS________________


public class com.android.internal.telephony.PhoneFactory extends java.lang.Object

----------------FIELDS----------------

static final java.lang.String LOG_TAG

static final int SOCKET_OPEN_MAX_RETRY

static final int SOCKET_OPEN_RETRY_MILLIS

private static android.os.Looper sLooper

private static boolean sMadeDefaults

private static com.android.internal.telephony.PhoneNotifier sPhoneNotifier
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/android/internal/telephony/Phone;>; )
private static java.util.ArrayList sPhones

private static java.lang.Object testMailbox
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static com.android.internal.telephony.Phone getDefaultPhone()

public static void makeDefaultPhones(
android.content.Context)

public static void registerPhone(
com.android.internal.telephony.Phone)

private static void useNewRIL(
android.content.Context)

________________CLASS________________

@java.lang.Deprecated
public final class com.android.internal.telephony.PhoneStateIntentReceiver extends android.content.BroadcastReceiver

----------------FIELDS----------------

private static final boolean DBG

public static final java.lang.String INTENT_KEY_ASU

public static final java.lang.String INTENT_KEY_NUM

private static final java.lang.String LOG_TAG

private static final int NOTIF_MAX

private static final int NOTIF_PHONE

private static final int NOTIF_SERVICE

private static final int NOTIF_SIGNAL

 int mAsu

private int mAsuEventWhat

private android.content.Context mContext

private android.content.IntentFilter mFilter

 java.lang.String mIncomingNumber

private int mLocationEventWhat

 com.android.internal.telephony.Phone$State mPhoneState

private int mPhoneStateEventWhat

 android.telephony.ServiceState mServiceState

private int mServiceStateEventWhat

private android.os.Handler mTarget

private int mWants
----------------METHODS----------------

public void <init>()

public void <init>(
android.content.Context
android.os.Handler)

public boolean getNotifyPhoneCallState()

public boolean getNotifyServiceState()

public boolean getNotifySignalStrength()

public com.android.internal.telephony.Phone$State getPhoneState()

public android.telephony.ServiceState getServiceState()

public int getSignalStrength()

public int getSignalStrengthDbm()

public void notifyPhoneCallState(
int)

public void notifyServiceState(
int)

public void notifySignalStrength(
int)

public void onReceive(
android.content.Context
android.content.Intent)

public void registerIntent()

public void setContext(
android.content.Context)

public void setTarget(
android.os.Handler)

public void unregisterIntent()

________________CLASS________________


public class com.android.internal.telephony.PhoneSubInfo extends com.android.internal.telephony.IPhoneSubInfo$Stub

----------------FIELDS----------------

private static final java.lang.String READ_PHONE_STATE

private android.content.Context mContext

private com.android.internal.telephony.Phone mPhone
----------------METHODS----------------

public void <init>(
com.android.internal.telephony.Phone)

public java.lang.String getDeviceId()

public java.lang.String getDeviceSvn()

public java.lang.String getLine1AlphaTag()

public java.lang.String getLine1Number()

public java.lang.String getSimSerialNumber()

public java.lang.String getSubscriberId()

public java.lang.String getVoiceMailAlphaTag()

public java.lang.String getVoiceMailNumber()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/SimCard; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/SimCard$State;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =State )
public final class com.android.internal.telephony.SimCard$State extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.SimCard$State[] $VALUES

public static final com.android.internal.telephony.SimCard$State ABSENT

public static final com.android.internal.telephony.SimCard$State NETWORK_LOCKED

public static final com.android.internal.telephony.SimCard$State PIN_REQUIRED

public static final com.android.internal.telephony.SimCard$State PUK_REQUIRED

public static final com.android.internal.telephony.SimCard$State READY

public static final com.android.internal.telephony.SimCard$State UNKNOWN
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.SimCard$State valueOf(
java.lang.String)

public static com.android.internal.telephony.SimCard$State[] values()

public boolean isPinLocked()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/SimCard$State; )
public abstract interface class com.android.internal.telephony.SimCard extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String INTENT_KEY_LOCKED_REASON

public static final java.lang.String INTENT_KEY_SIM_STATE

public static final java.lang.String INTENT_VALUE_LOCKED_NETWORK

public static final java.lang.String INTENT_VALUE_LOCKED_ON_PIN

public static final java.lang.String INTENT_VALUE_LOCKED_ON_PUK

public static final java.lang.String INTENT_VALUE_SIM_ABSENT

public static final java.lang.String INTENT_VALUE_SIM_IMSI

public static final java.lang.String INTENT_VALUE_SIM_LOADED

public static final java.lang.String INTENT_VALUE_SIM_LOCKED

public static final java.lang.String INTENT_VALUE_SIM_NOT_READY

public static final java.lang.String INTENT_VALUE_SIM_READY
----------------METHODS----------------

public abstract void changeSimFdnPassword(
java.lang.String
java.lang.String
android.os.Message)

public abstract void changeSimLockPassword(
java.lang.String
java.lang.String
android.os.Message)

public abstract java.lang.String getServiceProviderName()

public abstract boolean getSimFdnEnabled()

public abstract boolean getSimLockEnabled()

public abstract com.android.internal.telephony.SimCard$State getState()

public abstract void registerForAbsent(
android.os.Handler
int
java.lang.Object)

public abstract void registerForLocked(
android.os.Handler
int
java.lang.Object)

public abstract void registerForNetworkLocked(
android.os.Handler
int
java.lang.Object)

public abstract void setSimFdnEnabled(
boolean
java.lang.String
android.os.Message)

public abstract void setSimLockEnabled(
boolean
java.lang.String
android.os.Message)

public abstract void supplyNetworkDepersonalization(
java.lang.String
android.os.Message)

public abstract void supplyPin(
java.lang.String
android.os.Message)

public abstract void supplyPin2(
java.lang.String
android.os.Message)

public abstract void supplyPuk(
java.lang.String
java.lang.String
android.os.Message)

public abstract void supplyPuk2(
java.lang.String
java.lang.String
android.os.Message)

public abstract void unregisterForAbsent(
android.os.Handler)

public abstract void unregisterForLocked(
android.os.Handler)

public abstract void unregisterForNetworkLocked(
android.os.Handler)

________________CLASS________________


public class com.android.internal.telephony.TelephonyIntents extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACTION_ANY_DATA_CONNECTION_STATE_CHANGED

public static final java.lang.String ACTION_DATA_CONNECTION_FAILED

public static final java.lang.String ACTION_NETWORK_SET_TIME

public static final java.lang.String ACTION_NETWORK_SET_TIMEZONE

public static final java.lang.String ACTION_PHONE_STATE_CHANGED

public static final java.lang.String ACTION_SERVICE_STATE_CHANGED

public static final java.lang.String ACTION_SIGNAL_STRENGTH_CHANGED

public static final java.lang.String ACTION_SIM_STATE_CHANGED
----------------METHODS----------------

public void <init>()

________________CLASS________________


public abstract interface class com.android.internal.telephony.TelephonyProperties extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String PROPERTY_BASEBAND_VERSION

public static final java.lang.String PROPERTY_DATA_NETWORK_TYPE

public static final java.lang.String PROPERTY_LINE1_VOICE_CALL_FORWARDING

public static final java.lang.String PROPERTY_LINE1_VOICE_MAIL_WAITING

public static final java.lang.String PROPERTY_OPERATOR_ALPHA

public static final java.lang.String PROPERTY_OPERATOR_ISMANUAL

public static final java.lang.String PROPERTY_OPERATOR_ISO_COUNTRY

public static final java.lang.String PROPERTY_OPERATOR_ISROAMING

public static final java.lang.String PROPERTY_OPERATOR_NUMERIC

public static final java.lang.String PROPERTY_RIL_IMPL

public static final java.lang.String PROPERTY_SIM_OPERATOR_ALPHA

public static final java.lang.String PROPERTY_SIM_OPERATOR_ISO_COUNTRY

public static final java.lang.String PROPERTY_SIM_OPERATOR_NUMERIC

public static final java.lang.String PROPERTY_SIM_STATE
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/AdnRecord; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Lcom/android/internal/telephony/gsm/AdnRecord;>; )
final class com.android.internal.telephony.gsm.AdnRecord$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public com.android.internal.telephony.gsm.AdnRecord createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public com.android.internal.telephony.gsm.AdnRecord[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class com.android.internal.telephony.gsm.AdnRecord extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------

static final int ADN_BCD_NUMBER_LENGTH

static final int ADN_CAPABILITY_ID

static final int ADN_DAILING_NUMBER_END

static final int ADN_DAILING_NUMBER_START

static final int ADN_EXTENSION_ID

static final int ADN_TON_AND_NPI
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Lcom/android/internal/telephony/gsm/AdnRecord;>; )
public static final android.os.Parcelable$Creator CREATOR

static final int EXT_RECORD_LENGTH_BYTES

static final int EXT_RECORD_TYPE_ADDITIONAL_DATA

static final int EXT_RECORD_TYPE_MASK

static final int FOOTER_SIZE_BYTES

static final java.lang.String LOG_TAG

static final int MAX_EXT_CALLED_PARTY_LENGTH

static final int MAX_NUMBER_SIZE_BYTES

 java.lang.String alphaTag

 int efid

 int extRecord

 java.lang.String number

 int recordNumber
----------------METHODS----------------

static void <clinit>()

public void <init>(
int
int
java.lang.String
java.lang.String)

public void <init>(
int
int
byte[])

public void <init>(
java.lang.String
java.lang.String)

public void <init>(
byte[])

private void parseRecord(
byte[])

public void appendExtRecord(
byte[])

public byte[] buildAdnString(
int)

public int describeContents()

public java.lang.String getAlphaTag()

public java.lang.String getNumber()

public boolean hasExtendedRecord()

public boolean isEmpty()

public boolean isEqual(
com.android.internal.telephony.gsm.AdnRecord)

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public abstract interface class com.android.internal.telephony.gsm.SimConstants extends java.lang.Object

----------------FIELDS----------------

public static final int EF_AD

public static final int EF_ADN

public static final int EF_CFF_CPHS

public static final int EF_CFIS

public static final int EF_EXT1

public static final int EF_EXT2

public static final int EF_EXT3

public static final int EF_EXT6

public static final int EF_FDN

public static final int EF_ICCID

public static final int EF_IMG

public static final int EF_INFO_CPHS

public static final int EF_MAILBOX_CPHS

public static final int EF_MBDN

public static final int EF_MBI

public static final int EF_MSISDN

public static final int EF_MWIS

public static final int EF_PNN

public static final int EF_SDN

public static final int EF_SMS

public static final int EF_SPDI

public static final int EF_SPN

public static final int EF_SPN_CPHS

public static final int EF_SPN_SHORT_CPHS

public static final int EF_SST

public static final int EF_VOICE_MAIL_INDICATOR_CPHS

public static final int SMS_RECORD_LENGTH
----------------METHODS----------------

________________CLASS________________


public final class com.android.internal.telephony.gsm.AdnRecordCache extends android.os.Handler implements com.android.internal.telephony.gsm.SimConstants

----------------FIELDS----------------

static final int EVENT_LOAD_ALL_ADN_LIKE_DONE

static final int EVENT_UPDATE_ADN_DONE
@dalvik.annotation.Signature (value =Landroid/util/SparseArray<Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/AdnRecord;>;>; )
 android.util.SparseArray adnLikeFiles
@dalvik.annotation.Signature (value =Landroid/util/SparseArray<Ljava/util/ArrayList<Landroid/os/Message;>;>; )
 android.util.SparseArray adnLikeWaiters

 com.android.internal.telephony.gsm.GSMPhone phone
@dalvik.annotation.Signature (value =Landroid/util/SparseArray<Landroid/os/Message;>; )
 android.util.SparseArray userWriteResponse
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.GSMPhone)

private void clearUserWriters()

private void clearWaiters()

private int extensionEfForEf(
int)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Landroid/os/Message;>;Landroid/os/AsyncResult;)V )
private void notifyWaiters(
java.util.ArrayList
android.os.AsyncResult)

private void sendErrorResponse(
android.os.Message
java.lang.String)
@dalvik.annotation.Signature (value =(I)Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/AdnRecord;>; )
 java.util.ArrayList getRecordsIfLoaded(
int)

public void handleMessage(
android.os.Message)

 void requestLoadAllAdnLike(
int
android.os.Message)

 void reset()

 void updateAdnByIndex(
int
com.android.internal.telephony.gsm.AdnRecord
int
java.lang.String
android.os.Message)

 void updateAdnBySearch(
int
com.android.internal.telephony.gsm.AdnRecord
com.android.internal.telephony.gsm.AdnRecord
java.lang.String
android.os.Message)

________________CLASS________________


 class com.android.internal.telephony.gsm.AdnRecordLoader extends android.os.Handler

----------------FIELDS----------------

static final int EVENT_ADN_LOAD_ALL_DONE

static final int EVENT_ADN_LOAD_DONE

static final int EVENT_EF_LINEAR_RECORD_SIZE_DONE

static final int EVENT_EXT_RECORD_LOAD_DONE

static final int EVENT_UPDATE_RECORD_DONE

static final java.lang.String LOG_TAG
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/AdnRecord;>; )
 java.util.ArrayList adns

 int ef

 int extensionEF

 int pendingExtLoads

 com.android.internal.telephony.gsm.GSMPhone phone

 java.lang.String pin2

 int recordNumber

 java.lang.Object result

 android.os.Message userResponse
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.GSMPhone)

public void handleMessage(
android.os.Message)

 void loadAllFromEF(
int
int
android.os.Message)

 void loadFromEF(
int
int
int
android.os.Message)

 void updateEF(
com.android.internal.telephony.gsm.AdnRecord
int
int
int
java.lang.String
android.os.Message)

________________CLASS________________


public class com.android.internal.telephony.gsm.ApnSetting extends java.lang.Object

----------------FIELDS----------------

 java.lang.String apn

 java.lang.String carrier

 java.lang.String mmsPort

 java.lang.String mmsProxy

 java.lang.String mmsc

 java.lang.String password

 java.lang.String port

 java.lang.String proxy

 java.lang.String[] types

 java.lang.String user
----------------METHODS----------------

 void <init>(
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String[])

 boolean canHandleType(
java.lang.String)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/CommandsInterface$SimStatus;Lcom/android/internal/telephony/gsm/CommandsInterface$RadioState; )
public abstract interface class com.android.internal.telephony.gsm.CommandsInterface extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String CB_FACILITY_BAIC

public static final java.lang.String CB_FACILITY_BAICr

public static final java.lang.String CB_FACILITY_BAOC

public static final java.lang.String CB_FACILITY_BAOIC

public static final java.lang.String CB_FACILITY_BAOICxH

public static final java.lang.String CB_FACILITY_BA_ALL

public static final java.lang.String CB_FACILITY_BA_FD

public static final java.lang.String CB_FACILITY_BA_MO

public static final java.lang.String CB_FACILITY_BA_MT

public static final java.lang.String CB_FACILITY_BA_SIM

public static final int CF_ACTION_DISABLE

public static final int CF_ACTION_ENABLE

public static final int CF_ACTION_ERASURE

public static final int CF_ACTION_REGISTRATION

public static final int CF_REASON_ALL

public static final int CF_REASON_ALL_CONDITIONAL

public static final int CF_REASON_BUSY

public static final int CF_REASON_NOT_REACHABLE

public static final int CF_REASON_NO_REPLY

public static final int CF_REASON_UNCONDITIONAL

public static final int CLIR_DEFAULT

public static final int CLIR_INVOCATION

public static final int CLIR_SUPPRESSION

public static final int SERVICE_CLASS_DATA

public static final int SERVICE_CLASS_DATA_ASYNC

public static final int SERVICE_CLASS_DATA_SYNC

public static final int SERVICE_CLASS_FAX

public static final int SERVICE_CLASS_MAX

public static final int SERVICE_CLASS_NONE

public static final int SERVICE_CLASS_PACKET

public static final int SERVICE_CLASS_PAD

public static final int SERVICE_CLASS_SMS

public static final int SERVICE_CLASS_VOICE

public static final int SIM_REFRESH_FILE_UPDATED

public static final int SIM_REFRESH_INIT

public static final int SIM_REFRESH_RESET

public static final int USSD_MODE_NOTIFY

public static final int USSD_MODE_REQUEST
----------------METHODS----------------

public abstract void acceptCall(
android.os.Message)

public abstract void acknowledgeLastIncomingSMS(
boolean
android.os.Message)

public abstract void cancelPendingUssd(
android.os.Message)

public abstract void changeBarringPassword(
java.lang.String
java.lang.String
java.lang.String
android.os.Message)

public abstract void changeSimPin(
java.lang.String
java.lang.String
android.os.Message)

public abstract void changeSimPin2(
java.lang.String
java.lang.String
android.os.Message)

public abstract void conference(
android.os.Message)

public abstract void deactivateDefaultPDP(
int
android.os.Message)

public abstract void deleteSmsOnSim(
int
android.os.Message)

public abstract void dial(
java.lang.String
int
android.os.Message)

public abstract void explicitCallTransfer(
android.os.Message)

public abstract void getAvailableNetworks(
android.os.Message)

public abstract void getBasebandVersion(
android.os.Message)

public abstract void getCLIR(
android.os.Message)

public abstract void getCurrentCalls(
android.os.Message)

public abstract void getGPRSRegistrationState(
android.os.Message)

public abstract void getIMEI(
android.os.Message)

public abstract void getIMEISV(
android.os.Message)

public abstract void getIMSI(
android.os.Message)

public abstract void getLastCallFailCause(
android.os.Message)

public abstract void getLastPdpFailCause(
android.os.Message)

public abstract void getMute(
android.os.Message)

public abstract void getNeighboringCids(
android.os.Message)

public abstract void getNetworkSelectionMode(
android.os.Message)

public abstract void getOperator(
android.os.Message)

public abstract void getPDPContextList(
android.os.Message)

public abstract void getPreferredNetworkType(
android.os.Message)

public abstract com.android.internal.telephony.gsm.CommandsInterface$RadioState getRadioState()

public abstract void getRegistrationState(
android.os.Message)

public abstract void getSignalStrength(
android.os.Message)

public abstract void getSimStatus(
android.os.Message)

public abstract void handleCallSetupRequestFromSim(
boolean
android.os.Message)

public abstract void hangupConnection(
int
android.os.Message)

public abstract void hangupForegroundResumeBackground(
android.os.Message)

public abstract void hangupWaitingOrBackground(
android.os.Message)

public abstract void invokeOemRilRequestRaw(
byte[]
android.os.Message)

public abstract void invokeOemRilRequestStrings(
java.lang.String[]
android.os.Message)

public abstract void queryAvailableBandMode(
android.os.Message)

public abstract void queryCLIP(
android.os.Message)

public abstract void queryCallForwardStatus(
int
int
java.lang.String
android.os.Message)

public abstract void queryCallWaiting(
int
android.os.Message)

public abstract void queryFacilityLock(
java.lang.String
java.lang.String
int
android.os.Message)

public abstract void registerForAvailable(
android.os.Handler
int
java.lang.Object)

public abstract void registerForCallStateChanged(
android.os.Handler
int
java.lang.Object)

public abstract void registerForNetworkStateChanged(
android.os.Handler
int
java.lang.Object)

public abstract void registerForNotAvailable(
android.os.Handler
int
java.lang.Object)

public abstract void registerForOffOrNotAvailable(
android.os.Handler
int
java.lang.Object)

public abstract void registerForOn(
android.os.Handler
int
java.lang.Object)

public abstract void registerForPDPStateChanged(
android.os.Handler
int
java.lang.Object)

public abstract void registerForRadioStateChanged(
android.os.Handler
int
java.lang.Object)

public abstract void registerForSIMLockedOrAbsent(
android.os.Handler
int
java.lang.Object)

public abstract void registerForSIMReady(
android.os.Handler
int
java.lang.Object)

public abstract void rejectCall(
android.os.Message)

public abstract void resetRadio(
android.os.Message)

public abstract void sendDtmf(
char
android.os.Message)

public abstract void sendEnvelope(
java.lang.String
android.os.Message)

public abstract void sendSMS(
java.lang.String
java.lang.String
android.os.Message)

public abstract void sendTerminalResponse(
java.lang.String
android.os.Message)

public abstract void sendUSSD(
java.lang.String
android.os.Message)

public abstract void separateConnection(
int
android.os.Message)

public abstract void setBandMode(
int
android.os.Message)

public abstract void setCLIR(
int
android.os.Message)

public abstract void setCallForward(
int
int
int
java.lang.String
int
android.os.Message)

public abstract void setCallWaiting(
boolean
int
android.os.Message)

public abstract void setFacilityLock(
java.lang.String
boolean
java.lang.String
int
android.os.Message)

public abstract void setLocationUpdates(
boolean
android.os.Message)

public abstract void setMute(
boolean
android.os.Message)

public abstract void setNetworkSelectionModeAutomatic(
android.os.Message)

public abstract void setNetworkSelectionModeManual(
java.lang.String
android.os.Message)

public abstract void setOnCallRing(
android.os.Handler
int
java.lang.Object)

public abstract void setOnNITZTime(
android.os.Handler
int
java.lang.Object)

public abstract void setOnNewSMS(
android.os.Handler
int
java.lang.Object)

public abstract void setOnSignalStrengthUpdate(
android.os.Handler
int
java.lang.Object)

public abstract void setOnSimRefresh(
android.os.Handler
int
java.lang.Object)

public abstract void setOnSimSmsFull(
android.os.Handler
int
java.lang.Object)

public abstract void setOnSmsOnSim(
android.os.Handler
int
java.lang.Object)

public abstract void setOnSmsStatus(
android.os.Handler
int
java.lang.Object)

public abstract void setOnStkCallSetUp(
android.os.Handler
int
java.lang.Object)

public abstract void setOnStkEvent(
android.os.Handler
int
java.lang.Object)

public abstract void setOnStkProactiveCmd(
android.os.Handler
int
java.lang.Object)

public abstract void setOnStkSessionEnd(
android.os.Handler
int
java.lang.Object)

public abstract void setOnSuppServiceNotification(
android.os.Handler
int
java.lang.Object)

public abstract void setOnUSSD(
android.os.Handler
int
java.lang.Object)

public abstract void setPreferredNetworkType(
int
android.os.Message)

public abstract void setRadioPower(
boolean
android.os.Message)

public abstract void setSuppServiceNotifications(
boolean
android.os.Message)

public abstract void setupDefaultPDP(
java.lang.String
java.lang.String
java.lang.String
android.os.Message)

public abstract void simIO(
int
int
java.lang.String
int
int
int
java.lang.String
java.lang.String
android.os.Message)

public abstract void startDtmf(
char
android.os.Message)

public abstract void stopDtmf(
android.os.Message)

public abstract void supplyNetworkDepersonalization(
java.lang.String
android.os.Message)

public abstract void supplySimPin(
java.lang.String
android.os.Message)

public abstract void supplySimPin2(
java.lang.String
android.os.Message)

public abstract void supplySimPuk(
java.lang.String
java.lang.String
android.os.Message)

public abstract void supplySimPuk2(
java.lang.String
java.lang.String
android.os.Message)

public abstract void switchWaitingOrHoldingAndActive(
android.os.Message)

public abstract void writeSmsToSim(
int
java.lang.String
java.lang.String
android.os.Message)

________________CLASS________________


public abstract class com.android.internal.telephony.gsm.BaseCommands extends java.lang.Object implements com.android.internal.telephony.gsm.CommandsInterface

----------------FIELDS----------------

static final java.lang.String LOG_TAG

protected android.os.RegistrantList mAvailRegistrants

protected android.os.RegistrantList mCallStateRegistrants

protected android.content.Context mContext

protected android.os.Registrant mNITZTimeRegistrant

protected android.os.RegistrantList mNetworkStateRegistrants

protected android.os.RegistrantList mNotAvailRegistrants

protected android.os.RegistrantList mOffOrNotAvailRegistrants

protected android.os.RegistrantList mOnRegistrants

protected android.os.RegistrantList mPDPRegistrants

protected android.os.RegistrantList mRadioStateChangedRegistrants

protected android.os.Registrant mRingRegistrant

protected android.os.RegistrantList mSIMLockedRegistrants

protected android.os.RegistrantList mSIMReadyRegistrants

protected android.os.Registrant mSMSRegistrant

protected android.os.Registrant mSignalStrengthRegistrant

protected android.os.Registrant mSimRefreshRegistrant

protected android.os.Registrant mSimSmsFullRegistrant

protected android.os.Registrant mSmsOnSimRegistrant

protected android.os.Registrant mSmsStatusRegistrant

protected android.os.Registrant mSsnRegistrant

protected com.android.internal.telephony.gsm.CommandsInterface$RadioState mState

protected java.lang.Object mStateMonitor

protected android.os.Registrant mStkCallSetUpRegistrant

protected android.os.Registrant mStkEventRegistrant

protected android.os.Registrant mStkProCmdRegistrant

protected android.os.Registrant mStkSessionEndRegistrant

protected android.os.Registrant mUSSDRegistrant
----------------METHODS----------------

public void <init>(
android.content.Context)

public com.android.internal.telephony.gsm.CommandsInterface$RadioState getRadioState()

protected void onRadioAvailable()

public void registerForAvailable(
android.os.Handler
int
java.lang.Object)

public void registerForCallStateChanged(
android.os.Handler
int
java.lang.Object)

public void registerForNetworkStateChanged(
android.os.Handler
int
java.lang.Object)

public void registerForNotAvailable(
android.os.Handler
int
java.lang.Object)

public void registerForOffOrNotAvailable(
android.os.Handler
int
java.lang.Object)

public void registerForOn(
android.os.Handler
int
java.lang.Object)

public void registerForPDPStateChanged(
android.os.Handler
int
java.lang.Object)

public void registerForRadioStateChanged(
android.os.Handler
int
java.lang.Object)

public void registerForSIMLockedOrAbsent(
android.os.Handler
int
java.lang.Object)

public void registerForSIMReady(
android.os.Handler
int
java.lang.Object)

public void setOnCallRing(
android.os.Handler
int
java.lang.Object)

public void setOnNITZTime(
android.os.Handler
int
java.lang.Object)

public void setOnNewSMS(
android.os.Handler
int
java.lang.Object)

public void setOnSignalStrengthUpdate(
android.os.Handler
int
java.lang.Object)

public void setOnSimRefresh(
android.os.Handler
int
java.lang.Object)

public void setOnSimSmsFull(
android.os.Handler
int
java.lang.Object)

public void setOnSmsOnSim(
android.os.Handler
int
java.lang.Object)

public void setOnSmsStatus(
android.os.Handler
int
java.lang.Object)

public void setOnStkCallSetUp(
android.os.Handler
int
java.lang.Object)

public void setOnStkEvent(
android.os.Handler
int
java.lang.Object)

public void setOnStkProactiveCmd(
android.os.Handler
int
java.lang.Object)

public void setOnStkSessionEnd(
android.os.Handler
int
java.lang.Object)

public void setOnSuppServiceNotification(
android.os.Handler
int
java.lang.Object)

public void setOnUSSD(
android.os.Handler
int
java.lang.Object)

protected void setRadioState(
com.android.internal.telephony.gsm.CommandsInterface$RadioState)

________________CLASS________________


public abstract interface class com.android.internal.telephony.gsm.CallFailCause extends java.lang.Object

----------------FIELDS----------------

public static final int ACM_LIMIT_EXCEEDED

public static final int BEARER_NOT_AVAIL

public static final int CALL_BARRED

public static final int CHANNEL_NOT_AVAIL

public static final int ERROR_UNSPECIFIED

public static final int FDN_BLOCKED

public static final int NORMAL_CLEARING

public static final int NORMAL_UNSPECIFIED

public static final int NO_CIRCUIT_AVAIL

public static final int NUMBER_CHANGED

public static final int QOS_NOT_AVAIL

public static final int STATUS_ENQUIRY

public static final int SWITCHING_CONGESTION

public static final int TEMPORARY_FAILURE

public static final int USER_BUSY
----------------METHODS----------------

________________CLASS________________


public class com.android.internal.telephony.gsm.CallForwardInfo extends java.lang.Object

----------------FIELDS----------------

public java.lang.String number

public int reason

public int serviceClass

public int status

public int timeSeconds

public int toa
----------------METHODS----------------

public void <init>()

public java.lang.String toString()

________________CLASS________________


public final class com.android.internal.telephony.gsm.CallTracker extends android.os.Handler

----------------FIELDS----------------

private static final boolean DBG_POLL

static final int EVENT_CALL_STATE_CHANGE

static final int EVENT_CONFERENCE_RESULT

static final int EVENT_ECT_RESULT

static final int EVENT_GET_LAST_CALL_FAIL_CAUSE

static final int EVENT_OPERATION_COMPLETE

static final int EVENT_POLL_CALLS_RESULT

static final int EVENT_RADIO_AVAILABLE

static final int EVENT_RADIO_NOT_AVAILABLE

static final int EVENT_REPOLL_AFTER_DELAY

static final int EVENT_SEPARATE_RESULT

static final int EVENT_SWITCH_RESULT

static final java.lang.String LOG_TAG

static final int MAX_CONNECTIONS

static final int MAX_CONNECTIONS_PER_CALL

static final int POLL_DELAY_MSEC

private static final boolean REPEAT_POLLING

 com.android.internal.telephony.gsm.GSMCall backgroundCall

 com.android.internal.telephony.gsm.CommandsInterface cm

 com.android.internal.telephony.gsm.GSMConnection[] connections

 boolean desiredMute
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/GSMConnection;>; )
 java.util.ArrayList droppedDuringPoll

 com.android.internal.telephony.gsm.GSMCall foregroundCall

 boolean hangupPendingMO

 android.os.Message lastRelevantPoll

 boolean needsPoll

 com.android.internal.telephony.gsm.GSMConnection pendingMO

 int pendingOperations

 com.android.internal.telephony.gsm.GSMPhone phone

 com.android.internal.telephony.gsm.GSMCall ringingCall

 com.android.internal.telephony.Phone$State state

 android.os.RegistrantList voiceCallEndedRegistrants

 android.os.RegistrantList voiceCallStartedRegistrants
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.GSMPhone)

private boolean checkNoOperationsPending()

private void dumpState()

private void fakeHoldForegroundBeforeDial()

private com.android.internal.telephony.Phone$SuppService getFailedService(
int)

private void handlePollCalls(
android.os.AsyncResult)

private void handleRadioAvailable()

private void handleRadioNotAvailable()

private void internalClearDisconnected()

private boolean isCommandExceptionRadioNotAvailable(
java.lang.Throwable)

private void log(
java.lang.String)

private android.os.Message obtainCompleteMessage()

private android.os.Message obtainCompleteMessage(
int)

private android.os.Message obtainNoPollCompleteMessage(
int)

private void operationComplete()

private void pollCallsAfterDelay()

private void pollCallsWhenSafe()

private void updatePhoneState()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
 void acceptCall()

 boolean canConference()

 boolean canDial()

 boolean canTransfer()

 void clearDisconnected()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
 void conference()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
 com.android.internal.telephony.Connection dial(
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
 com.android.internal.telephony.Connection dial(
java.lang.String
int)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
 void explicitCallTransfer()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
 com.android.internal.telephony.gsm.GSMConnection getConnectionByIndex(
com.android.internal.telephony.gsm.GSMCall
int)

 boolean getMute()

public void handleMessage(
android.os.Message)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
 void hangup(
com.android.internal.telephony.gsm.GSMCall)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
 void hangup(
com.android.internal.telephony.gsm.GSMConnection)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
 void hangupAllConnections(
com.android.internal.telephony.gsm.GSMCall)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
 void hangupConnectionByIndex(
com.android.internal.telephony.gsm.GSMCall
int)

 void hangupForegroundResumeBackground()

 void hangupWaitingOrBackground()

public void registerForVoiceCallEnded(
android.os.Handler
int
java.lang.Object)

public void registerForVoiceCallStarted(
android.os.Handler
int
java.lang.Object)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
 void rejectCall()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
 void separate(
com.android.internal.telephony.gsm.GSMConnection)

 void setMute(
boolean)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
 void switchWaitingOrHoldingAndActive()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/CommandException; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Error )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/CommandException$Error;>; )
public final class com.android.internal.telephony.gsm.CommandException$Error extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.CommandException$Error[] $VALUES

public static final com.android.internal.telephony.gsm.CommandException$Error GENERIC_FAILURE

public static final com.android.internal.telephony.gsm.CommandException$Error INVALID_RESPONSE

public static final com.android.internal.telephony.gsm.CommandException$Error OP_NOT_ALLOWED_BEFORE_REG_NW

public static final com.android.internal.telephony.gsm.CommandException$Error OP_NOT_ALLOWED_DURING_VOICE_CALL

public static final com.android.internal.telephony.gsm.CommandException$Error PASSWORD_INCORRECT

public static final com.android.internal.telephony.gsm.CommandException$Error RADIO_NOT_AVAILABLE

public static final com.android.internal.telephony.gsm.CommandException$Error REQUEST_NOT_SUPPORTED

public static final com.android.internal.telephony.gsm.CommandException$Error SIM_PIN2

public static final com.android.internal.telephony.gsm.CommandException$Error SIM_PUK2

public static final com.android.internal.telephony.gsm.CommandException$Error SMS_FAIL_RETRY
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.gsm.CommandException$Error valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.CommandException$Error[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/CommandException$Error; )
public class com.android.internal.telephony.gsm.CommandException extends java.lang.RuntimeException

----------------FIELDS----------------

private com.android.internal.telephony.gsm.CommandException$Error e
----------------METHODS----------------

public void <init>(
com.android.internal.telephony.gsm.CommandException$Error)

public static com.android.internal.telephony.gsm.CommandException fromRilErrno(
int)

public com.android.internal.telephony.gsm.CommandException$Error getCommandError()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/CommandsInterface; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =RadioState )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/CommandsInterface$RadioState;>; )
public final class com.android.internal.telephony.gsm.CommandsInterface$RadioState extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.CommandsInterface$RadioState[] $VALUES

public static final com.android.internal.telephony.gsm.CommandsInterface$RadioState RADIO_OFF

public static final com.android.internal.telephony.gsm.CommandsInterface$RadioState RADIO_UNAVAILABLE

public static final com.android.internal.telephony.gsm.CommandsInterface$RadioState SIM_LOCKED_OR_ABSENT

public static final com.android.internal.telephony.gsm.CommandsInterface$RadioState SIM_NOT_READY

public static final com.android.internal.telephony.gsm.CommandsInterface$RadioState SIM_READY
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.gsm.CommandsInterface$RadioState valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.CommandsInterface$RadioState[] values()

 boolean isAvailable()

 boolean isOn()

 boolean isSIMReady()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/CommandsInterface; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =SimStatus )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/CommandsInterface$SimStatus;>; )
public final class com.android.internal.telephony.gsm.CommandsInterface$SimStatus extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.CommandsInterface$SimStatus[] $VALUES

public static final com.android.internal.telephony.gsm.CommandsInterface$SimStatus SIM_ABSENT

public static final com.android.internal.telephony.gsm.CommandsInterface$SimStatus SIM_NETWORK_PERSONALIZATION

public static final com.android.internal.telephony.gsm.CommandsInterface$SimStatus SIM_NOT_READY

public static final com.android.internal.telephony.gsm.CommandsInterface$SimStatus SIM_PIN

public static final com.android.internal.telephony.gsm.CommandsInterface$SimStatus SIM_PUK

public static final com.android.internal.telephony.gsm.CommandsInterface$SimStatus SIM_READY
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.gsm.CommandsInterface$SimStatus valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.CommandsInterface$SimStatus[] values()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/DataConnectionTracker; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class com.android.internal.telephony.gsm.DataConnectionTracker$1 extends android.content.BroadcastReceiver

----------------FIELDS----------------

final com.android.internal.telephony.gsm.DataConnectionTracker this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.DataConnectionTracker)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/DataConnectionTracker; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class com.android.internal.telephony.gsm.DataConnectionTracker$2 extends android.content.BroadcastReceiver

----------------FIELDS----------------

final com.android.internal.telephony.gsm.DataConnectionTracker this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.DataConnectionTracker)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/DataConnectionTracker; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class com.android.internal.telephony.gsm.DataConnectionTracker$3 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final com.android.internal.telephony.gsm.DataConnectionTracker this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.DataConnectionTracker)

public void run()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/DataConnectionTracker$Activity;>; )
@dalvik.annotation.InnerClass (accessFlags =16408 name =Activity )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/DataConnectionTracker; )
final class com.android.internal.telephony.gsm.DataConnectionTracker$Activity extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.DataConnectionTracker$Activity[] $VALUES

public static final com.android.internal.telephony.gsm.DataConnectionTracker$Activity DATAIN

public static final com.android.internal.telephony.gsm.DataConnectionTracker$Activity DATAINANDOUT

public static final com.android.internal.telephony.gsm.DataConnectionTracker$Activity DATAOUT

public static final com.android.internal.telephony.gsm.DataConnectionTracker$Activity NONE
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.gsm.DataConnectionTracker$Activity valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.DataConnectionTracker$Activity[] values()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =ApnChangeObserver )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/DataConnectionTracker; )
 class com.android.internal.telephony.gsm.DataConnectionTracker$ApnChangeObserver extends android.database.ContentObserver

----------------FIELDS----------------

final com.android.internal.telephony.gsm.DataConnectionTracker this$0
----------------METHODS----------------

public void <init>(
com.android.internal.telephony.gsm.DataConnectionTracker)

public void onChange(
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/DataConnectionTracker; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/DataConnectionTracker$State;>; )
@dalvik.annotation.InnerClass (accessFlags =16408 name =State )
final class com.android.internal.telephony.gsm.DataConnectionTracker$State extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.DataConnectionTracker$State[] $VALUES

public static final com.android.internal.telephony.gsm.DataConnectionTracker$State CONNECTED

public static final com.android.internal.telephony.gsm.DataConnectionTracker$State CONNECTING

public static final com.android.internal.telephony.gsm.DataConnectionTracker$State FAILED

public static final com.android.internal.telephony.gsm.DataConnectionTracker$State IDLE

public static final com.android.internal.telephony.gsm.DataConnectionTracker$State INITING

public static final com.android.internal.telephony.gsm.DataConnectionTracker$State SCANNING
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.gsm.DataConnectionTracker$State valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.DataConnectionTracker$State[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/DataConnectionTracker$ApnChangeObserver;Lcom/android/internal/telephony/gsm/DataConnectionTracker$Activity;Lcom/android/internal/telephony/gsm/DataConnectionTracker$State; )
final class com.android.internal.telephony.gsm.DataConnectionTracker extends android.os.Handler

----------------FIELDS----------------

private static int APN_DEFAULT_ID

private static int APN_MMS_ID

private static int APN_NUM_TYPES

private static final java.lang.String APN_RESTORE_DELAY_PROP_NAME

private static final boolean DBG

static final int EVENT_DATA_SETUP_COMPLETE

static final int EVENT_DISCONNECT_DONE

static final int EVENT_ENABLE_NEW_APN

static final int EVENT_GET_PDP_LIST_COMPLETE

static final int EVENT_GPRS_DETACHED

static final int EVENT_LINK_STATE_CHANGED

static final int EVENT_PDP_STATE_CHANGED

static final int EVENT_POLL_PDP

static final int EVENT_RADIO_AVAILABLE

static final int EVENT_RADIO_OFF_OR_NOT_AVAILABLE

static final int EVENT_RECORDS_LOADED

static final int EVENT_RESTORE_DEFAULT_APN

static final int EVENT_ROAMING_OFF

static final int EVENT_ROAMING_ON

static final int EVENT_TRY_SETUP_DATA

static final int EVENT_VOICE_CALL_ENDED

static final int EVENT_VOICE_CALL_STARTED

static final java.lang.String INTENT_RECONNECT_ALARM

private static final java.lang.String LOG_TAG

private static final int NO_RECV_POLL_LIMIT

private static final int NUMBER_SENT_PACKETS_OF_HANG

private static final int PDP_CONNECTION_POOL_SIZE

private static final int POLL_LONGEST_RTT

private static final int POLL_NETSTAT_MILLIS

private static final int POLL_NETSTAT_SLOW_MILLIS

private static final int POLL_PDP_MILLIS

private static final int RECONNECT_DELAY_INITIAL_MILLIS

private static final int RESTORE_DEFAULT_APN_DELAY

 com.android.internal.telephony.gsm.DataConnectionTracker$Activity activity

 android.content.BroadcastReceiver alarmReceiver
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/ApnSetting;>; )
private java.util.ArrayList allApns

private com.android.internal.telephony.gsm.DataConnectionTracker$ApnChangeObserver apnObserver

 int cidActive

private boolean[] dataEnabled

 boolean failNextConnect

private com.android.internal.telephony.gsm.ApnSetting mActiveApn

private com.android.internal.telephony.gsm.PdpConnection mActivePdp

 android.os.Handler mDataConnectionTracker

private int mNoRecvPollCount

 java.lang.Runnable mPollNetStat

private java.lang.String mRequestedApnType

 boolean netStatPollEnabled

 int netStatPollPeriod

 android.os.INetStatService netstat

 long nextReconnectDelay

private boolean noAutoAttach
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/PdpConnection;>; )
private java.util.ArrayList pdpList

 com.android.internal.telephony.gsm.GSMPhone phone

 int rxPkts

 android.content.BroadcastReceiver screenOnOffReceiver

 int sentSinceLastRecv

 com.android.internal.telephony.gsm.DataConnectionTracker$State state

 int txPkts
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/ApnSetting;>; )
private java.util.ArrayList waitingApns
----------------METHODS----------------

static void <clinit>()

 void <init>(
com.android.internal.telephony.gsm.GSMPhone)

static void access$000(
com.android.internal.telephony.gsm.DataConnectionTracker
boolean
java.lang.String)

static void access$100(
com.android.internal.telephony.gsm.DataConnectionTracker)

static void access$200(
com.android.internal.telephony.gsm.DataConnectionTracker)

static void access$300(
com.android.internal.telephony.gsm.DataConnectionTracker)

static boolean access$400(
com.android.internal.telephony.gsm.DataConnectionTracker
java.lang.String)

static int access$500(
com.android.internal.telephony.gsm.DataConnectionTracker)

static int access$502(
com.android.internal.telephony.gsm.DataConnectionTracker
int)

static int access$508(
com.android.internal.telephony.gsm.DataConnectionTracker)

static void access$600(
com.android.internal.telephony.gsm.DataConnectionTracker
java.lang.String)

static void access$700(
com.android.internal.telephony.gsm.DataConnectionTracker)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/ApnSetting;>;)Ljava/lang/String; )
private java.lang.String apnListToString(
java.util.ArrayList)
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/ApnSetting;>; )
private java.util.ArrayList buildWaitingApns()

private void cleanUpConnection(
boolean
java.lang.String)

private void createAllApnList()

private void createAllPdpList()
@dalvik.annotation.Signature (value =(Landroid/database/Cursor;)Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/ApnSetting;>; )
private java.util.ArrayList createApnList(
android.database.Cursor)

private com.android.internal.telephony.gsm.PdpConnection findFreePdp()

private com.android.internal.telephony.gsm.ApnSetting getNextApn()

private int getRestoreDefaultApnDelay()

private boolean isApnTypeActive(
java.lang.String)

private boolean isApnTypeAvailable(
java.lang.String)

private boolean isDataAllowed()

private boolean isEnabled(
java.lang.String)

private void log(
java.lang.String)

private void notifyDefaultData()

private void notifyNoData(
com.android.internal.telephony.gsm.PdpConnection$PdpFailCause)

private void onGprsDetached()

private void onPdpStateChanged(
android.os.AsyncResult
boolean)

private java.lang.String[] parseTypes(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/PDPContextState;>;I)Z )
private boolean pdpStatesHasActiveCID(
java.util.ArrayList
int)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/PDPContextState;>;I)Z )
private boolean pdpStatesHasCID(
java.util.ArrayList
int)

private void reconnectAfterFail(
com.android.internal.telephony.gsm.PdpConnection$PdpFailCause)

private void resetPollStats()

private void restartRadio()

private void setEnabled(
java.lang.String
boolean)

private boolean setupData(
java.lang.String)

private void setupDnsProperties()

private boolean shouldPostNotification(
com.android.internal.telephony.gsm.PdpConnection$PdpFailCause)

private void startNetStatPoll()

private void startPeriodicPdpPoll()

private void stopNetStatPoll()

private boolean tryNextApn(
com.android.internal.telephony.gsm.PdpConnection$PdpFailCause)

private boolean trySetupData(
java.lang.String)

 int disableApnType(
java.lang.String)

 int enableApnType(
java.lang.String)

 java.lang.String getActiveApnString()

 java.lang.String[] getActiveApnTypes()
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/PdpConnection;>; )
public java.util.ArrayList getAllPdps()

public boolean getAnyDataEnabled()

public boolean getDataEnabled()

public boolean getDataOnRoamingEnabled()

 java.lang.String[] getDnsServers(
java.lang.String)

 java.lang.String getGateway(
java.lang.String)

 java.lang.String getInterfaceName(
java.lang.String)

 java.lang.String getIpAddress(
java.lang.String)

public void handleMessage(
android.os.Message)

public boolean setDataEnabled(
boolean)

public void setDataOnRoamingEnabled(
boolean)

 void setState(
com.android.internal.telephony.gsm.DataConnectionTracker$State)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/DataLinkInterface$LinkState; )
abstract interface class com.android.internal.telephony.gsm.DataLinkInterface extends java.lang.Object

----------------FIELDS----------------

public static final int EXIT_OK

public static final int EXIT_OPEN_FAILED
----------------METHODS----------------

public abstract void connect()

public abstract void disconnect()

public abstract int getLastLinkExitCode()

public abstract void setOnLinkChange(
android.os.Handler
int
java.lang.Object)

public abstract void setPasswordInfo(
android.database.Cursor)

________________CLASS________________


abstract class com.android.internal.telephony.gsm.DataLink extends android.os.Handler implements com.android.internal.telephony.gsm.DataLinkInterface

----------------FIELDS----------------

protected com.android.internal.telephony.gsm.DataConnectionTracker dataConnection

 android.os.Registrant mLinkChangeRegistrant
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.DataConnectionTracker)

public void setOnLinkChange(
android.os.Handler
int
java.lang.Object)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/DataLinkInterface$LinkState;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =LinkState )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/DataLinkInterface; )
public final class com.android.internal.telephony.gsm.DataLinkInterface$LinkState extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.DataLinkInterface$LinkState[] $VALUES

public static final com.android.internal.telephony.gsm.DataLinkInterface$LinkState LINK_DOWN

public static final com.android.internal.telephony.gsm.DataLinkInterface$LinkState LINK_EXITED

public static final com.android.internal.telephony.gsm.DataLinkInterface$LinkState LINK_UNKNOWN

public static final com.android.internal.telephony.gsm.DataLinkInterface$LinkState LINK_UP
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.gsm.DataLinkInterface$LinkState valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.DataLinkInterface$LinkState[] values()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/DriverCall; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =State )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/DriverCall$State;>; )
public final class com.android.internal.telephony.gsm.DriverCall$State extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.DriverCall$State[] $VALUES

public static final com.android.internal.telephony.gsm.DriverCall$State ACTIVE

public static final com.android.internal.telephony.gsm.DriverCall$State ALERTING

public static final com.android.internal.telephony.gsm.DriverCall$State DIALING

public static final com.android.internal.telephony.gsm.DriverCall$State HOLDING

public static final com.android.internal.telephony.gsm.DriverCall$State INCOMING

public static final com.android.internal.telephony.gsm.DriverCall$State WAITING
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.gsm.DriverCall$State valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.DriverCall$State[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/DriverCall$State; )
public class com.android.internal.telephony.gsm.DriverCall extends java.lang.Object implements java.lang.Comparable

----------------FIELDS----------------

static final java.lang.String LOG_TAG

public int TOA

public int als

public int index

public boolean isMT

public boolean isMpty

public boolean isVoice

public java.lang.String number

public com.android.internal.telephony.gsm.DriverCall$State state
----------------METHODS----------------

public void <init>()

static com.android.internal.telephony.gsm.DriverCall fromCLCCLine(
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/ATParseEx; )
public static com.android.internal.telephony.gsm.DriverCall$State stateFromCLCC(
int)

public int compareTo(
java.lang.Object)

public java.lang.String toString()

________________CLASS________________


public class com.android.internal.telephony.gsm.EncodeException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
char)

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/GSMCall; )
 class com.android.internal.telephony.gsm.GSMCall$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$com$android$internal$telephony$gsm$DriverCall$State
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/GSMCall$1; )
 class com.android.internal.telephony.gsm.GSMCall extends com.android.internal.telephony.Call

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/android/internal/telephony/Connection;>; )
 java.util.ArrayList connections

 com.android.internal.telephony.gsm.CallTracker owner

 com.android.internal.telephony.Call$State state
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.CallTracker)

static com.android.internal.telephony.Call$State stateFromDCState(
com.android.internal.telephony.gsm.DriverCall$State)

 void attach(
com.android.internal.telephony.gsm.GSMConnection
com.android.internal.telephony.gsm.DriverCall)

 void attachFake(
com.android.internal.telephony.gsm.GSMConnection
com.android.internal.telephony.Call$State)

 void clearDisconnected()

 void connectionDisconnected(
com.android.internal.telephony.gsm.GSMConnection)

 void detach(
com.android.internal.telephony.gsm.GSMConnection)
@dalvik.annotation.Signature (value =()Ljava/util/List<Lcom/android/internal/telephony/Connection;>; )
public java.util.List getConnections()

public com.android.internal.telephony.Phone getPhone()

public com.android.internal.telephony.Call$State getState()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public void hangup()

 boolean isFull()

public boolean isMultiparty()

 void onHangupLocal()

public java.lang.String toString()

 boolean update(
com.android.internal.telephony.gsm.GSMConnection
com.android.internal.telephony.gsm.DriverCall)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/GSMConnection; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class com.android.internal.telephony.gsm.GSMConnection$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$com$android$internal$telephony$gsm$DriverCall$State
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =MyHandler )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/GSMConnection; )
 class com.android.internal.telephony.gsm.GSMConnection$MyHandler extends android.os.Handler

----------------FIELDS----------------

final com.android.internal.telephony.gsm.GSMConnection this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.GSMConnection
android.os.Looper)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/GSMConnection$1;Lcom/android/internal/telephony/gsm/GSMConnection$MyHandler; )
public class com.android.internal.telephony.gsm.GSMConnection extends com.android.internal.telephony.Connection

----------------FIELDS----------------

static final int EVENT_DTMF_DONE

static final int EVENT_NEXT_POST_DIAL

static final int EVENT_PAUSE_DONE

static final java.lang.String LOG_TAG

static final int PAUSE_DELAY_FIRST_MILLIS

static final int PAUSE_DELAY_MILLIS

 java.lang.String address

 com.android.internal.telephony.Connection$DisconnectCause cause

 long connectTime

 long connectTimeReal

 long createTime

 java.lang.String dialString

 long disconnectTime

 boolean disconnected

 long duration

 android.os.Handler h

 long holdingStartTime

 int index

 boolean isIncoming

 int nextPostDialChar

 com.android.internal.telephony.gsm.CallTracker owner

 com.android.internal.telephony.gsm.GSMCall parent

 com.android.internal.telephony.Connection$PostDialState postDialState

 java.lang.String postDialString
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.DriverCall
com.android.internal.telephony.gsm.CallTracker
int)

 void <init>(
java.lang.String
com.android.internal.telephony.gsm.CallTracker
com.android.internal.telephony.gsm.GSMCall)

static void access$000(
com.android.internal.telephony.gsm.GSMConnection)

static boolean equalsHandlesNulls(
java.lang.Object
java.lang.Object)

private boolean isConnectingInOrOut()

private void log(
java.lang.String)

private void onStartedHolding()

private com.android.internal.telephony.gsm.GSMCall parentFromDCState(
com.android.internal.telephony.gsm.DriverCall$State)

private void processNextPostDialChar()

private boolean processPostDialChar(
char)

public void cancelPostDial()

 boolean compareTo(
com.android.internal.telephony.gsm.DriverCall)

 com.android.internal.telephony.Connection$DisconnectCause disconnectCauseFromCode(
int)

 void fakeHoldBeforeDial()

public java.lang.String getAddress()

public com.android.internal.telephony.Call getCall()

public long getConnectTime()

public long getCreateTime()

public com.android.internal.telephony.Connection$DisconnectCause getDisconnectCause()

public long getDisconnectTime()

public long getDurationMillis()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
 int getGSMIndex()

public long getHoldDurationMillis()

public com.android.internal.telephony.Connection$PostDialState getPostDialState()

public java.lang.String getRemainingPostDialString()

public com.android.internal.telephony.Call$State getState()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public void hangup()

public boolean isIncoming()

 void onConnectedInOrOut()

 void onDisconnect(
com.android.internal.telephony.Connection$DisconnectCause)

 void onHangupLocal()

 void onRemoteDisconnect(
int)

public void proceedAfterWaitChar()

public void proceedAfterWildChar(
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public void separate()

public java.lang.String toString()

 boolean update(
com.android.internal.telephony.gsm.DriverCall)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/GSMPhone; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class com.android.internal.telephony.gsm.GSMPhone$2 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$com$android$internal$telephony$Phone$DataState

static final int[] $SwitchMap$com$android$internal$telephony$gsm$DataConnectionTracker$Activity

static final int[] $SwitchMap$com$android$internal$telephony$gsm$DataConnectionTracker$State
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =MyHandler )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/GSMPhone; )
 class com.android.internal.telephony.gsm.GSMPhone$MyHandler extends android.os.Handler

----------------FIELDS----------------

final com.android.internal.telephony.gsm.GSMPhone this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.GSMPhone)

 void <init>(
com.android.internal.telephony.gsm.GSMPhone
android.os.Looper)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =NetworkSelectMessage )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/GSMPhone; )
 class com.android.internal.telephony.gsm.GSMPhone$NetworkSelectMessage extends java.lang.Object

----------------FIELDS----------------

public android.os.Message message

public java.lang.String operatorNumeric
----------------METHODS----------------

private void <init>()

 void <init>(
com.android.internal.telephony.gsm.GSMPhone$1)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/GSMPhone$2;Lcom/android/internal/telephony/gsm/GSMPhone$MyHandler;Lcom/android/internal/telephony/gsm/GSMPhone$NetworkSelectMessage; )
public class com.android.internal.telephony.gsm.GSMPhone extends com.android.internal.telephony.PhoneBase

----------------FIELDS----------------

public static final java.lang.String CIPHERING_KEY

public static final java.lang.String CLIR_KEY

public static final java.lang.String DATA_DISABLED_ON_BOOT_KEY

static final int EVENT_CALL_RING

static final int EVENT_GET_BASEBAND_VERSION_DONE

static final int EVENT_GET_CALL_FORWARD_DONE

static final int EVENT_GET_IMEISV_DONE

static final int EVENT_GET_IMEI_DONE

static final int EVENT_GET_SIM_STATUS_DONE

static final int EVENT_MMI_DONE

static final int EVENT_RADIO_AVAILABLE

static final int EVENT_RADIO_OFF_OR_NOT_AVAILABLE

static final int EVENT_RADIO_ON

static final int EVENT_REGISTERED_TO_NETWORK

static final int EVENT_SET_CALL_FORWARD_DONE

static final int EVENT_SET_CLIR_COMPLETE

static final int EVENT_SET_NETWORK_AUTOMATIC_COMPLETE

static final int EVENT_SET_NETWORK_MANUAL_COMPLETE

static final int EVENT_SIM_RECORDS_LOADED

static final int EVENT_SSN

static final int EVENT_USSD

private static final boolean LOCAL_DEBUG

static final java.lang.String LOG_TAG

public static final java.lang.String NETWORK_SELECTION_KEY

 java.lang.Thread debugPortThread

 java.net.ServerSocket debugSocket

 com.android.internal.telephony.gsm.GSMPhone$MyHandler h

 com.android.internal.telephony.gsm.CommandsInterface mCM

 com.android.internal.telephony.gsm.CallTracker mCT

 com.android.internal.telephony.gsm.DataConnectionTracker mDataConnection

private java.lang.String mImei

private java.lang.String mImeiSv
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/GsmMmiCode;>; )
 java.util.ArrayList mPendingMMIs

 android.os.Registrant mPostDialHandler

private int mReportedAttemptedConnects

private int mReportedRadioResets

private int mReportedSuccessfulConnects

 com.android.internal.telephony.gsm.SIMFileHandler mSIMFileHandler

 com.android.internal.telephony.gsm.SIMRecords mSIMRecords

 com.android.internal.telephony.gsm.SMSDispatcher mSMS

 com.android.internal.telephony.gsm.ServiceStateTracker mSST

 com.android.internal.telephony.gsm.GsmSimCard mSimCard

 com.android.internal.telephony.gsm.SimPhoneBookInterfaceManager mSimPhoneBookIntManager

 com.android.internal.telephony.gsm.SimSmsInterfaceManager mSimSmsIntManager

 android.os.RegistrantList mSsnRegistrants

 com.android.internal.telephony.gsm.stk.Service mStkService

 com.android.internal.telephony.PhoneSubInfo mSubInfo
----------------METHODS----------------

public void <init>(
android.content.Context
com.android.internal.telephony.gsm.CommandsInterface
com.android.internal.telephony.PhoneNotifier)

public void <init>(
android.content.Context
com.android.internal.telephony.gsm.CommandsInterface
com.android.internal.telephony.PhoneNotifier
boolean)

static void access$100(
com.android.internal.telephony.gsm.GSMPhone)

static android.content.Context access$200(
com.android.internal.telephony.gsm.GSMPhone)

static java.lang.String access$302(
com.android.internal.telephony.gsm.GSMPhone
java.lang.String)

static java.lang.String access$402(
com.android.internal.telephony.gsm.GSMPhone
java.lang.String)

static void access$500(
com.android.internal.telephony.gsm.GSMPhone
int
java.lang.String)

static void access$600(
com.android.internal.telephony.gsm.GSMPhone
com.android.internal.telephony.gsm.CallForwardInfo[])

static void access$700(
com.android.internal.telephony.gsm.GSMPhone
android.os.AsyncResult)

private java.lang.String getSavedNetworkSelection()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
private boolean handleCallDeflectionIncallSupplementaryService(
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
private boolean handleCallHoldIncallSupplementaryService(
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
private boolean handleCallWaitingIncallSupplementaryService(
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
private boolean handleCcbsIncallSupplementaryService(
java.lang.String)

private void handleCfuQueryResult(
com.android.internal.telephony.gsm.CallForwardInfo[])
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
private boolean handleEctIncallSupplementaryService(
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
private boolean handleMultipartyIncallSupplementaryService(
java.lang.String)

private void handleSetSelectNetwork(
android.os.AsyncResult)

private boolean isCfEnable(
int)

private boolean isValidCommandInterfaceCFAction(
int)

private boolean isValidCommandInterfaceCFReason(
int)

private void onIncomingUSSD(
int
java.lang.String)

private void onNetworkInitiatedUssd(
com.android.internal.telephony.gsm.GsmMmiCode)

private void syncClirSetting()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public void acceptCall()

public boolean canConference()

public boolean canDial()

public boolean canTransfer()

public void clearDisconnected()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public void conference()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public com.android.internal.telephony.Connection dial(
java.lang.String)

public int disableApnType(
java.lang.String)

public boolean disableDataConnectivity()

public void disableLocationUpdates()

public int enableApnType(
java.lang.String)

public boolean enableDataConnectivity()

public void enableLocationUpdates()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public void explicitCallTransfer()

public java.lang.String getActiveApn()

public java.lang.String[] getActiveApnTypes()

public void getAvailableNetworks(
android.os.Message)

public com.android.internal.telephony.Call getBackgroundCall()

public boolean getCallForwardingIndicator()

public void getCallForwardingOption(
int
android.os.Message)

public void getCallWaiting(
android.os.Message)

public android.telephony.CellLocation getCellLocation()
@dalvik.annotation.Signature (value =()Ljava/util/List<Lcom/android/internal/telephony/gsm/PdpConnection;>; )
public java.util.List getCurrentPdpList()

public com.android.internal.telephony.Phone$DataActivityState getDataActivityState()

public com.android.internal.telephony.Phone$DataState getDataConnectionState()

public boolean getDataRoamingEnabled()

public java.lang.String getDeviceId()

public java.lang.String getDeviceSvn()

public java.lang.String[] getDnsServers(
java.lang.String)

public com.android.internal.telephony.Call getForegroundCall()

public java.lang.String getGateway(
java.lang.String)

public java.lang.String getInterfaceName(
java.lang.String)

public java.lang.String getIpAddress(
java.lang.String)

public java.lang.String getLine1AlphaTag()

public java.lang.String getLine1Number()

public boolean getMessageWaitingIndicator()

public boolean getMute()

public void getNeighboringCids(
android.os.Message)

public void getOutgoingCallerIdDisplay(
android.os.Message)

public void getPdpContextList(
android.os.Message)
@dalvik.annotation.Signature (value =()Ljava/util/List<+Lcom/android/internal/telephony/MmiCode;>; )
public java.util.List getPendingMmiCodes()

public java.lang.String getPhoneName()

public void getPreferredNetworkType(
android.os.Message)

public com.android.internal.telephony.Call getRingingCall()

public android.telephony.ServiceState getServiceState()

public int getSignalStrengthASU()

public com.android.internal.telephony.SimCard getSimCard()

public boolean getSimRecordsLoaded()

public java.lang.String getSimSerialNumber()

public com.android.internal.telephony.Phone$State getState()

public java.lang.String getSubscriberId()

public java.lang.String getVoiceMailAlphaTag()

public java.lang.String getVoiceMailNumber()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public boolean handleInCallMmiCommands(
java.lang.String)

public boolean handlePinMmi(
java.lang.String)

public void invokeOemRilRequestRaw(
byte[]
android.os.Message)

public void invokeOemRilRequestStrings(
java.lang.String[]
android.os.Message)

public boolean isDataConnectivityPossible()

 boolean isInCall()

 void notifyCallForwardingIndicator()

 void notifyCallStateChanged()

 void notifyDataActivity()

 void notifyDataConnection(
java.lang.String)

 void notifyDataConnectionFailed(
java.lang.String)

 void notifyDisconnect(
com.android.internal.telephony.Connection)

 void notifyIncomingRing()

 void notifyLocationChanged()

 void notifyMessageWaitingIndicator()

 void notifyNewRingingConnection(
com.android.internal.telephony.Connection)

 void notifyPhoneStateChanged()

 void notifyServiceStateChanged(
android.telephony.ServiceState)

 void notifySignalStrength()

 void notifySuppServiceFailed(
com.android.internal.telephony.Phone$SuppService)

 void notifyUnknownConnection()

 void onMMIDone(
com.android.internal.telephony.gsm.GsmMmiCode)

public void queryAvailableBandMode(
android.os.Message)

public void registerForSuppServiceNotification(
android.os.Handler
int
java.lang.Object)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public void rejectCall()

 void restoreSavedNetworkSelection(
android.os.Message)

 void saveClirSetting(
int)

public void selectNetworkManually(
com.android.internal.telephony.gsm.NetworkInfo
android.os.Message)

public void sendDtmf(
char)

public void sendUssdResponse(
java.lang.String)

public void setBandMode(
int
android.os.Message)

public void setCallForwardingOption(
int
int
java.lang.String
int
android.os.Message)

public void setCallWaiting(
boolean
android.os.Message)

public void setDataRoamingEnabled(
boolean)

public void setLine1Number(
java.lang.String
java.lang.String
android.os.Message)

public void setMute(
boolean)

public void setNetworkSelectionModeAutomatic(
android.os.Message)

public void setOnPostDialCharacter(
android.os.Handler
int
java.lang.Object)

public void setOutgoingCallerIdDisplay(
int
android.os.Message)

public void setPreferredNetworkType(
int
android.os.Message)

public void setRadioPower(
boolean)

 void setSystemProperty(
java.lang.String
java.lang.String)

public void setVoiceMailNumber(
java.lang.String
java.lang.String
android.os.Message)

public void simulateDataConnection(
com.android.internal.telephony.Phone$DataState)

public void startDtmf(
char)

public void stopDtmf()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/CallStateException; )
public void switchHoldingAndActive()

public void unregisterForSuppServiceNotification(
android.os.Handler)

 void updateMessageWaitingIndicator(
boolean)

public void updateServiceLocation(
android.os.Message)

________________CLASS________________


public class com.android.internal.telephony.gsm.GsmAlphabet extends java.lang.Object

----------------FIELDS----------------

public static final byte GSM_EXTENDED_ESCAPE

static final java.lang.String LOG_TAG

private static final android.util.SparseIntArray charToGsm

private static final android.util.SparseIntArray charToGsmExtended

private static final android.util.SparseIntArray gsmExtendedToChar

private static final android.util.SparseIntArray gsmToChar

private static int sGsmSpaceChar
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static int charToGsm(
char)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/EncodeException; )
public static int charToGsm(
char
boolean)

public static int charToGsmExtended(
char)

public static int countGsmSeptets(
char)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/EncodeException; )
public static int countGsmSeptets(
char
boolean)

public static int countGsmSeptets(
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/EncodeException; )
public static int countGsmSeptets(
java.lang.String
boolean)

public static int findGsmSeptetLimitIndex(
java.lang.String
int
int)

public static java.lang.String gsm7BitPackedToString(
byte[]
int
int)

public static java.lang.String gsm7BitPackedToString(
byte[]
int
int
int)

public static java.lang.String gsm8BitUnpackedToString(
byte[]
int
int)

public static char gsmExtendedToChar(
int)

public static char gsmToChar(
int)

private static void packSmsChar(
byte[]
int
int)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/EncodeException; )
public static byte[] stringToGsm7BitPacked(
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/EncodeException; )
public static byte[] stringToGsm7BitPacked(
java.lang.String
int
int
int
boolean)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/EncodeException; )
public static byte[] stringToGsm7BitPackedWithHeader(
java.lang.String
byte[])

public static byte[] stringToGsm8BitPacked(
java.lang.String)

public static void stringToGsm8BitUnpackedField(
java.lang.String
byte[]
int
int)

________________CLASS________________


public final class com.android.internal.telephony.gsm.GsmMmiCode extends android.os.Handler implements com.android.internal.telephony.MmiCode

----------------FIELDS----------------

static final java.lang.String ACTION_ACTIVATE

static final java.lang.String ACTION_DEACTIVATE

static final java.lang.String ACTION_ERASURE

static final java.lang.String ACTION_INTERROGATE

static final java.lang.String ACTION_REGISTER

static final int EVENT_GET_CLIR_COMPLETE

static final int EVENT_QUERY_CF_COMPLETE

static final int EVENT_QUERY_COMPLETE

static final int EVENT_SET_CFF_COMPLETE

static final int EVENT_SET_COMPLETE

static final int EVENT_USSD_CANCEL_COMPLETE

static final int EVENT_USSD_COMPLETE

static final java.lang.String LOG_TAG

static final int MATCH_GROUP_ACTION

static final int MATCH_GROUP_DIALING_NUMBER

static final int MATCH_GROUP_POUND_STRING

static final int MATCH_GROUP_PWD_CONFIRM

static final int MATCH_GROUP_SERVICE_CODE

static final int MATCH_GROUP_SIA

static final int MATCH_GROUP_SIB

static final int MATCH_GROUP_SIC

static final java.lang.String SC_BAIC

static final java.lang.String SC_BAICr

static final java.lang.String SC_BAOC

static final java.lang.String SC_BAOIC

static final java.lang.String SC_BAOICxH

static final java.lang.String SC_BA_ALL

static final java.lang.String SC_BA_MO

static final java.lang.String SC_BA_MT

static final java.lang.String SC_CFB

static final java.lang.String SC_CFNR

static final java.lang.String SC_CFNRy

static final java.lang.String SC_CFU

static final java.lang.String SC_CF_All

static final java.lang.String SC_CF_All_Conditional

static final java.lang.String SC_CLIP

static final java.lang.String SC_CLIR

static final java.lang.String SC_PIN

static final java.lang.String SC_PIN2

static final java.lang.String SC_PUK

static final java.lang.String SC_PUK2

static final java.lang.String SC_PWD

static final java.lang.String SC_WAIT

static java.util.regex.Pattern sPatternSuppService

 java.lang.String action

 android.content.Context context

 java.lang.String dialingNumber

private boolean isPendingUSSD

private boolean isUssdRequest

 java.lang.CharSequence message

 com.android.internal.telephony.gsm.GSMPhone phone

 java.lang.String poundString

 java.lang.String pwd

 java.lang.String sc

 java.lang.String sia

 java.lang.String sib

 java.lang.String sic

 com.android.internal.telephony.MmiCode$State state
----------------METHODS----------------

static void <clinit>()

 void <init>(
com.android.internal.telephony.gsm.GSMPhone)

private java.lang.CharSequence createQueryCallWaitingResultMessage(
int)

private java.lang.CharSequence getScString()

private void handlePasswordError(
int)

private static boolean isEmptyOrNull(
java.lang.CharSequence)

static boolean isServiceCodeCallBarring(
java.lang.String)

static boolean isServiceCodeCallForwarding(
java.lang.String)

private static boolean isShortCode(
java.lang.String
com.android.internal.telephony.gsm.GSMPhone)

private java.lang.CharSequence makeCFQueryResultMessage(
com.android.internal.telephony.gsm.CallForwardInfo
int)

private static java.lang.String makeEmptyNull(
java.lang.String)

static com.android.internal.telephony.gsm.GsmMmiCode newFromDialString(
java.lang.String
com.android.internal.telephony.gsm.GSMPhone)

static com.android.internal.telephony.gsm.GsmMmiCode newFromUssdUserInput(
java.lang.String
com.android.internal.telephony.gsm.GSMPhone)

static com.android.internal.telephony.gsm.GsmMmiCode newNetworkInitiatedUssd(
java.lang.String
boolean
com.android.internal.telephony.gsm.GSMPhone)

private void onGetClirComplete(
android.os.AsyncResult)

private void onQueryCfComplete(
android.os.AsyncResult)

private void onQueryComplete(
android.os.AsyncResult)

private void onSetComplete(
android.os.AsyncResult)

static java.lang.String scToBarringFacility(
java.lang.String)

private static int scToCallForwardReason(
java.lang.String)

private java.lang.CharSequence serviceClassToCFString(
int)

private static int siToServiceClass(
java.lang.String)

private static int siToTime(
java.lang.String)

public void cancel()

 int getCLIRMode()

public java.lang.CharSequence getMessage()

public com.android.internal.telephony.MmiCode$State getState()

public void handleMessage(
android.os.Message)

 boolean isActivate()

public boolean isCancelable()

 boolean isDeactivate()

 boolean isErasure()

 boolean isInterrogate()

 boolean isMMI()

public boolean isPendingUSSD()

 boolean isPinCommand()

 boolean isRegister()

 boolean isShortCode()

 boolean isTemporaryModeCLIR()

public boolean isUssdRequest()

 void onUssdFinished(
java.lang.String
boolean)

 void onUssdFinishedError()

 void processCode()

 void sendUssd(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/GsmSimCard; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class com.android.internal.telephony.gsm.GsmSimCard$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$com$android$internal$telephony$gsm$CommandsInterface$RadioState

static final int[] $SwitchMap$com$android$internal$telephony$gsm$CommandsInterface$SimStatus
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/GsmSimCard$1; )
public final class com.android.internal.telephony.gsm.GsmSimCard extends android.os.Handler implements com.android.internal.telephony.SimCard

----------------FIELDS----------------

private static final boolean DBG

static final int EVENT_CHANGE_FACILITY_FDN_DONE

static final int EVENT_CHANGE_FACILITY_LOCK_DONE

static final int EVENT_CHANGE_SIM_PASSWORD_DONE

static final int EVENT_GET_SIM_STATUS_DONE

static final int EVENT_PINPUK_DONE

static final int EVENT_QUERY_FACILITY_FDN_DONE

static final int EVENT_QUERY_FACILITY_LOCK_DONE

static final int EVENT_RADIO_OFF_OR_NOT_AVAILABLE

static final int EVENT_REPOLL_STATUS_DONE

static final int EVENT_SIM_LOCKED_OR_ABSENT

static final int EVENT_SIM_READY

static final java.lang.String LOG_TAG

static final int NOTIFICATION_ID_SIM_STATUS

private android.os.RegistrantList absentRegistrants

private boolean mDesiredFdnEnabled

private boolean mDesiredPinLocked

private boolean mSimFdnEnabled

private boolean mSimPinLocked

private android.os.RegistrantList networkLockedRegistrants

private com.android.internal.telephony.gsm.GSMPhone phone

private android.os.RegistrantList pinLockedRegistrants

private com.android.internal.telephony.gsm.CommandsInterface$SimStatus status
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.GSMPhone)

private void getSimStatusDone(
android.os.AsyncResult)

private void handleSimStatus(
com.android.internal.telephony.gsm.CommandsInterface$SimStatus)

private void log(
java.lang.String)

private void onQueryFacilityLock(
android.os.AsyncResult)

private void onQueryFdnEnabled(
android.os.AsyncResult)

private void updateStateProperty()

public void broadcastSimStateChangedIntent(
java.lang.String
java.lang.String)

public void changeSimFdnPassword(
java.lang.String
java.lang.String
android.os.Message)

public void changeSimLockPassword(
java.lang.String
java.lang.String
android.os.Message)

public java.lang.String getServiceProviderName()

public boolean getSimFdnEnabled()

public boolean getSimLockEnabled()

public com.android.internal.telephony.SimCard$State getState()

public void handleMessage(
android.os.Message)

public void registerForAbsent(
android.os.Handler
int
java.lang.Object)

public void registerForLocked(
android.os.Handler
int
java.lang.Object)

public void registerForNetworkLocked(
android.os.Handler
int
java.lang.Object)

public void setSimFdnEnabled(
boolean
java.lang.String
android.os.Message)

public void setSimLockEnabled(
boolean
java.lang.String
android.os.Message)

public void supplyNetworkDepersonalization(
java.lang.String
android.os.Message)

public void supplyPin(
java.lang.String
android.os.Message)

public void supplyPin2(
java.lang.String
android.os.Message)

public void supplyPuk(
java.lang.String
java.lang.String
android.os.Message)

public void supplyPuk2(
java.lang.String
java.lang.String
android.os.Message)

public void unregisterForAbsent(
android.os.Handler)

public void unregisterForLocked(
android.os.Handler)

public void unregisterForNetworkLocked(
android.os.Handler)

public void updateImsiConfiguration(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/ISimPhoneBook$Stub; )
public abstract interface class com.android.internal.telephony.gsm.ISimPhoneBook extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Lcom/android/internal/telephony/gsm/AdnRecord;>; )
public abstract java.util.List getAdnRecordsInEf(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract int[] getAdnRecordsSize(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean updateAdnRecordsInEfByIndex(
int
java.lang.String
java.lang.String
int
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean updateAdnRecordsInEfBySearch(
int
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/ISimPhoneBook$Stub; )
@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
 class com.android.internal.telephony.gsm.ISimPhoneBook$Stub$Proxy extends java.lang.Object implements com.android.internal.telephony.gsm.ISimPhoneBook

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Lcom/android/internal/telephony/gsm/AdnRecord;>; )
public java.util.List getAdnRecordsInEf(
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public int[] getAdnRecordsSize(
int)

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean updateAdnRecordsInEfByIndex(
int
java.lang.String
java.lang.String
int
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean updateAdnRecordsInEfBySearch(
int
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/ISimPhoneBook; )
@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/ISimPhoneBook$Stub$Proxy; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class com.android.internal.telephony.gsm.ISimPhoneBook$Stub extends android.os.Binder implements com.android.internal.telephony.gsm.ISimPhoneBook

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_getAdnRecordsInEf

static final int TRANSACTION_getAdnRecordsSize

static final int TRANSACTION_updateAdnRecordsInEfByIndex

static final int TRANSACTION_updateAdnRecordsInEfBySearch
----------------METHODS----------------

public void <init>()

public static com.android.internal.telephony.gsm.ISimPhoneBook asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/ISms$Stub; )
public abstract interface class com.android.internal.telephony.gsm.ISms extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean copyMessageToSimEf(
int
byte[]
byte[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =()Ljava/util/List<Lcom/android/internal/telephony/gsm/SmsRawData;>; )
public abstract java.util.List getAllMessagesFromSimEf()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/lang/String;Ljava/util/List<Ljava/lang/String;>;Ljava/util/List<Landroid/app/PendingIntent;>;Ljava/util/List<Landroid/app/PendingIntent;>;)V )
public abstract void sendMultipartText(
java.lang.String
java.lang.String
java.util.List
java.util.List
java.util.List)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void sendRawPdu(
byte[]
byte[]
android.app.PendingIntent
android.app.PendingIntent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean updateMessageOnSimEf(
int
int
byte[])

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/ISms$Stub; )
 class com.android.internal.telephony.gsm.ISms$Stub$Proxy extends java.lang.Object implements com.android.internal.telephony.gsm.ISms

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean copyMessageToSimEf(
int
byte[]
byte[])
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
@dalvik.annotation.Signature (value =()Ljava/util/List<Lcom/android/internal/telephony/gsm/SmsRawData;>; )
public java.util.List getAllMessagesFromSimEf()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/lang/String;Ljava/util/List<Ljava/lang/String;>;Ljava/util/List<Landroid/app/PendingIntent;>;Ljava/util/List<Landroid/app/PendingIntent;>;)V )
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void sendMultipartText(
java.lang.String
java.lang.String
java.util.List
java.util.List
java.util.List)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void sendRawPdu(
byte[]
byte[]
android.app.PendingIntent
android.app.PendingIntent)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean updateMessageOnSimEf(
int
int
byte[])

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/ISms$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/ISms; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class com.android.internal.telephony.gsm.ISms$Stub extends android.os.Binder implements com.android.internal.telephony.gsm.ISms

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_copyMessageToSimEf

static final int TRANSACTION_getAllMessagesFromSimEf

static final int TRANSACTION_sendMultipartText

static final int TRANSACTION_sendRawPdu

static final int TRANSACTION_updateMessageOnSimEf
----------------METHODS----------------

public void <init>()

public static com.android.internal.telephony.gsm.ISms asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Ljava/lang/Comparable<Lcom/android/internal/telephony/gsm/MccTable$MccEntry;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =MccEntry )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/MccTable; )
 class com.android.internal.telephony.gsm.MccTable$MccEntry extends java.lang.Object implements java.lang.Comparable

----------------FIELDS----------------

 java.lang.String iso

 int mcc

 int smallestDigitsMnc
----------------METHODS----------------

 void <init>(
int
java.lang.String
int)

public int compareTo(
com.android.internal.telephony.gsm.MccTable$MccEntry)

public volatile int compareTo(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/MccTable$MccEntry; )
public final class com.android.internal.telephony.gsm.MccTable extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/MccTable$MccEntry;>; )
static java.util.ArrayList table
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static java.lang.String countryCodeForMcc(
int)

private static com.android.internal.telephony.gsm.MccTable$MccEntry entryForMcc(
int)

public static int smallestDigitsMccForMnc(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/NetworkInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Lcom/android/internal/telephony/gsm/NetworkInfo;>; )
final class com.android.internal.telephony.gsm.NetworkInfo$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public com.android.internal.telephony.gsm.NetworkInfo createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public com.android.internal.telephony.gsm.NetworkInfo[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/NetworkInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/NetworkInfo$State;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =State )
public final class com.android.internal.telephony.gsm.NetworkInfo$State extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.NetworkInfo$State[] $VALUES

public static final com.android.internal.telephony.gsm.NetworkInfo$State AVAILABLE

public static final com.android.internal.telephony.gsm.NetworkInfo$State CURRENT

public static final com.android.internal.telephony.gsm.NetworkInfo$State FORBIDDEN

public static final com.android.internal.telephony.gsm.NetworkInfo$State UNKNOWN
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.gsm.NetworkInfo$State valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.NetworkInfo$State[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/NetworkInfo$State; )
public class com.android.internal.telephony.gsm.NetworkInfo extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Lcom/android/internal/telephony/gsm/NetworkInfo;>; )
public static final android.os.Parcelable$Creator CREATOR

 java.lang.String operatorAlphaLong

 java.lang.String operatorAlphaShort

 java.lang.String operatorNumeric

 com.android.internal.telephony.gsm.NetworkInfo$State state
----------------METHODS----------------

static void <clinit>()

 void <init>(
java.lang.String
java.lang.String
java.lang.String
com.android.internal.telephony.gsm.NetworkInfo$State)

 void <init>(
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

private static com.android.internal.telephony.gsm.NetworkInfo$State rilStateToState(
java.lang.String)

public int describeContents()

public java.lang.String getOperatorAlphaLong()

public java.lang.String getOperatorAlphaShort()

public java.lang.String getOperatorNumeric()

public com.android.internal.telephony.gsm.NetworkInfo$State getState()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public class com.android.internal.telephony.gsm.PDPContextState extends java.lang.Object

----------------FIELDS----------------

public boolean active

public java.lang.String address

public java.lang.String apn

public int cid

public java.lang.String type
----------------METHODS----------------

public void <init>()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/PdpConnection; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class com.android.internal.telephony.gsm.PdpConnection$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$com$android$internal$telephony$gsm$DataLinkInterface$LinkState

static final int[] $SwitchMap$com$android$internal$telephony$gsm$PdpConnection$PdpFailCause

static final int[] $SwitchMap$com$android$internal$telephony$gsm$PdpConnection$PdpState
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/PdpConnection$PdpFailCause;>; )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/PdpConnection; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =PdpFailCause )
public final class com.android.internal.telephony.gsm.PdpConnection$PdpFailCause extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.PdpConnection$PdpFailCause[] $VALUES

public static final com.android.internal.telephony.gsm.PdpConnection$PdpFailCause BAD_APN

public static final com.android.internal.telephony.gsm.PdpConnection$PdpFailCause BAD_PAP_SECRET

public static final com.android.internal.telephony.gsm.PdpConnection$PdpFailCause BARRED

public static final com.android.internal.telephony.gsm.PdpConnection$PdpFailCause NONE

public static final com.android.internal.telephony.gsm.PdpConnection$PdpFailCause NO_DATA_PLAN

public static final com.android.internal.telephony.gsm.PdpConnection$PdpFailCause NO_SIGNAL

public static final com.android.internal.telephony.gsm.PdpConnection$PdpFailCause RADIO_ERROR_RETRY

public static final com.android.internal.telephony.gsm.PdpConnection$PdpFailCause RADIO_NOT_AVIALABLE

public static final com.android.internal.telephony.gsm.PdpConnection$PdpFailCause RADIO_OFF

public static final com.android.internal.telephony.gsm.PdpConnection$PdpFailCause SERVICE_OPTION_NOT_SUBSCRIBED

public static final com.android.internal.telephony.gsm.PdpConnection$PdpFailCause SERVICE_OPTION_NOT_SUPPORTED

public static final com.android.internal.telephony.gsm.PdpConnection$PdpFailCause SIM_LOCKED

public static final com.android.internal.telephony.gsm.PdpConnection$PdpFailCause SUSPENED_TEMPORARY

public static final com.android.internal.telephony.gsm.PdpConnection$PdpFailCause UNKNOWN

public static final com.android.internal.telephony.gsm.PdpConnection$PdpFailCause USER_AUTHENTICATION
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.gsm.PdpConnection$PdpFailCause valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.PdpConnection$PdpFailCause[] values()

public boolean isPermanentFail()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/PdpConnection$PdpState;>; )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/PdpConnection; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =PdpState )
public final class com.android.internal.telephony.gsm.PdpConnection$PdpState extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.PdpConnection$PdpState[] $VALUES

public static final com.android.internal.telephony.gsm.PdpConnection$PdpState ACTIVATING

public static final com.android.internal.telephony.gsm.PdpConnection$PdpState ACTIVE

public static final com.android.internal.telephony.gsm.PdpConnection$PdpState INACTIVE
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.gsm.PdpConnection$PdpState valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.PdpConnection$PdpState[] values()

public boolean isActive()

public boolean isInactive()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/PdpConnection$1;Lcom/android/internal/telephony/gsm/PdpConnection$PdpFailCause;Lcom/android/internal/telephony/gsm/PdpConnection$PdpState; )
public class com.android.internal.telephony.gsm.PdpConnection extends android.os.Handler

----------------FIELDS----------------

private static final boolean DBG

private static final int EVENT_DEACTIVATE_DONE

private static final int EVENT_FORCE_RETRY

private static final int EVENT_GET_LAST_FAIL_DONE

private static final int EVENT_LINK_STATE_CHANGED

private static final int EVENT_LOG_BAD_DNS_ADDRESS

private static final int EVENT_SETUP_PDP_DONE

private static final boolean FAKE_FAIL

private static final java.lang.String LOG_TAG

private static final java.lang.String NULL_IP

private static final int PDP_FAIL_RIL_BAD_APN

private static final int PDP_FAIL_RIL_BARRED

private static final int PDP_FAIL_RIL_ERROR_UNSPECIFIED

private static final int PDP_FAIL_RIL_SERVICE_OPTION_NOT_SUBSCRIBED

private static final int PDP_FAIL_RIL_SERVICE_OPTION_NOT_SUPPORTED

private static final int PDP_FAIL_RIL_USER_AUTHENTICATION

private com.android.internal.telephony.gsm.ApnSetting apn

private int cid

private long createTime

 com.android.internal.telephony.gsm.DataLink dataLink

private java.lang.String[] dnsServers

private java.lang.String gatewayAddress

private java.lang.String interfaceName

private java.lang.String ipAddress

private com.android.internal.telephony.gsm.PdpConnection$PdpFailCause lastFailCause

private long lastFailTime

private android.os.Message onConnectCompleted

private android.os.Message onDisconnect

private java.lang.String pdp_name

private com.android.internal.telephony.gsm.GSMPhone phone

private boolean receivedDisconnectReq

private com.android.internal.telephony.gsm.PdpConnection$PdpState state
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.GSMPhone)

private com.android.internal.telephony.gsm.PdpConnection$PdpFailCause getFailCauseFromRequest(
int)

private void log(
java.lang.String)

private void notifyDisconnect(
android.os.Message)

private void notifyFail(
com.android.internal.telephony.gsm.PdpConnection$PdpFailCause
android.os.Message)

private void notifySuccess(
android.os.Message)

private void onLinkStateChanged(
com.android.internal.telephony.gsm.DataLinkInterface$LinkState)

private void setHttpProxy(
java.lang.String
java.lang.String)

 void clearSettings()

 void connect(
com.android.internal.telephony.gsm.ApnSetting
android.os.Message)

 void disconnect(
android.os.Message)

public com.android.internal.telephony.gsm.ApnSetting getApn()

public long getConnectionTime()

 java.lang.String[] getDnsServers()

 java.lang.String getGatewayAddress()

 java.lang.String getInterface()

 java.lang.String getIpAddress()

public com.android.internal.telephony.gsm.PdpConnection$PdpFailCause getLastFailCause()

public long getLastFailTime()

public com.android.internal.telephony.gsm.PdpConnection$PdpState getState()

public void handleMessage(
android.os.Message)

public java.lang.String toString()

________________CLASS________________


final class com.android.internal.telephony.gsm.PppLink extends com.android.internal.telephony.gsm.DataLink implements com.android.internal.telephony.gsm.DataLinkInterface

----------------FIELDS----------------

static final byte[] DOWN_ASCII_STRING

static final int EVENT_POLL_DATA_CONNECTION

static final int EVENT_PPP_OPERSTATE_CHANGED

static final int EVENT_PPP_PIDFILE_CHANGED

private static final java.lang.String LOG_TAG

static final java.lang.String PATH_PPP_OPERSTATE

static final int POLL_SYSFS_MILLIS

static final java.lang.String PROPERTY_PPPD_EXIT_CODE

static final java.lang.String SERVICE_PPPD_GPRS

static final byte[] UNKNOWN_ASCII_STRING

static final byte[] UP_ASCII_STRING

 int lastPppdExitCode

private final byte[] mCheckPPPBuffer
----------------METHODS----------------

static void <clinit>()

 void <init>(
com.android.internal.telephony.gsm.DataConnectionTracker)

private void checkPPP()

public void connect()

public void disconnect()

public int getLastLinkExitCode()

public void handleMessage(
android.os.Message)

public void setPasswordInfo(
android.database.Cursor)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/RIL; )
 class com.android.internal.telephony.gsm.RIL$1 extends android.content.BroadcastReceiver

----------------FIELDS----------------

final com.android.internal.telephony.gsm.RIL this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.RIL)

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =RILReceiver )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/RIL; )
 class com.android.internal.telephony.gsm.RIL$RILReceiver extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

 byte[] buffer

final com.android.internal.telephony.gsm.RIL this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.RIL)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =RILSender )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/RIL; )
 class com.android.internal.telephony.gsm.RIL$RILSender extends java.lang.Object implements android.os.HandlerInterface, java.lang.Runnable

----------------FIELDS----------------

 byte[] dataLength

final com.android.internal.telephony.gsm.RIL this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.RIL)

public void handleMessage(
android.os.Message)

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/RIL$RILReceiver;Lcom/android/internal/telephony/gsm/RIL$RILSender; )
public final class com.android.internal.telephony.gsm.RIL extends com.android.internal.telephony.gsm.BaseCommands implements com.android.internal.telephony.gsm.CommandsInterface

----------------FIELDS----------------

private static final boolean DBG

static final int EVENT_SEND

static final int EVENT_WAKE_LOCK_TIMEOUT

static final java.lang.String LOG_TAG

static final int RESPONSE_SOLICITED

static final int RESPONSE_UNSOLICITED

static final boolean RILJ_LOG

static final int RIL_MAX_COMMAND_BYTES

static final java.lang.String SOCKET_NAME_RIL

static final int SOCKET_OPEN_RETRY_MILLIS

static int WAKE_LOCK_TIMEOUT

private android.content.Context mContext

private boolean mInitialRadioStateChange

 android.content.BroadcastReceiver mIntentReceiver

 java.lang.Object mLastNITZTimeInfo

 com.android.internal.telephony.gsm.RIL$RILReceiver mReceiver

 java.lang.Thread mReceiverThread

 int mRequestMessagesPending
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/RILRequest;>; )
 java.util.ArrayList mRequestsList

 com.android.internal.telephony.gsm.RIL$RILSender mSender

 android.os.Handler mSenderH

 com.android.internal.os.HandlerThread mSenderThread

 android.net.LocalSocket mSocket

 android.os.PowerManager$WakeLock mWakeLock
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

static void access$000(
com.android.internal.telephony.gsm.RIL
boolean)

static com.android.internal.telephony.gsm.RILRequest access$100(
com.android.internal.telephony.gsm.RIL
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static int access$200(
java.io.InputStream
byte[])

static void access$300(
com.android.internal.telephony.gsm.RIL
android.os.Parcel)

private void acquireWakeLock()

private com.android.internal.telephony.gsm.RILRequest findAndRemoveRequestFromList(
int)

private void processResponse(
android.os.Parcel)

private void processSolicited(
android.os.Parcel)

private void processUnsolicited(
android.os.Parcel)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private static int readRilMessage(
java.io.InputStream
byte[])

private void releaseWakeLockIfDone()

static java.lang.String requestToString(
int)

private java.lang.Object responseCallForward(
android.os.Parcel)

private java.lang.Object responseCallList(
android.os.Parcel)

private java.lang.Object responseContextList(
android.os.Parcel)

private java.lang.Object responseInts(
android.os.Parcel)

private java.lang.Object responseNetworkInfos(
android.os.Parcel)

private java.lang.Object responseRaw(
android.os.Parcel)

private java.lang.Object responseSIM_IO(
android.os.Parcel)

private java.lang.Object responseSMS(
android.os.Parcel)

private java.lang.Object responseSimStatus(
android.os.Parcel)

private java.lang.Object responseString(
android.os.Parcel)

private java.lang.Object responseStrings(
android.os.Parcel)

private java.lang.Object responseSuppServiceNotification(
android.os.Parcel)

private java.lang.Object responseVoid(
android.os.Parcel)

private java.lang.String retToString(
int
java.lang.Object)

private void riljLog(
java.lang.String)

private void send(
com.android.internal.telephony.gsm.RILRequest)

private void sendScreenState(
boolean)

private void setRadioStateFromRILInt(
int)

private int translateStatus(
int)

public void acceptCall(
android.os.Message)

public void acknowledgeLastIncomingSMS(
boolean
android.os.Message)

public void cancelPendingUssd(
android.os.Message)

public void changeBarringPassword(
java.lang.String
java.lang.String
java.lang.String
android.os.Message)

public void changeSimPin(
java.lang.String
java.lang.String
android.os.Message)

public void changeSimPin2(
java.lang.String
java.lang.String
android.os.Message)

public void conference(
android.os.Message)

public void deactivateDefaultPDP(
int
android.os.Message)

public void deleteSmsOnSim(
int
android.os.Message)

public void dial(
java.lang.String
int
android.os.Message)

public void explicitCallTransfer(
android.os.Message)

public void getAvailableNetworks(
android.os.Message)

public void getBasebandVersion(
android.os.Message)

public void getCLIR(
android.os.Message)

public void getCurrentCalls(
android.os.Message)

public void getGPRSRegistrationState(
android.os.Message)

public void getIMEI(
android.os.Message)

public void getIMEISV(
android.os.Message)

public void getIMSI(
android.os.Message)

public void getLastCallFailCause(
android.os.Message)

public void getLastPdpFailCause(
android.os.Message)

public void getMute(
android.os.Message)

public void getNeighboringCids(
android.os.Message)

public void getNetworkSelectionMode(
android.os.Message)

public void getOperator(
android.os.Message)

public void getPDPContextList(
android.os.Message)

public void getPreferredNetworkType(
android.os.Message)

public void getRegistrationState(
android.os.Message)

public void getSignalStrength(
android.os.Message)

public void getSimStatus(
android.os.Message)

public void handleCallSetupRequestFromSim(
boolean
android.os.Message)

public void hangupConnection(
int
android.os.Message)

public void hangupForegroundResumeBackground(
android.os.Message)

public void hangupWaitingOrBackground(
android.os.Message)

public void invokeOemRilRequestRaw(
byte[]
android.os.Message)

public void invokeOemRilRequestStrings(
java.lang.String[]
android.os.Message)

protected void onRadioAvailable()

public void queryAvailableBandMode(
android.os.Message)

public void queryCLIP(
android.os.Message)

public void queryCallForwardStatus(
int
int
java.lang.String
android.os.Message)

public void queryCallWaiting(
int
android.os.Message)

public void queryFacilityLock(
java.lang.String
java.lang.String
int
android.os.Message)

public void rejectCall(
android.os.Message)

public void resetRadio(
android.os.Message)

public void sendDtmf(
char
android.os.Message)

public void sendEnvelope(
java.lang.String
android.os.Message)

public void sendSMS(
java.lang.String
java.lang.String
android.os.Message)

public void sendTerminalResponse(
java.lang.String
android.os.Message)

public void sendUSSD(
java.lang.String
android.os.Message)

public void separateConnection(
int
android.os.Message)

public void setBandMode(
int
android.os.Message)

public void setCLIR(
int
android.os.Message)

public void setCallForward(
int
int
int
java.lang.String
int
android.os.Message)

public void setCallWaiting(
boolean
int
android.os.Message)

public void setFacilityLock(
java.lang.String
boolean
java.lang.String
int
android.os.Message)

public void setLocationUpdates(
boolean
android.os.Message)

public void setMute(
boolean
android.os.Message)

public void setNetworkSelectionModeAutomatic(
android.os.Message)

public void setNetworkSelectionModeManual(
java.lang.String
android.os.Message)

public void setOnNITZTime(
android.os.Handler
int
java.lang.Object)

public void setPreferredNetworkType(
int
android.os.Message)

public void setRadioPower(
boolean
android.os.Message)

public void setSuppServiceNotifications(
boolean
android.os.Message)

public void setupDefaultPDP(
java.lang.String
java.lang.String
java.lang.String
android.os.Message)

public void simIO(
int
int
java.lang.String
int
int
int
java.lang.String
java.lang.String
android.os.Message)

public void startDtmf(
char
android.os.Message)

public void stopDtmf(
android.os.Message)

public void supplyNetworkDepersonalization(
java.lang.String
android.os.Message)

public void supplySimPin(
java.lang.String
android.os.Message)

public void supplySimPin2(
java.lang.String
android.os.Message)

public void supplySimPuk(
java.lang.String
java.lang.String
android.os.Message)

public void supplySimPuk2(
java.lang.String
java.lang.String
android.os.Message)

public void switchWaitingOrHoldingAndActive(
android.os.Message)

public void writeSmsToSim(
int
java.lang.String
java.lang.String
android.os.Message)

________________CLASS________________


abstract interface class com.android.internal.telephony.gsm.RILConstants extends java.lang.Object

----------------FIELDS----------------

public static final int GENERIC_FAILURE

public static final int OP_NOT_ALLOWED_BEFORE_REG_NW

public static final int OP_NOT_ALLOWED_DURING_VOICE_CALL

public static final int PASSWORD_INCORRECT

public static final int RADIO_NOT_AVAILABLE

public static final int REQUEST_CANCELLED

public static final int REQUEST_NOT_SUPPORTED

public static final int RIL_ERRNO_INVALID_RESPONSE

public static final int RIL_REQUEST_ANSWER

public static final int RIL_REQUEST_BASEBAND_VERSION

public static final int RIL_REQUEST_CANCEL_USSD

public static final int RIL_REQUEST_CHANGE_BARRING_PASSWORD

public static final int RIL_REQUEST_CHANGE_SIM_PIN

public static final int RIL_REQUEST_CHANGE_SIM_PIN2

public static final int RIL_REQUEST_CONFERENCE

public static final int RIL_REQUEST_DEACTIVATE_DEFAULT_PDP

public static final int RIL_REQUEST_DELETE_SMS_ON_SIM

public static final int RIL_REQUEST_DIAL

public static final int RIL_REQUEST_DTMF

public static final int RIL_REQUEST_DTMF_START

public static final int RIL_REQUEST_DTMF_STOP

public static final int RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION

public static final int RIL_REQUEST_ENTER_SIM_PIN

public static final int RIL_REQUEST_ENTER_SIM_PIN2

public static final int RIL_REQUEST_ENTER_SIM_PUK

public static final int RIL_REQUEST_ENTER_SIM_PUK2

public static final int RIL_REQUEST_EXPLICIT_CALL_TRANSFER

public static final int RIL_REQUEST_GET_CLIR

public static final int RIL_REQUEST_GET_CURRENT_CALLS

public static final int RIL_REQUEST_GET_IMEI

public static final int RIL_REQUEST_GET_IMEISV

public static final int RIL_REQUEST_GET_IMSI

public static final int RIL_REQUEST_GET_MUTE

public static final int RIL_REQUEST_GET_NEIGHBORING_CELL_IDS

public static final int RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE

public static final int RIL_REQUEST_GET_SIM_STATUS

public static final int RIL_REQUEST_GPRS_REGISTRATION_STATE

public static final int RIL_REQUEST_HANGUP

public static final int RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND

public static final int RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND

public static final int RIL_REQUEST_LAST_CALL_FAIL_CAUSE

public static final int RIL_REQUEST_LAST_PDP_FAIL_CAUSE

public static final int RIL_REQUEST_OEM_HOOK_RAW

public static final int RIL_REQUEST_OEM_HOOK_STRINGS

public static final int RIL_REQUEST_OPERATOR

public static final int RIL_REQUEST_PDP_CONTEXT_LIST

public static final int RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE

public static final int RIL_REQUEST_QUERY_AVAILABLE_NETWORKS

public static final int RIL_REQUEST_QUERY_CALL_FORWARD_STATUS

public static final int RIL_REQUEST_QUERY_CALL_WAITING

public static final int RIL_REQUEST_QUERY_CLIP

public static final int RIL_REQUEST_QUERY_FACILITY_LOCK

public static final int RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE

public static final int RIL_REQUEST_RADIO_POWER

public static final int RIL_REQUEST_REGISTRATION_STATE

public static final int RIL_REQUEST_RESET_RADIO

public static final int RIL_REQUEST_SCREEN_STATE

public static final int RIL_REQUEST_SEND_SMS

public static final int RIL_REQUEST_SEND_SMS_EXPECT_MORE

public static final int RIL_REQUEST_SEND_USSD

public static final int RIL_REQUEST_SEPARATE_CONNECTION

public static final int RIL_REQUEST_SETUP_DEFAULT_PDP

public static final int RIL_REQUEST_SET_BAND_MODE

public static final int RIL_REQUEST_SET_CALL_FORWARD

public static final int RIL_REQUEST_SET_CALL_WAITING

public static final int RIL_REQUEST_SET_CLIR

public static final int RIL_REQUEST_SET_FACILITY_LOCK

public static final int RIL_REQUEST_SET_LOCATION_UPDATES

public static final int RIL_REQUEST_SET_MUTE

public static final int RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC

public static final int RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL

public static final int RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE

public static final int RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION

public static final int RIL_REQUEST_SIGNAL_STRENGTH

public static final int RIL_REQUEST_SIM_IO

public static final int RIL_REQUEST_SMS_ACKNOWLEDGE

public static final int RIL_REQUEST_STK_GET_PROFILE

public static final int RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM

public static final int RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND

public static final int RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE

public static final int RIL_REQUEST_STK_SET_PROFILE

public static final int RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE

public static final int RIL_REQUEST_UDUB

public static final int RIL_REQUEST_WRITE_SMS_TO_SIM

public static final int RIL_SIM_ABSENT

public static final int RIL_SIM_NETWORK_PERSONALIZATION

public static final int RIL_SIM_NOT_READY

public static final int RIL_SIM_PIN

public static final int RIL_SIM_PUK

public static final int RIL_SIM_READY

public static final int RIL_UNSOL_CALL_RING

public static final int RIL_UNSOL_NITZ_TIME_RECEIVED

public static final int RIL_UNSOL_ON_USSD

public static final int RIL_UNSOL_ON_USSD_REQUEST

public static final int RIL_UNSOL_PDP_CONTEXT_LIST_CHANGED

public static final int RIL_UNSOL_RESPONSE_BASE

public static final int RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED

public static final int RIL_UNSOL_RESPONSE_NETWORK_STATE_CHANGED

public static final int RIL_UNSOL_RESPONSE_NEW_SMS

public static final int RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM

public static final int RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT

public static final int RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED

public static final int RIL_UNSOL_SIGNAL_STRENGTH

public static final int RIL_UNSOL_SIM_REFRESH

public static final int RIL_UNSOL_SIM_SMS_STORAGE_FULL

public static final int RIL_UNSOL_STK_CALL_SETUP

public static final int RIL_UNSOL_STK_EVENT_NOTIFY

public static final int RIL_UNSOL_STK_PROACTIVE_COMMAND

public static final int RIL_UNSOL_STK_SESSION_END

public static final int RIL_UNSOL_SUPP_SVC_NOTIFICATION

public static final int SIM_PIN2

public static final int SIM_PUK2

public static final int SMS_SEND_FAIL_RETRY

public static final int SUCCESS
----------------METHODS----------------

________________CLASS________________


 class com.android.internal.telephony.gsm.RILRequest extends java.lang.Object

----------------FIELDS----------------

static final java.lang.String LOG_TAG

private static final int MAX_POOL_SIZE

static int sNextSerial

private static com.android.internal.telephony.gsm.RILRequest sPool

private static int sPoolSize

private static java.lang.Object sPoolSync

static java.lang.Object sSerialMonitor

 com.android.internal.telephony.gsm.RILRequest mNext

 int mRequest

 android.os.Message mResult

 int mSerial

 android.os.Parcel mp
----------------METHODS----------------

static void <clinit>()

private void <init>()

static com.android.internal.telephony.gsm.RILRequest obtain(
int
android.os.Message)

static void resetSerial()

 void onError(
int)

 void release()

 java.lang.String serialString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/SIMFileHandler; )
@dalvik.annotation.InnerClass (accessFlags =8 name =LoadLinearFixedContext )
 class com.android.internal.telephony.gsm.SIMFileHandler$LoadLinearFixedContext extends java.lang.Object

----------------FIELDS----------------

 int countRecords

 int efid

 boolean loadAll

 android.os.Message onLoaded

 int recordNum

 int recordSize
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<[B>; )
 java.util.ArrayList results
----------------METHODS----------------

 void <init>(
int
int
android.os.Message)

 void <init>(
int
android.os.Message)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/SIMFileHandler$LoadLinearFixedContext; )
public final class com.android.internal.telephony.gsm.SIMFileHandler extends android.os.Handler

----------------FIELDS----------------

private static final int COMMAND_GET_RESPONSE

private static final int COMMAND_READ_BINARY

private static final int COMMAND_READ_RECORD

private static final int COMMAND_SEEK

private static final int COMMAND_UPDATE_BINARY

private static final int COMMAND_UPDATE_RECORD

private static final int EF_TYPE_CYCLIC

private static final int EF_TYPE_LINEAR_FIXED

private static final int EF_TYPE_TRANSPARENT

private static final int EVENT_GET_BINARY_SIZE_DONE

private static final int EVENT_GET_EF_LINEAR_RECORD_SIZE_DONE

private static final int EVENT_GET_RECORD_SIZE_DONE

private static final int EVENT_READ_BINARY_DONE

private static final int EVENT_READ_ICON_DONE

private static final int EVENT_READ_IMG_DONE

private static final int EVENT_READ_RECORD_DONE

private static final int GET_RESPONSE_EF_IMG_SIZE_BYTES

private static final int GET_RESPONSE_EF_SIZE_BYTES

static final java.lang.String LOG_TAG

private static final int READ_RECORD_MODE_ABSOLUTE

private static final int RESPONSE_DATA_ACCESS_CONDITION_1

private static final int RESPONSE_DATA_ACCESS_CONDITION_2

private static final int RESPONSE_DATA_ACCESS_CONDITION_3

private static final int RESPONSE_DATA_FILE_ID_1

private static final int RESPONSE_DATA_FILE_ID_2

private static final int RESPONSE_DATA_FILE_SIZE_1

private static final int RESPONSE_DATA_FILE_SIZE_2

private static final int RESPONSE_DATA_FILE_STATUS

private static final int RESPONSE_DATA_FILE_TYPE

private static final int RESPONSE_DATA_LENGTH

private static final int RESPONSE_DATA_RECORD_LENGTH

private static final int RESPONSE_DATA_RFU_1

private static final int RESPONSE_DATA_RFU_2

private static final int RESPONSE_DATA_RFU_3

private static final int RESPONSE_DATA_STRUCTURE

private static final int TYPE_DF

private static final int TYPE_EF

private static final int TYPE_MF

private static final int TYPE_RFU

 com.android.internal.telephony.gsm.GSMPhone phone
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.GSMPhone)

private void sendResult(
android.os.Message
java.lang.Object
java.lang.Throwable)

 void getEFLinearRecordSize(
int
android.os.Message)

public void handleMessage(
android.os.Message)

public void loadEFImgLinearFixed(
int
android.os.Message)

public void loadEFImgTransparent(
int
android.os.Message)

 void loadEFLinearFixed(
int
int
android.os.Message)

 void loadEFLinearFixedAll(
int
android.os.Message)

 void loadEFTransparent(
int
android.os.Message)

 void updateEFLinearFixed(
int
int
byte[]
java.lang.String
android.os.Message)

 void updateEFTransparent(
int
byte[]
android.os.Message)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/SIMRecords; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class com.android.internal.telephony.gsm.SIMRecords$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$com$android$internal$telephony$gsm$SIMRecords$Get_Spn_Fsm_State
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/SIMRecords; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/SIMRecords$Get_Spn_Fsm_State;>; )
@dalvik.annotation.InnerClass (accessFlags =16410 name =Get_Spn_Fsm_State )
final class com.android.internal.telephony.gsm.SIMRecords$Get_Spn_Fsm_State extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.SIMRecords$Get_Spn_Fsm_State[] $VALUES

public static final com.android.internal.telephony.gsm.SIMRecords$Get_Spn_Fsm_State IDLE

public static final com.android.internal.telephony.gsm.SIMRecords$Get_Spn_Fsm_State INIT

public static final com.android.internal.telephony.gsm.SIMRecords$Get_Spn_Fsm_State READ_SPN_3GPP

public static final com.android.internal.telephony.gsm.SIMRecords$Get_Spn_Fsm_State READ_SPN_CPHS

public static final com.android.internal.telephony.gsm.SIMRecords$Get_Spn_Fsm_State READ_SPN_SHORT_CPHS
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.gsm.SIMRecords$Get_Spn_Fsm_State valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.SIMRecords$Get_Spn_Fsm_State[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/SIMRecords$1;Lcom/android/internal/telephony/gsm/SIMRecords$Get_Spn_Fsm_State; )
public final class com.android.internal.telephony.gsm.SIMRecords extends android.os.Handler implements com.android.internal.telephony.gsm.SimConstants

----------------FIELDS----------------

static final int CFF_LINE1_MASK

static final int CFF_LINE1_RESET

static final int CFF_UNCONDITIONAL_ACTIVE

static final int CFF_UNCONDITIONAL_DEACTIVE

private static final int CPHS_SST_MBN_ENABLED

private static final int CPHS_SST_MBN_MASK

private static final boolean CRASH_RIL

private static final boolean DBG

private static final int EVENT_GET_AD_DONE

private static final int EVENT_GET_ALL_SMS_DONE

private static final int EVENT_GET_CFF_DONE

private static final int EVENT_GET_CFIS_DONE

private static final int EVENT_GET_CPHS_MAILBOX_DONE

private static final int EVENT_GET_ICCID_DONE

private static final int EVENT_GET_IMSI_DONE

private static final int EVENT_GET_INFO_CPHS_DONE

private static final int EVENT_GET_MBDN_DONE

private static final int EVENT_GET_MBI_DONE

private static final int EVENT_GET_MSISDN_DONE

private static final int EVENT_GET_MWIS_DONE

private static final int EVENT_GET_PNN_DONE

private static final int EVENT_GET_SMS_DONE

private static final int EVENT_GET_SPDI_DONE

private static final int EVENT_GET_SPN_DONE

private static final int EVENT_GET_SST_DONE

private static final int EVENT_GET_VOICE_MAIL_INDICATOR_CPHS_DONE

private static final int EVENT_MARK_SMS_READ_DONE

private static final int EVENT_RADIO_OFF_OR_NOT_AVAILABLE

private static final int EVENT_SET_CPHS_MAILBOX_DONE

private static final int EVENT_SET_MBDN_DONE

private static final int EVENT_SET_MSISDN_DONE

private static final int EVENT_SIM_READY

private static final int EVENT_SIM_REFRESH

private static final int EVENT_SMS_ON_SIM

private static final int EVENT_UPDATE_DONE

static final java.lang.String LOG_TAG

static final int SPN_RULE_SHOW_PLMN

static final int SPN_RULE_SHOW_SPN

static final int TAG_FULL_NETWORK_NAME

static final int TAG_SHORT_NETWORK_NAME

static final int TAG_SPDI_PLMN_LIST

 com.android.internal.telephony.gsm.AdnRecordCache adnCache

 boolean callForwardingEnabled

 int countVoiceMessages

 byte[] efCPHS_MWI

 byte[] efMWIS

 java.lang.String iccid

 java.lang.String imsi

 boolean isVoiceMailFixed

private byte[] mCphsInfo

 byte[] mEfCff

 byte[] mEfCfis

 com.android.internal.telephony.gsm.VoiceMailConstants mVmConfig

 int mailboxIndex

 int mncLength

 java.lang.String msisdn

 java.lang.String msisdnTag

 java.lang.String newVoiceMailNum

 java.lang.String newVoiceMailTag

 com.android.internal.telephony.gsm.GSMPhone phone

 java.lang.String pnnHomeName

 android.os.RegistrantList recordsLoadedRegistrants

 boolean recordsRequested

 int recordsToLoad
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/lang/String;>; )
 java.util.ArrayList spdiNetworks

 java.lang.String spn

 int spnDisplayCondition

private com.android.internal.telephony.gsm.SIMRecords$Get_Spn_Fsm_State spnState

 java.lang.String voiceMailNum

 java.lang.String voiceMailTag
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.GSMPhone)

private void fetchSimRecords()

private void getSpnFsm(
boolean
android.os.AsyncResult)

private void handleFileUpdate(
int)

private void handleSimRefresh(
int[])

private void handleSms(
byte[])

private void handleSmses(
java.util.ArrayList)

private boolean isCphsMailboxEnabled()

private boolean isOnMatchingPlmn(
java.lang.String)

private void log(
java.lang.String)

private void onAllRecordsLoaded()

private void onRadioOffOrNotAvailable()

private void onRecordLoaded()

private void onSimReady()

private void parseEfSpdi(
byte[])

private void setVoiceMailByCountry(
java.lang.String)

 com.android.internal.telephony.gsm.AdnRecordCache getAdnCache()

public int getCountVoiceMessages()

 int getDisplayRule(
java.lang.String)

public java.lang.String getIMSI()

public java.lang.String getMsisdnAlphaTag()

public java.lang.String getMsisdnNumber()

 boolean getRecordsLoaded()

 java.lang.String getSIMOperatorNumeric()

public java.lang.String getServiceProvideName()

public boolean getVoiceCallForwardingFlag()

public java.lang.String getVoiceMailAlphaTag()

public java.lang.String getVoiceMailNumber()

public boolean getVoiceMessageWaiting()

public void handleMessage(
android.os.Message)

public void onRefresh(
boolean
int[])

public void registerForRecordsLoaded(
android.os.Handler
int
java.lang.Object)

public void setMsisdnNumber(
java.lang.String
java.lang.String
android.os.Message)

public void setVoiceCallForwardingFlag(
int
boolean)

public void setVoiceMailNumber(
java.lang.String
java.lang.String
android.os.Message)

public void setVoiceMessageWaiting(
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/SMSDispatcher; )
 class com.android.internal.telephony.gsm.SMSDispatcher$1 extends java.lang.Object implements android.content.DialogInterface$OnClickListener

----------------FIELDS----------------

final com.android.internal.telephony.gsm.SMSDispatcher this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.SMSDispatcher)

public void onClick(
android.content.DialogInterface
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/SMSDispatcher; )
@dalvik.annotation.InnerClass (accessFlags =2 name =SmsCounter )
 class com.android.internal.telephony.gsm.SMSDispatcher$SmsCounter extends java.lang.Object

----------------FIELDS----------------

private int mCheckPeriod

private int mMaxAllowed
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/Long;>;>; )
private java.util.HashMap mSmsStamp

final com.android.internal.telephony.gsm.SMSDispatcher this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.SMSDispatcher
int
int)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Ljava/lang/Long;>;)Z )
private boolean isUnderLimit(
java.util.ArrayList)

 boolean check(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =SmsTracker )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/SMSDispatcher; )
 class com.android.internal.telephony.gsm.SMSDispatcher$SmsTracker extends java.lang.Object

----------------FIELDS----------------

 java.util.HashMap mData

 android.app.PendingIntent mDeliveryIntent

 int mMessageRef

 int mRetryCount

 android.app.PendingIntent mSentIntent
----------------METHODS----------------

 void <init>(
java.util.HashMap
android.app.PendingIntent
android.app.PendingIntent)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/SMSDispatcher$SmsTracker;Lcom/android/internal/telephony/gsm/SMSDispatcher$SmsCounter; )
final class com.android.internal.telephony.gsm.SMSDispatcher extends android.os.Handler

----------------FIELDS----------------

private static final int DEFAULT_SMS_CHECK_PERIOD

private static final int DEFAULT_SMS_MAX_ALLOWED

private static final int DEFAULT_SMS_TIMOUEOUT

private static final byte DRM_RIGHTS_WBXML

private static final java.lang.String DRM_RIGHTS_WBXML_MIME_TYPE

private static final byte DRM_RIGHTS_XML

private static final java.lang.String DRM_RIGHTS_XML_MIME_TYPE

static final int EVENT_ALERT_TIMEOUT

static final int EVENT_NEW_SMS

static final int EVENT_NEW_SMS_STATUS_REPORT

static final int EVENT_POST_ALERT

static final int EVENT_SEND_CONFIRMED_SMS

static final int EVENT_SEND_RETRY

static final int EVENT_SEND_SMS_COMPLETE

static final int EVENT_SIM_FULL

static final int MAIL_SEND_SMS

private static final int MAX_SEND_RETRIES

private static final java.lang.String MMS_MIME_TYPE

private static final java.lang.String[] RAW_PROJECTION

private static final int SEND_RETRY_DELAY

private static final java.lang.String TAG

private static final byte WAP_CO_MIME_PORT

private static final java.lang.String WAP_CO_MIME_TYPE

private static final int WAP_PDU_LENGTH_QUOTE

private static final int WAP_PDU_SHORT_LENGTH_MAX

private static final int WAP_PDU_TYPE_CONFIRMED_PUSH

private static final int WAP_PDU_TYPE_PUSH

private static final byte WAP_SI_MIME_PORT

private static final java.lang.String WAP_SI_MIME_TYPE

private static final byte WAP_SL_MIME_PORT

private static final java.lang.String WAP_SL_MIME_TYPE

private static int sConcatenatedRef
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/SMSDispatcher$SmsTracker;>; )
private final java.util.ArrayList deliveryPendingList

private final com.android.internal.telephony.gsm.CommandsInterface mCm

private final android.content.Context mContext

private com.android.internal.telephony.gsm.SMSDispatcher$SmsCounter mCounter

private android.content.DialogInterface$OnClickListener mListener

private final com.android.internal.telephony.gsm.GSMPhone mPhone

private final android.net.Uri mRawUri

private final android.content.ContentResolver mResolver

private com.android.internal.telephony.gsm.SMSDispatcher$SmsTracker mSTracker
----------------METHODS----------------

static void <clinit>()

 void <init>(
com.android.internal.telephony.gsm.GSMPhone)

private void dispatchPdus(
byte[][])

private void dispatchPortAddressedPdus(
byte[][]
int)

private void dispatchWapPdu(
byte[])

private java.lang.String getAppNameByIntent(
android.app.PendingIntent)

private void handleNotInService(
int
com.android.internal.telephony.gsm.SMSDispatcher$SmsTracker)

private void handleReachSentLimit(
com.android.internal.telephony.gsm.SMSDispatcher$SmsTracker)

private void handleSendComplete(
android.os.AsyncResult)

private void handleSimFull()

private void handleStatusReport(
android.os.AsyncResult)

private void processMessagePart(
android.telephony.gsm.SmsMessage
int
int
int
int)

private void sendSms(
com.android.internal.telephony.gsm.SMSDispatcher$SmsTracker)

 void dispatchMessage(
android.telephony.gsm.SmsMessage)

public void handleMessage(
android.os.Message)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList<Ljava/lang/String;>;Ljava/util/ArrayList<Landroid/app/PendingIntent;>;Ljava/util/ArrayList<Landroid/app/PendingIntent;>;)V )
 void sendMultipartText(
java.lang.String
java.lang.String
java.util.ArrayList
java.util.ArrayList
java.util.ArrayList)

 void sendRawPdu(
byte[]
byte[]
android.app.PendingIntent
android.app.PendingIntent)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/ServiceStateTracker; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class com.android.internal.telephony.gsm.ServiceStateTracker$1 extends android.database.ContentObserver

----------------FIELDS----------------

final com.android.internal.telephony.gsm.ServiceStateTracker this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.ServiceStateTracker
android.os.Handler)

public void onChange(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/ServiceStateTracker; )
 class com.android.internal.telephony.gsm.ServiceStateTracker$2 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$com$android$internal$telephony$gsm$CommandsInterface$RadioState
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/ServiceStateTracker$2; )
final class com.android.internal.telephony.gsm.ServiceStateTracker extends android.os.Handler

----------------FIELDS----------------

static final int DATA_ACCESS_EDGE

static final int DATA_ACCESS_GPRS

static final int DATA_ACCESS_UMTS

static final int DATA_ACCESS_UNKNOWN

static final boolean DBG

static final int EVENT_GET_LOC_DONE

static final int EVENT_GET_SIGNAL_STRENGTH

static final int EVENT_LOCATION_UPDATES_ENABLED

static final int EVENT_NETWORK_STATE_CHANGED

static final int EVENT_NITZ_TIME

static final int EVENT_POLL_SIGNAL_STRENGTH

static final int EVENT_POLL_STATE_GPRS

static final int EVENT_POLL_STATE_NETWORK_SELECTION_MODE

static final int EVENT_POLL_STATE_OPERATOR

static final int EVENT_POLL_STATE_REGISTRATION

static final int EVENT_RADIO_AVAILABLE

static final int EVENT_RADIO_STATE_CHANGED

static final int EVENT_SIGNAL_STRENGTH_UPDATE

static final int EVENT_SIM_READY

static final int EVENT_SIM_RECORDS_LOADED

private static final java.lang.String[] GMT_COUNTRY_CODES

static final java.lang.String LOG_TAG

static final int POLL_PERIOD_MILLIS

private static final java.lang.String TIMEZONE_PROPERTY

static final java.lang.String TMUK

 android.telephony.gsm.GsmCellLocation cellLoc

 com.android.internal.telephony.gsm.CommandsInterface cm

private java.lang.String curPlmn

private java.lang.String curSpn

private int curSpnRule

 boolean dontPollSignalStrength

private android.os.RegistrantList gprsAttachedRegistrants

private android.os.RegistrantList gprsDetachedRegistrants

private int gprsState

private android.database.ContentObserver mAutoTimeObserver

 boolean mDesiredPowerState

private boolean mGotCountryCode

private boolean mGsmRoaming

private boolean mNeedFixZone

private boolean mNeedToRegForSimLoaded

 long mSavedAtTime

 long mSavedTime

 java.lang.String mSavedTimeZone

private boolean mZoneDst

private int mZoneOffset

private long mZoneTime

private android.os.RegistrantList networkAttachedRegistrants

private int networkType

 android.telephony.gsm.GsmCellLocation newCellLoc

private int newGPRSState

private int newNetworkType

 android.telephony.ServiceState newSS

 com.android.internal.telephony.gsm.GSMPhone phone

 int[] pollingContext

private android.os.RegistrantList roamingOffRegistrants

private android.os.RegistrantList roamingOnRegistrants

 int rssi

 android.telephony.ServiceState ss
----------------METHODS----------------

static void <clinit>()

 void <init>(
com.android.internal.telephony.gsm.GSMPhone)

static void access$000(
com.android.internal.telephony.gsm.ServiceStateTracker)

private void cancelPollState()

private static java.lang.String displayNameFor(
int)

private java.util.TimeZone findTimeZone(
int
boolean
long)

private boolean getAutoTime()

private java.util.TimeZone getNitzTimeZone(
int
boolean
long)

private void handlePollStateResult(
int
android.os.AsyncResult)

private boolean isRoamingBetweenOperators(
boolean
android.telephony.ServiceState)

private boolean isTmobileUkRoamingEmergency()

private static java.lang.String networkTypeToString(
int)

private void onSignalStrengthResult(
android.os.AsyncResult)

private void pollState()

private void pollStateDone()

private void queueNextSignalStrengthPoll()

private boolean regCodeIsRoaming(
int)

private int regCodeToServiceState(
int)

private void revertToNitz()

private void saveNitzTime(
long)

private void saveNitzTimeZone(
java.lang.String)

private void setPowerStateToDesired()

private void setRssiDefaultValues()

private void setTimeFromNITZString(
java.lang.String
int)

private static int twoDigitsAt(
java.lang.String
int)

private void updateSpnDisplay()

 void disableLocationUpdates()

 void enableLocationUpdates()

 int getCurrentGprsState()

public void getLacAndCid(
android.os.Message)

public void handleMessage(
android.os.Message)

 boolean isConcurrentVoiceAndData()

 void registerForGprsAttached(
android.os.Handler
int
java.lang.Object)

 void registerForGprsDetached(
android.os.Handler
int
java.lang.Object)

 void registerForNetworkAttach(
android.os.Handler
int
java.lang.Object)

 void registerForRoamingOff(
android.os.Handler
int
java.lang.Object)

 void registerForRoamingOn(
android.os.Handler
int
java.lang.Object)

public void setRadioPower(
boolean)

________________CLASS________________


public class com.android.internal.telephony.gsm.SimException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

 void <init>(
java.lang.String)

________________CLASS________________


public class com.android.internal.telephony.gsm.SimFileNotFound extends com.android.internal.telephony.gsm.SimException

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

 void <init>(
int)

 void <init>(
java.lang.String)

________________CLASS________________


public class com.android.internal.telephony.gsm.SimFileTypeMismatch extends com.android.internal.telephony.gsm.SimException

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

 void <init>(
java.lang.String)

________________CLASS________________


public class com.android.internal.telephony.gsm.SimIoResult extends java.lang.Object

----------------FIELDS----------------

 byte[] payload

 int sw1

 int sw2
----------------METHODS----------------

public void <init>(
int
int
java.lang.String)

public void <init>(
int
int
byte[])

public com.android.internal.telephony.gsm.SimException getException()

public boolean success()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/SimPhoneBookInterfaceManager; )
 class com.android.internal.telephony.gsm.SimPhoneBookInterfaceManager$1 extends android.os.Handler

----------------FIELDS----------------

final com.android.internal.telephony.gsm.SimPhoneBookInterfaceManager this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.SimPhoneBookInterfaceManager)

public void handleMessage(
android.os.Message)

________________CLASS________________


public class com.android.internal.telephony.gsm.SimPhoneBookInterfaceManager extends com.android.internal.telephony.gsm.ISimPhoneBook$Stub

----------------FIELDS----------------

private static final boolean ALLOW_SIM_OP_IN_UI_THREAD

static final boolean DBG

private static final int EVENT_GET_SIZE_DONE

private static final int EVENT_LOAD_DONE

private static final int EVENT_UPDATE_DONE

static final java.lang.String LOG_TAG

private com.android.internal.telephony.gsm.AdnRecordCache adnCache

 android.os.Handler mHandler

private final java.lang.Object mLock

private com.android.internal.telephony.gsm.GSMPhone phone

private int[] recordSize
@dalvik.annotation.Signature (value =Ljava/util/List<Lcom/android/internal/telephony/gsm/AdnRecord;>; )
private java.util.List records

private boolean success
----------------METHODS----------------

public void <init>(
com.android.internal.telephony.gsm.GSMPhone)

static java.lang.Object access$000(
com.android.internal.telephony.gsm.SimPhoneBookInterfaceManager)

static int[] access$100(
com.android.internal.telephony.gsm.SimPhoneBookInterfaceManager)

static int[] access$102(
com.android.internal.telephony.gsm.SimPhoneBookInterfaceManager
int[])

static void access$200(
com.android.internal.telephony.gsm.SimPhoneBookInterfaceManager
java.lang.String)

static boolean access$302(
com.android.internal.telephony.gsm.SimPhoneBookInterfaceManager
boolean)

static java.util.List access$400(
com.android.internal.telephony.gsm.SimPhoneBookInterfaceManager)

static java.util.List access$402(
com.android.internal.telephony.gsm.SimPhoneBookInterfaceManager
java.util.List)

private void checkThread()

private void log(
java.lang.String)

private void publish()
@dalvik.annotation.Signature (value =(I)Ljava/util/List<Lcom/android/internal/telephony/gsm/AdnRecord;>; )
public java.util.List getAdnRecordsInEf(
int)

public int[] getAdnRecordsSize(
int)

public boolean updateAdnRecordsInEfByIndex(
int
java.lang.String
java.lang.String
int
java.lang.String)

public boolean updateAdnRecordsInEfBySearch(
int
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

________________CLASS________________


public class com.android.internal.telephony.gsm.SimProvider extends android.content.ContentProvider

----------------FIELDS----------------

private static final java.lang.String[] ADDRESS_BOOK_COLUMN_NAMES

private static final int ADN

private static final boolean DBG

private static final int FDN

private static final int SDN

private static final java.lang.String STR_NUMBER

private static final java.lang.String STR_PIN2

private static final java.lang.String STR_TAG

private static final java.lang.String TAG

private static final android.content.UriMatcher URL_MATCHER

private boolean mSimulator
----------------METHODS----------------

static void <clinit>()

public void <init>()

private boolean addSimRecordToEf(
int
java.lang.String
java.lang.String
java.lang.String)

private boolean deleteSimRecordFromEf(
int
java.lang.String
java.lang.String
java.lang.String)
@dalvik.annotation.Signature (value =(I)Ljava/util/ArrayList<Ljava/util/ArrayList;>; )
private java.util.ArrayList loadFromEf(
int)
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/AdnRecord;Ljava/util/ArrayList<Ljava/util/ArrayList;>;)V )
private void loadRecord(
com.android.internal.telephony.gsm.AdnRecord
java.util.ArrayList)

private void log(
java.lang.String)

private java.lang.String normalizeValue(
java.lang.String)

private boolean updateSimRecordInEf(
int
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

public int delete(
android.net.Uri
java.lang.String
java.lang.String[])

public java.lang.String getType(
android.net.Uri)

public android.net.Uri insert(
android.net.Uri
android.content.ContentValues)

public boolean onCreate()

public android.database.Cursor query(
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)

public int update(
android.net.Uri
android.content.ContentValues
java.lang.String
java.lang.String[])

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/SimSmsInterfaceManager; )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class com.android.internal.telephony.gsm.SimSmsInterfaceManager$1 extends android.os.Handler

----------------FIELDS----------------

final com.android.internal.telephony.gsm.SimSmsInterfaceManager this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.SimSmsInterfaceManager)

public void handleMessage(
android.os.Message)

________________CLASS________________


public class com.android.internal.telephony.gsm.SimSmsInterfaceManager extends com.android.internal.telephony.gsm.ISms$Stub

----------------FIELDS----------------

static final boolean DBG

private static final int EVENT_LOAD_DONE

private static final int EVENT_UPDATE_DONE

static final java.lang.String LOG_TAG

 android.os.Handler mHandler

private final java.lang.Object mLock

private com.android.internal.telephony.gsm.GSMPhone mPhone
@dalvik.annotation.Signature (value =Ljava/util/List<Lcom/android/internal/telephony/gsm/SmsRawData;>; )
private java.util.List mSms

private boolean mSuccess
----------------METHODS----------------

public void <init>(
com.android.internal.telephony.gsm.GSMPhone)

static java.lang.Object access$000(
com.android.internal.telephony.gsm.SimSmsInterfaceManager)

static boolean access$102(
com.android.internal.telephony.gsm.SimSmsInterfaceManager
boolean)

static java.util.List access$200(
com.android.internal.telephony.gsm.SimSmsInterfaceManager)

static java.util.List access$202(
com.android.internal.telephony.gsm.SimSmsInterfaceManager
java.util.List)

static java.util.ArrayList access$300(
com.android.internal.telephony.gsm.SimSmsInterfaceManager
java.util.ArrayList)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<[B>;)Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/SmsRawData;>; )
private java.util.ArrayList buildValidRawData(
java.util.ArrayList)

private void enforceReceiveAndSend(
java.lang.String)

private void log(
java.lang.String)

private byte[] makeSmsRecordData(
int
byte[])

public boolean copyMessageToSimEf(
int
byte[]
byte[])
@dalvik.annotation.Signature (value =()Ljava/util/List<Lcom/android/internal/telephony/gsm/SmsRawData;>; )
public java.util.List getAllMessagesFromSimEf()
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/lang/String;Ljava/util/List<Ljava/lang/String;>;Ljava/util/List<Landroid/app/PendingIntent;>;Ljava/util/List<Landroid/app/PendingIntent;>;)V )
public void sendMultipartText(
java.lang.String
java.lang.String
java.util.List
java.util.List
java.util.List)

public void sendRawPdu(
byte[]
byte[]
android.app.PendingIntent
android.app.PendingIntent)

public boolean updateMessageOnSimEf(
int
int
byte[])

________________CLASS________________


public class com.android.internal.telephony.gsm.SimTlv extends java.lang.Object

----------------FIELDS----------------

 int curDataLength

 int curDataOffset

 int curOffset

 boolean hasValidTlvObject

 byte[] record

 int tlvLength

 int tlvOffset
----------------METHODS----------------

public void <init>(
byte[]
int
int)

private boolean parseCurrentTlvObject()

public byte[] getData()

public int getTag()

public boolean isValidObject()

public boolean nextObject()

________________CLASS________________


public class com.android.internal.telephony.gsm.SimUtils extends java.lang.Object

----------------FIELDS----------------

static final java.lang.String LOG_TAG
----------------METHODS----------------

public void <init>()

public static java.lang.String adnStringFieldToString(
byte[]
int
int)

public static int bcdByteToInt(
byte)

public static java.lang.String bcdToString(
byte[]
int
int)

private static int bitToRGB(
int)

public static java.lang.String bytesToHexString(
byte[])

private static int[] getCLUT(
byte[]
int
int)

static int hexCharToInt(
char)

public static byte[] hexStringToBytes(
java.lang.String)

private static int[] mapTo2OrderBitColor(
byte[]
int
int
int[]
int)

private static int[] mapToNon2OrderBitColor(
byte[]
int
int
int[]
int)

public static java.lang.String networkNameToString(
byte[]
int
int)

public static android.graphics.Bitmap parseToBnW(
byte[]
int)

public static android.graphics.Bitmap parseToRGB(
byte[]
int
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Element )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/SmsHeader; )
public class com.android.internal.telephony.gsm.SmsHeader$Element extends java.lang.Object

----------------FIELDS----------------

private byte[] m_data

private int m_id
----------------METHODS----------------

public void <init>(
int
byte[])

public byte[] getData()

public int getID()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/SmsHeader$Element; )
public class com.android.internal.telephony.gsm.SmsHeader extends java.lang.Object

----------------FIELDS----------------

public static final int APPLICATION_PORT_ADDRESSING_16_BIT

public static final int APPLICATION_PORT_ADDRESSING_8_BIT

public static final int CONCATENATED_16_BIT_REFERENCE

public static final int CONCATENATED_8_BIT_REFERENCE

public static final int PORT_WAP_PUSH

public static final int PORT_WAP_WSP

public static final int SPECIAL_SMS_MESSAGE_INDICATION

private byte[] m_data
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/SmsHeader$Element;>; )
private java.util.ArrayList m_elements
----------------METHODS----------------

public void <init>()

private int calcSize()

public static com.android.internal.telephony.gsm.SmsHeader parse(
byte[])

public void add(
com.android.internal.telephony.gsm.SmsHeader$Element)
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Lcom/android/internal/telephony/gsm/SmsHeader$Element;>; )
public java.util.ArrayList getElements()

public byte[] toByteArray()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Lcom/android/internal/telephony/gsm/SmsRawData;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/SmsRawData; )
final class com.android.internal.telephony.gsm.SmsRawData$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public com.android.internal.telephony.gsm.SmsRawData createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public com.android.internal.telephony.gsm.SmsRawData[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class com.android.internal.telephony.gsm.SmsRawData extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Lcom/android/internal/telephony/gsm/SmsRawData;>; )
public static final android.os.Parcelable$Creator CREATOR

 byte[] data
----------------METHODS----------------

static void <clinit>()

public void <init>(
byte[])

public int describeContents()

public byte[] getBytes()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


 class com.android.internal.telephony.gsm.SmsResponse extends java.lang.Object

----------------FIELDS----------------

 java.lang.String ackPdu

 int messageRef
----------------METHODS----------------

 void <init>(
int
java.lang.String)

________________CLASS________________


public class com.android.internal.telephony.gsm.SuppServiceNotification extends java.lang.Object

----------------FIELDS----------------

public static final int MO_CODE_CALL_DEFLECTED

public static final int MO_CODE_CALL_FORWARDED

public static final int MO_CODE_CALL_IS_WAITING

public static final int MO_CODE_CLIR_SUPPRESSION_REJECTED

public static final int MO_CODE_CUG_CALL

public static final int MO_CODE_INCOMING_CALLS_BARRED

public static final int MO_CODE_OUTGOING_CALLS_BARRED

public static final int MO_CODE_SOME_CF_ACTIVE

public static final int MO_CODE_UNCONDITIONAL_CF_ACTIVE

public static final int MT_CODE_ADDITIONAL_CALL_FORWARDED

public static final int MT_CODE_CALL_CONNECTED_ECT

public static final int MT_CODE_CALL_CONNECTING_ECT

public static final int MT_CODE_CALL_ON_HOLD

public static final int MT_CODE_CALL_RETRIEVED

public static final int MT_CODE_CUG_CALL

public static final int MT_CODE_DEFLECTED_CALL

public static final int MT_CODE_FORWARDED_CALL

public static final int MT_CODE_FORWARD_CHECK_RECEIVED

public static final int MT_CODE_MULTI_PARTY_CALL

public static final int MT_CODE_ON_HOLD_CALL_RELEASED

public int code

public int index

public int notificationType

public java.lang.String number

public int type
----------------METHODS----------------

public void <init>()

public java.lang.String toString()

________________CLASS________________


 class com.android.internal.telephony.gsm.VoiceMailConstants extends java.lang.Object

----------------FIELDS----------------

static final java.lang.String LOG_TAG

static final int NAME

static final int NUMBER

static final java.lang.String PARTNER_VOICEMAIL_PATH

static final int SIZE

static final int TAG
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;[Ljava/lang/String;>; )
private java.util.HashMap CarrierVmMap
----------------METHODS----------------

 void <init>()

private void loadVoiceMail()

 boolean containsCarrier(
java.lang.String)

 java.lang.String getCarrierName(
java.lang.String)

 java.lang.String getVoiceMailNumber(
java.lang.String)

 java.lang.String getVoiceMailTag(
java.lang.String)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/stk/AppInterface$State;>; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =State )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/stk/AppInterface; )
public final class com.android.internal.telephony.gsm.stk.AppInterface$State extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.stk.AppInterface$State[] $VALUES

public static final com.android.internal.telephony.gsm.stk.AppInterface$State CALL_SETUP

public static final com.android.internal.telephony.gsm.stk.AppInterface$State DISPLAY_TEXT

public static final com.android.internal.telephony.gsm.stk.AppInterface$State GET_INKEY

public static final com.android.internal.telephony.gsm.stk.AppInterface$State GET_INPUT

public static final com.android.internal.telephony.gsm.stk.AppInterface$State IDLE

public static final com.android.internal.telephony.gsm.stk.AppInterface$State LAUNCH_BROWSER

public static final com.android.internal.telephony.gsm.stk.AppInterface$State MAIN_MENU

public static final com.android.internal.telephony.gsm.stk.AppInterface$State PLAY_TONE

public static final com.android.internal.telephony.gsm.stk.AppInterface$State SELECT_ITEM
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.gsm.stk.AppInterface$State valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.stk.AppInterface$State[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/stk/AppInterface$State; )
public abstract interface class com.android.internal.telephony.gsm.stk.AppInterface extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void acceptOrRejectCall(
boolean)

public abstract boolean backwardMove()

public abstract com.android.internal.telephony.gsm.stk.Menu getCurrentMenu()

public abstract com.android.internal.telephony.gsm.stk.AppInterface$State getState()

public abstract void notifyBrowserTermination(
boolean)

public abstract void notifyDisplayTextEnded(
boolean)

public abstract void notifyIdleScreenAvailable()

public abstract void notifyInkey(
char
boolean)

public abstract void notifyInkey(
boolean
boolean)

public abstract void notifyInput(
java.lang.String
boolean)

public abstract void notifyLanguageSelection(
java.lang.String)

public abstract void notifyLaunchBrowser(
boolean)

public abstract void notifyMenuSelection(
int
boolean)

public abstract void notifyNoResponse()

public abstract void notifySelectedItem(
int
boolean)

public abstract void notifyToneEnded()

public abstract void notifyUserActivity()

public abstract void setCommandListener(
com.android.internal.telephony.gsm.stk.CommandListener)

public abstract boolean terminateSession()

________________CLASS________________


 class com.android.internal.telephony.gsm.stk.BerTlv extends java.lang.Object

----------------FIELDS----------------

public static final int BER_EVENT_DOWNLOAD_TAG

public static final int BER_MENU_SELECTION_TAG

public static final int BER_PROACTIVE_COMMAND_TAG

public static final int BER_UNKNOWN_TAG
@dalvik.annotation.Signature (value =Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>; )
private java.util.List mCompTlvs

private int mTag
----------------METHODS----------------
@dalvik.annotation.Signature (value =(ILjava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)V )
private void <init>(
int
java.util.List)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
public static com.android.internal.telephony.gsm.stk.BerTlv decode(
byte[])
@dalvik.annotation.Signature (value =()Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>; )
public java.util.List getComprehensionTlvs()

public int getTag()

________________CLASS________________


public abstract interface class com.android.internal.telephony.gsm.stk.CommandListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/TextAttribute;>;Ljava/lang/String;)V )
public abstract void onCallSetup(
java.lang.String
java.util.List
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/TextAttribute;>;ZZZ)V )
public abstract void onDisplayText(
java.lang.String
java.util.List
boolean
boolean
boolean)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/TextAttribute;>;ZZZZZ)V )
public abstract void onGetInkey(
java.lang.String
java.util.List
boolean
boolean
boolean
boolean
boolean)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/lang/String;IIZLjava/util/List<Lcom/android/internal/telephony/gsm/stk/TextAttribute;>;ZZZZ)V )
public abstract void onGetInput(
java.lang.String
java.lang.String
int
int
boolean
java.util.List
boolean
boolean
boolean
boolean)
@dalvik.annotation.Signature (value =(Ljava/lang/String;Ljava/lang/String;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/TextAttribute;>;Lcom/android/internal/telephony/gsm/stk/LaunchBrowserMode;)V )
public abstract void onLaunchBrowser(
java.lang.String
java.lang.String
java.util.List
com.android.internal.telephony.gsm.stk.LaunchBrowserMode)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/stk/Tone;Ljava/lang/String;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/TextAttribute;>;Lcom/android/internal/telephony/gsm/stk/Duration;)V )
public abstract void onPlayTone(
com.android.internal.telephony.gsm.stk.Tone
java.lang.String
java.util.List
com.android.internal.telephony.gsm.stk.Duration)

public abstract void onSelectItem(
com.android.internal.telephony.gsm.stk.Menu
com.android.internal.telephony.gsm.stk.PresentationType)

public abstract void onSessionEnd()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
public abstract void onSetUpEventList(
java.util.BitSet)

public abstract void onSetUpMenu(
com.android.internal.telephony.gsm.stk.Menu)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/stk/CommandType;>; )
final class com.android.internal.telephony.gsm.stk.CommandType extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.stk.CommandType[] $VALUES

public static final com.android.internal.telephony.gsm.stk.CommandType DISPLAY_TEXT

public static final com.android.internal.telephony.gsm.stk.CommandType GET_INKEY

public static final com.android.internal.telephony.gsm.stk.CommandType GET_INPUT

public static final com.android.internal.telephony.gsm.stk.CommandType LAUNCH_BROWSER

public static final com.android.internal.telephony.gsm.stk.CommandType PLAY_TONE

public static final com.android.internal.telephony.gsm.stk.CommandType REFRESH

public static final com.android.internal.telephony.gsm.stk.CommandType SELECT_ITEM

public static final com.android.internal.telephony.gsm.stk.CommandType SEND_DTMF

public static final com.android.internal.telephony.gsm.stk.CommandType SEND_SMS

public static final com.android.internal.telephony.gsm.stk.CommandType SEND_SS

public static final com.android.internal.telephony.gsm.stk.CommandType SEND_USSD

public static final com.android.internal.telephony.gsm.stk.CommandType SET_UP_CALL

public static final com.android.internal.telephony.gsm.stk.CommandType SET_UP_EVENT_LIST

public static final com.android.internal.telephony.gsm.stk.CommandType SET_UP_IDLE_MODE_TEXT

public static final com.android.internal.telephony.gsm.stk.CommandType SET_UP_MENU

private int mValue
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static com.android.internal.telephony.gsm.stk.CommandType fromInt(
int)

public static com.android.internal.telephony.gsm.stk.CommandType valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.stk.CommandType[] values()

________________CLASS________________


 class com.android.internal.telephony.gsm.stk.ComprehensionTlv extends java.lang.Object

----------------FIELDS----------------

private boolean mCr

private int mLength

private byte[] mRawValue

private int mTag

private int mValueIndex
----------------METHODS----------------

private void <init>(
int
boolean
int
byte[]
int)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
public static com.android.internal.telephony.gsm.stk.ComprehensionTlv decode(
byte[]
int)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
@dalvik.annotation.Signature (value =([BI)Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>; )
public static java.util.List decodeMany(
byte[]
int)

public int getLength()

public byte[] getRawValue()

public int getTag()

public int getValueIndex()

public boolean isComprehensionRequired()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlvTag;>; )
final class com.android.internal.telephony.gsm.stk.ComprehensionTlvTag extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag[] $VALUES

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag ALPHA_ID

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag BROWSER_TERMINATION_CAUSE

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag COMMAND_DETAILS

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag DEFAULT_TEXT

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag DEVICE_IDENTITIES

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag DURATION

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag EVENT_LIST

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag FILE_LIST

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag HELP_REQUEST

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag ICON_ID

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag IMMEDIATE_RESPONSE

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag ITEM

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag ITEM_ICON_ID_LIST

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag ITEM_ID

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag LANGUAGE

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag RESPONSE_LENGTH

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag RESULT

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag TEXT_ATTRIBUTE

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag TEXT_STRING

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag TONE

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag URL

public static final com.android.internal.telephony.gsm.stk.ComprehensionTlvTag USSD_STRING

private int mValue
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static com.android.internal.telephony.gsm.stk.ComprehensionTlvTag valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.stk.ComprehensionTlvTag[] values()

public int value()

________________CLASS________________


public class com.android.internal.telephony.gsm.stk.CtlvCommandDetails extends java.lang.Object

----------------FIELDS----------------

public int commandNumber

public int commandQualifier

public boolean compRequired

public int typeOfCommand
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/stk/Duration; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =TimeUnit )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/stk/Duration$TimeUnit;>; )
public final class com.android.internal.telephony.gsm.stk.Duration$TimeUnit extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.stk.Duration$TimeUnit[] $VALUES

public static final com.android.internal.telephony.gsm.stk.Duration$TimeUnit MINUTE

public static final com.android.internal.telephony.gsm.stk.Duration$TimeUnit SECOND

public static final com.android.internal.telephony.gsm.stk.Duration$TimeUnit TENTH_SECOND

private int mValue
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static com.android.internal.telephony.gsm.stk.Duration$TimeUnit valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.stk.Duration$TimeUnit[] values()

public int value()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/stk/Duration$TimeUnit; )
public class com.android.internal.telephony.gsm.stk.Duration extends java.lang.Object

----------------FIELDS----------------

public int timeInterval

public com.android.internal.telephony.gsm.stk.Duration$TimeUnit timeUnit
----------------METHODS----------------

public void <init>(
int
com.android.internal.telephony.gsm.stk.Duration$TimeUnit)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/stk/FontSize;>; )
public final class com.android.internal.telephony.gsm.stk.FontSize extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.stk.FontSize[] $VALUES

public static final com.android.internal.telephony.gsm.stk.FontSize LARGE

public static final com.android.internal.telephony.gsm.stk.FontSize NORMAL

public static final com.android.internal.telephony.gsm.stk.FontSize SMALL

private int mValue
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static com.android.internal.telephony.gsm.stk.FontSize fromInt(
int)

public static com.android.internal.telephony.gsm.stk.FontSize valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.stk.FontSize[] values()

________________CLASS________________


 class com.android.internal.telephony.gsm.stk.ImageDescriptor extends java.lang.Object

----------------FIELDS----------------

static final int CODING_SCHEME_BASIC

static final int CODING_SCHEME_COLOUR

private static final java.lang.String TAG

 int codingScheme

 int height

 int imageId

 int length

 int offset

 int width
----------------METHODS----------------

 void <init>()

static com.android.internal.telephony.gsm.stk.ImageDescriptor parse(
byte[]
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/stk/Item; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Lcom/android/internal/telephony/gsm/stk/Item;>; )
final class com.android.internal.telephony.gsm.stk.Item$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public com.android.internal.telephony.gsm.stk.Item createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public com.android.internal.telephony.gsm.stk.Item[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class com.android.internal.telephony.gsm.stk.Item extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Lcom/android/internal/telephony/gsm/stk/Item;>; )
public static final android.os.Parcelable$Creator CREATOR

public android.graphics.Bitmap icon

public int id

public java.lang.String text
----------------METHODS----------------

static void <clinit>()

public void <init>(
int
java.lang.String)

public void <init>(
android.os.Parcel)

public int describeContents()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/stk/LaunchBrowserMode;>; )
public final class com.android.internal.telephony.gsm.stk.LaunchBrowserMode extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.stk.LaunchBrowserMode[] $VALUES

public static final com.android.internal.telephony.gsm.stk.LaunchBrowserMode LAUNCH_IF_NOT_ALREADY_LAUNCHED

public static final com.android.internal.telephony.gsm.stk.LaunchBrowserMode LAUNCH_NEW_BROWSER

public static final com.android.internal.telephony.gsm.stk.LaunchBrowserMode USE_EXISTING_BROWSER
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.gsm.stk.LaunchBrowserMode valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.stk.LaunchBrowserMode[] values()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/stk/Menu; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Lcom/android/internal/telephony/gsm/stk/Menu;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class com.android.internal.telephony.gsm.stk.Menu$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public com.android.internal.telephony.gsm.stk.Menu createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public com.android.internal.telephony.gsm.stk.Menu[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class com.android.internal.telephony.gsm.stk.Menu extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Lcom/android/internal/telephony/gsm/stk/Menu;>; )
public static final android.os.Parcelable$Creator CREATOR

public int defaultItem

public boolean helpAvailable
@dalvik.annotation.Signature (value =Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/Item;>; )
public java.util.List items

public boolean itemsIconSelfExplanatory

public boolean softKeyPreferred

public java.lang.String title
@dalvik.annotation.Signature (value =Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/TextAttribute;>; )
public java.util.List titleAttrs

public android.graphics.Bitmap titleIcon

public boolean titleIconSelfExplanatory
----------------METHODS----------------

static void <clinit>()

public void <init>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
com.android.internal.telephony.gsm.stk.Menu$1)
@dalvik.annotation.Signature (value =(Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/Item;>;Ljava/lang/String;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/TextAttribute;>;ZZI)V )
public void <init>(
java.util.List
java.lang.String
java.util.List
boolean
boolean
int)

public int describeContents()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/stk/PresentationType;>; )
public final class com.android.internal.telephony.gsm.stk.PresentationType extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.stk.PresentationType[] $VALUES

public static final com.android.internal.telephony.gsm.stk.PresentationType DATA_VALUES

public static final com.android.internal.telephony.gsm.stk.PresentationType NAVIGATION_OPTIONS

public static final com.android.internal.telephony.gsm.stk.PresentationType NOT_SPECIFIED
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.gsm.stk.PresentationType valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.stk.PresentationType[] values()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/stk/ResultCode;>; )
public final class com.android.internal.telephony.gsm.stk.ResultCode extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.stk.ResultCode[] $VALUES

public static final com.android.internal.telephony.gsm.stk.ResultCode ACCESS_TECH_UNABLE_TO_PROCESS

public static final com.android.internal.telephony.gsm.stk.ResultCode BACKWARD_MOVE_BY_USER

public static final com.android.internal.telephony.gsm.stk.ResultCode BEYOND_TERMINAL_CAPABILITY

public static final com.android.internal.telephony.gsm.stk.ResultCode BIP_ERROR

public static final com.android.internal.telephony.gsm.stk.ResultCode CMD_DATA_NOT_UNDERSTOOD

public static final com.android.internal.telephony.gsm.stk.ResultCode CMD_NUM_NOT_KNOWN

public static final com.android.internal.telephony.gsm.stk.ResultCode CMD_TYPE_NOT_UNDERSTOOD

public static final com.android.internal.telephony.gsm.stk.ResultCode CONTRADICTION_WITH_TIMER

public static final com.android.internal.telephony.gsm.stk.ResultCode FRAMES_ERROR

public static final com.android.internal.telephony.gsm.stk.ResultCode HELP_INFO_REQUIRED

public static final com.android.internal.telephony.gsm.stk.ResultCode LAUNCH_BROWSER_ERROR

public static final com.android.internal.telephony.gsm.stk.ResultCode MMS_ERROR

public static final com.android.internal.telephony.gsm.stk.ResultCode MMS_TEMPORARY

public static final com.android.internal.telephony.gsm.stk.ResultCode MULTI_CARDS_CMD_ERROR

public static final com.android.internal.telephony.gsm.stk.ResultCode NAA_CALL_CONTROL_TEMPORARY

public static final com.android.internal.telephony.gsm.stk.ResultCode NETWORK_CRNTLY_UNABLE_TO_PROCESS

public static final com.android.internal.telephony.gsm.stk.ResultCode NO_RESPONSE_FROM_USER

public static final com.android.internal.telephony.gsm.stk.ResultCode OK

public static final com.android.internal.telephony.gsm.stk.ResultCode PRFRMD_ICON_NOT_DISPLAYED

public static final com.android.internal.telephony.gsm.stk.ResultCode PRFRMD_LIMITED_SERVICE

public static final com.android.internal.telephony.gsm.stk.ResultCode PRFRMD_MODIFIED_BY_NAA

public static final com.android.internal.telephony.gsm.stk.ResultCode PRFRMD_NAA_NOT_ACTIVE

public static final com.android.internal.telephony.gsm.stk.ResultCode PRFRMD_TONE_NOT_PLAYED

public static final com.android.internal.telephony.gsm.stk.ResultCode PRFRMD_WITH_ADDITIONAL_EFS_READ

public static final com.android.internal.telephony.gsm.stk.ResultCode PRFRMD_WITH_MISSING_INFO

public static final com.android.internal.telephony.gsm.stk.ResultCode PRFRMD_WITH_MODIFICATION

public static final com.android.internal.telephony.gsm.stk.ResultCode PRFRMD_WITH_PARTIAL_COMPREHENSION

public static final com.android.internal.telephony.gsm.stk.ResultCode REQUIRED_VALUES_MISSING

public static final com.android.internal.telephony.gsm.stk.ResultCode SMS_RP_ERROR

public static final com.android.internal.telephony.gsm.stk.ResultCode SS_RETURN_ERROR

public static final com.android.internal.telephony.gsm.stk.ResultCode TERMINAL_CRNTLY_UNABLE_TO_PROCESS

public static final com.android.internal.telephony.gsm.stk.ResultCode UICC_SESSION_TERM_BY_USER

public static final com.android.internal.telephony.gsm.stk.ResultCode USER_CLEAR_DOWN_CALL

public static final com.android.internal.telephony.gsm.stk.ResultCode USER_NOT_ACCEPT

public static final com.android.internal.telephony.gsm.stk.ResultCode USIM_CALL_CONTROL_PERMANENT

public static final com.android.internal.telephony.gsm.stk.ResultCode USSD_RETURN_ERROR

public static final com.android.internal.telephony.gsm.stk.ResultCode USSD_SS_SESSION_TERM_BY_USER

private int mCode
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static com.android.internal.telephony.gsm.stk.ResultCode valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.stk.ResultCode[] values()

public int code()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class com.android.internal.telephony.gsm.stk.ResultException$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$com$android$internal$telephony$gsm$stk$ResultCode
----------------METHODS----------------

static void <clinit>()

________________CLASS________________


 class com.android.internal.telephony.gsm.stk.StkException extends android.util.AndroidException

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/stk/ResultException$1; )
public class com.android.internal.telephony.gsm.stk.ResultException extends com.android.internal.telephony.gsm.stk.StkException

----------------FIELDS----------------

private int mAdditionalInfo

private com.android.internal.telephony.gsm.stk.ResultCode mResult
----------------METHODS----------------

public void <init>(
com.android.internal.telephony.gsm.stk.ResultCode)

public void <init>(
com.android.internal.telephony.gsm.stk.ResultCode
int)

public int additionalInfo()

public boolean hasAdditionalInfo()

public com.android.internal.telephony.gsm.stk.ResultCode result()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/stk/Service; )
 class com.android.internal.telephony.gsm.stk.Service$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$com$android$internal$telephony$gsm$stk$AppInterface$State

static final int[] $SwitchMap$com$android$internal$telephony$gsm$stk$CommandType
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =CtlvDeviceIdentities )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/stk/Service; )
 class com.android.internal.telephony.gsm.stk.Service$CtlvDeviceIdentities extends java.lang.Object

----------------FIELDS----------------

public int destinationId

public int sourceId

final com.android.internal.telephony.gsm.stk.Service this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.stk.Service)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =RequestData )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/stk/Service; )
 class com.android.internal.telephony.gsm.stk.Service$RequestData extends java.lang.Object

----------------FIELDS----------------

public com.android.internal.telephony.gsm.stk.CtlvCommandDetails cmdDet

final com.android.internal.telephony.gsm.stk.Service this$0
----------------METHODS----------------

public void <init>(
com.android.internal.telephony.gsm.stk.Service
com.android.internal.telephony.gsm.stk.CtlvCommandDetails)

 boolean loadNextIcon()

 void setIcon(
byte[])

 void setIconImg(
com.android.internal.telephony.gsm.stk.ImageDescriptor)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =GetInkeyData )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/stk/Service; )
 class com.android.internal.telephony.gsm.stk.Service$GetInkeyData extends com.android.internal.telephony.gsm.stk.Service$RequestData

----------------FIELDS----------------

public boolean isUcs2

public boolean isYesNo

final com.android.internal.telephony.gsm.stk.Service this$0
----------------METHODS----------------

public void <init>(
com.android.internal.telephony.gsm.stk.Service
com.android.internal.telephony.gsm.stk.CtlvCommandDetails
boolean
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/stk/Service; )
@dalvik.annotation.InnerClass (accessFlags =1024 name =ResponseData )
abstract class com.android.internal.telephony.gsm.stk.Service$ResponseData extends java.lang.Object

----------------FIELDS----------------

final com.android.internal.telephony.gsm.stk.Service this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.stk.Service)

public abstract void format(
java.io.ByteArrayOutputStream)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =GetInkeyInputResponseData )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/stk/Service; )
 class com.android.internal.telephony.gsm.stk.Service$GetInkeyInputResponseData extends com.android.internal.telephony.gsm.stk.Service$ResponseData

----------------FIELDS----------------

public java.lang.String mInData

private boolean mIsPacked

private boolean mIsUcs2

private boolean mIsYesNo

private boolean mYesNoResponse

final com.android.internal.telephony.gsm.stk.Service this$0
----------------METHODS----------------

public void <init>(
com.android.internal.telephony.gsm.stk.Service
java.lang.String
boolean
boolean)

public void <init>(
com.android.internal.telephony.gsm.stk.Service
boolean)

public void format(
java.io.ByteArrayOutputStream)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =GetInputData )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/stk/Service; )
 class com.android.internal.telephony.gsm.stk.Service$GetInputData extends com.android.internal.telephony.gsm.stk.Service$RequestData

----------------FIELDS----------------

public boolean isPacked

public boolean isUcs2

final com.android.internal.telephony.gsm.stk.Service this$0
----------------METHODS----------------

public void <init>(
com.android.internal.telephony.gsm.stk.Service
com.android.internal.telephony.gsm.stk.CtlvCommandDetails
boolean
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/stk/Service; )
@dalvik.annotation.InnerClass (accessFlags =0 name =IconId )
 class com.android.internal.telephony.gsm.stk.Service$IconId extends java.lang.Object

----------------FIELDS----------------

 int recordNumber

 boolean selfExplanatory

final com.android.internal.telephony.gsm.stk.Service this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.stk.Service)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/stk/Service; )
@dalvik.annotation.InnerClass (accessFlags =0 name =ItemsIconId )
 class com.android.internal.telephony.gsm.stk.Service$ItemsIconId extends java.lang.Object

----------------FIELDS----------------

 int[] recordNumbers

 boolean selfExplanatory

final com.android.internal.telephony.gsm.stk.Service this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.gsm.stk.Service)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =SelectItemData )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/stk/Service; )
 class com.android.internal.telephony.gsm.stk.Service$SelectItemData extends com.android.internal.telephony.gsm.stk.Service$RequestData

----------------FIELDS----------------

private static final int LOAD_ICON_DONE

private static final int LOAD_ICON_ITEM

private static final int LOAD_ICON_OFF

private static final int LOAD_ICON_TITLE

private static final int NO_ICON_TO_LOAD

private com.android.internal.telephony.gsm.stk.ImageDescriptor currentImgDes

private int currentItemsIconLoaded

private int iconLoadState

 com.android.internal.telephony.gsm.stk.Service$ItemsIconId mItemsIconId

 com.android.internal.telephony.gsm.stk.Menu mMenu

 com.android.internal.telephony.gsm.stk.PresentationType mPresentationType

 com.android.internal.telephony.gsm.stk.Service$IconId mTitleIconId

final com.android.internal.telephony.gsm.stk.Service this$0
----------------METHODS----------------

public void <init>(
com.android.internal.telephony.gsm.stk.Service
com.android.internal.telephony.gsm.stk.CtlvCommandDetails
com.android.internal.telephony.gsm.stk.Menu
com.android.internal.telephony.gsm.stk.PresentationType
com.android.internal.telephony.gsm.stk.Service$IconId
com.android.internal.telephony.gsm.stk.Service$ItemsIconId)

private int getNextRecordNumber()

 boolean loadNextIcon()

 void setIcon(
byte[])

 void setIconImg(
com.android.internal.telephony.gsm.stk.ImageDescriptor)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =SelectItemResponseData )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/gsm/stk/Service; )
 class com.android.internal.telephony.gsm.stk.Service$SelectItemResponseData extends com.android.internal.telephony.gsm.stk.Service$ResponseData

----------------FIELDS----------------

private int id

final com.android.internal.telephony.gsm.stk.Service this$0
----------------METHODS----------------

public void <init>(
com.android.internal.telephony.gsm.stk.Service
int)

public void format(
java.io.ByteArrayOutputStream)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/gsm/stk/Service$1;Lcom/android/internal/telephony/gsm/stk/Service$SelectItemResponseData;Lcom/android/internal/telephony/gsm/stk/Service$GetInkeyInputResponseData;Lcom/android/internal/telephony/gsm/stk/Service$ResponseData;Lcom/android/internal/telephony/gsm/stk/Service$CtlvDeviceIdentities;Lcom/android/internal/telephony/gsm/stk/Service$SelectItemData;Lcom/android/internal/telephony/gsm/stk/Service$GetInputData;Lcom/android/internal/telephony/gsm/stk/Service$GetInkeyData;Lcom/android/internal/telephony/gsm/stk/Service$RequestData;Lcom/android/internal/telephony/gsm/stk/Service$ItemsIconId;Lcom/android/internal/telephony/gsm/stk/Service$IconId; )
public class com.android.internal.telephony.gsm.stk.Service extends android.os.Handler implements com.android.internal.telephony.gsm.stk.AppInterface

----------------FIELDS----------------

static final boolean $assertionsDisabled

private static java.lang.String APP_FULL_NAME

static final int APP_INDICATOR_INSTALLED_NORMAL

static final int APP_INDICATOR_INSTALLED_SPECIAL

private static final int APP_INDICATOR_LAUNCHED

static final int APP_INDICATOR_PRE_BOOT

static final int APP_INDICATOR_UNINSTALLED

private static final int APP_INSTALL_INDICATOR

private static java.lang.String APP_PACKAGE_NAME

private static final int DEV_ID_DISPLAY

private static final int DEV_ID_EARPIECE

private static final int DEV_ID_KEYPAD

private static final int DEV_ID_NETWORK

private static final int DEV_ID_TERMINAL

private static final int DEV_ID_UICC

private static final int EVENT_CALL_SETUP

private static final int EVENT_EVENT_NOTIFY

private static final int EVENT_PROACTIVE_COMMAND

private static final int EVENT_READ_EF_IMG_RECOED_DONE

private static final int EVENT_READ_ICON_DONE

private static final int EVENT_SESSION_END

private static final int EVENT_SIM_ABSENT

private static final int EVENT_SIM_LOADED

private static final byte GET_INKEY_NO

private static final byte GET_INKEY_YES

static final int STK_NOTIFICATION_ID

private static final java.lang.String TAG

public static final int UICC_EVENT_ACCESS_TECH_CHANGE

public static final int UICC_EVENT_BROWSER_TERMINATION

public static final int UICC_EVENT_BROWSING_STATUS

public static final int UICC_EVENT_CALL_CONNECTED

public static final int UICC_EVENT_CALL_DISCONNECTED

public static final int UICC_EVENT_CARD_READER_STATUS

public static final int UICC_EVENT_CHANNEL_STATUS

public static final int UICC_EVENT_DATA_AVAILABLE

public static final int UICC_EVENT_DISPLAY_PARAMS_CHANGE

public static final int UICC_EVENT_FRAMES_INFO_CHANGE

public static final int UICC_EVENT_IDLE_SCREEN_AVAILABLE

public static final int UICC_EVENT_I_WLAN_ACESS_STATUS

public static final int UICC_EVENT_LANGUAGE_SELECTION

public static final int UICC_EVENT_LOCAL_CONNECTION

public static final int UICC_EVENT_LOCATION_STATUS

public static final int UICC_EVENT_MT_CALL

public static final int UICC_EVENT_NETWORK_SEARCH_MODE_CHANGE

public static final int UICC_EVENT_USER_ACTIVITY

private static com.android.internal.telephony.gsm.stk.Service sInstance

private int mAppIndicator

private com.android.internal.telephony.gsm.CommandsInterface mCmdIf

private com.android.internal.telephony.gsm.stk.CommandListener mCmdListener

private java.lang.Object mCmdListenerLock

private android.content.Context mContext

private com.android.internal.telephony.gsm.stk.Service$RequestData mCurrentRequest

private int mInstallIndicator

private com.android.internal.telephony.gsm.stk.Menu mMainMenu

private com.android.internal.telephony.gsm.stk.Service$RequestData mNextRequest

private android.app.NotificationManager mNm

private java.lang.String mServiceName

private com.android.internal.telephony.gsm.GsmSimCard mSimCard

private com.android.internal.telephony.gsm.SIMFileHandler mSimFH

private com.android.internal.telephony.gsm.SIMRecords mSimRecords

private com.android.internal.telephony.gsm.stk.AppInterface$State mState
----------------METHODS----------------

static void <clinit>()

private void <init>(
com.android.internal.telephony.gsm.CommandsInterface
com.android.internal.telephony.gsm.SIMRecords
android.content.Context
com.android.internal.telephony.gsm.SIMFileHandler
com.android.internal.telephony.gsm.GsmSimCard)

static com.android.internal.telephony.gsm.SIMFileHandler access$000(
com.android.internal.telephony.gsm.stk.Service)

private void eventDownload(
int
int
int
byte[]
boolean)

private com.android.internal.telephony.gsm.stk.CtlvCommandDetails getCurrentCmdDet()

public static com.android.internal.telephony.gsm.stk.Service getInstance()

public static com.android.internal.telephony.gsm.stk.Service getInstance(
com.android.internal.telephony.gsm.CommandsInterface
com.android.internal.telephony.gsm.SIMRecords
android.content.Context
com.android.internal.telephony.gsm.SIMFileHandler
com.android.internal.telephony.gsm.GsmSimCard)

private void handleEventNotify(
java.lang.String)

private void handleIconData(
byte[])

private void handleImageDescriptor(
byte[])

private void handleProactiveCommand(
java.lang.String)

private void handleSessionEnd(
java.lang.Object)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
private int[] parseFileList(
com.android.internal.telephony.gsm.stk.ComprehensionTlv)
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/stk/CtlvCommandDetails;Lcom/android/internal/telephony/gsm/stk/Service$CtlvDeviceIdentities;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)Z )
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
private boolean processDisplayText(
com.android.internal.telephony.gsm.stk.CtlvCommandDetails
com.android.internal.telephony.gsm.stk.Service$CtlvDeviceIdentities
java.util.List)
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/stk/CtlvCommandDetails;Lcom/android/internal/telephony/gsm/stk/Service$CtlvDeviceIdentities;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)V )
private void processEventNotify(
com.android.internal.telephony.gsm.stk.CtlvCommandDetails
com.android.internal.telephony.gsm.stk.Service$CtlvDeviceIdentities
java.util.List)
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/stk/CtlvCommandDetails;Lcom/android/internal/telephony/gsm/stk/Service$CtlvDeviceIdentities;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)Z )
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
private boolean processGetInkey(
com.android.internal.telephony.gsm.stk.CtlvCommandDetails
com.android.internal.telephony.gsm.stk.Service$CtlvDeviceIdentities
java.util.List)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/stk/CtlvCommandDetails;Lcom/android/internal/telephony/gsm/stk/Service$CtlvDeviceIdentities;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)Z )
private boolean processGetInput(
com.android.internal.telephony.gsm.stk.CtlvCommandDetails
com.android.internal.telephony.gsm.stk.Service$CtlvDeviceIdentities
java.util.List)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/stk/CtlvCommandDetails;Lcom/android/internal/telephony/gsm/stk/Service$CtlvDeviceIdentities;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)Z )
private boolean processLaunchBrowser(
com.android.internal.telephony.gsm.stk.CtlvCommandDetails
com.android.internal.telephony.gsm.stk.Service$CtlvDeviceIdentities
java.util.List)
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/stk/CtlvCommandDetails;Lcom/android/internal/telephony/gsm/stk/Service$CtlvDeviceIdentities;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)Z )
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
private boolean processPlayTone(
com.android.internal.telephony.gsm.stk.CtlvCommandDetails
com.android.internal.telephony.gsm.stk.Service$CtlvDeviceIdentities
java.util.List)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/stk/CtlvCommandDetails;Lcom/android/internal/telephony/gsm/stk/Service$CtlvDeviceIdentities;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)Z )
private boolean processRefresh(
com.android.internal.telephony.gsm.stk.CtlvCommandDetails
com.android.internal.telephony.gsm.stk.Service$CtlvDeviceIdentities
java.util.List)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
private boolean processSelectItem()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/stk/CtlvCommandDetails;Lcom/android/internal/telephony/gsm/stk/Service$CtlvDeviceIdentities;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)Z )
private boolean processSelectItem(
com.android.internal.telephony.gsm.stk.CtlvCommandDetails
com.android.internal.telephony.gsm.stk.Service$CtlvDeviceIdentities
java.util.List)
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/stk/CtlvCommandDetails;Lcom/android/internal/telephony/gsm/stk/Service$CtlvDeviceIdentities;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)V )
private void processSetUpEventList(
com.android.internal.telephony.gsm.stk.CtlvCommandDetails
com.android.internal.telephony.gsm.stk.Service$CtlvDeviceIdentities
java.util.List)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/stk/CtlvCommandDetails;Lcom/android/internal/telephony/gsm/stk/Service$CtlvDeviceIdentities;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)Z )
private boolean processSetUpIdleModeText(
com.android.internal.telephony.gsm.stk.CtlvCommandDetails
com.android.internal.telephony.gsm.stk.Service$CtlvDeviceIdentities
java.util.List)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/stk/CtlvCommandDetails;Lcom/android/internal/telephony/gsm/stk/Service$CtlvDeviceIdentities;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)Z )
private boolean processSetUpMenu(
com.android.internal.telephony.gsm.stk.CtlvCommandDetails
com.android.internal.telephony.gsm.stk.Service$CtlvDeviceIdentities
java.util.List)
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/stk/CtlvCommandDetails;Lcom/android/internal/telephony/gsm/stk/Service$CtlvDeviceIdentities;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)V )
private void processSetupCall(
com.android.internal.telephony.gsm.stk.CtlvCommandDetails
com.android.internal.telephony.gsm.stk.Service$CtlvDeviceIdentities
java.util.List)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
private java.lang.String retrieveAlphaId(
com.android.internal.telephony.gsm.stk.ComprehensionTlv)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
@dalvik.annotation.Signature (value =(Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)Lcom/android/internal/telephony/gsm/stk/CtlvCommandDetails; )
private com.android.internal.telephony.gsm.stk.CtlvCommandDetails retrieveCommandDetails(
java.util.List)
@dalvik.annotation.Signature (value =(Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)Lcom/android/internal/telephony/gsm/stk/Service$CtlvDeviceIdentities; )
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
private com.android.internal.telephony.gsm.stk.Service$CtlvDeviceIdentities retrieveDeviceIdentities(
java.util.List)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
private com.android.internal.telephony.gsm.stk.Duration retrieveDuration(
com.android.internal.telephony.gsm.stk.ComprehensionTlv)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
private com.android.internal.telephony.gsm.stk.Service$IconId retrieveIconId(
com.android.internal.telephony.gsm.stk.ComprehensionTlv)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
private com.android.internal.telephony.gsm.stk.Item retrieveItem(
com.android.internal.telephony.gsm.stk.ComprehensionTlv)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
private int retrieveItemId(
com.android.internal.telephony.gsm.stk.ComprehensionTlv)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
private com.android.internal.telephony.gsm.stk.Service$ItemsIconId retrieveItemsIconId(
com.android.internal.telephony.gsm.stk.ComprehensionTlv)
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;)Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/TextAttribute;>; )
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
private java.util.List retrieveTextAttribute(
com.android.internal.telephony.gsm.stk.ComprehensionTlv)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/gsm/stk/ResultException; )
private java.lang.String retrieveTextString(
com.android.internal.telephony.gsm.stk.ComprehensionTlv)
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/stk/ComprehensionTlvTag;Ljava/util/Iterator<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv; )
private com.android.internal.telephony.gsm.stk.ComprehensionTlv searchForNextTag(
com.android.internal.telephony.gsm.stk.ComprehensionTlvTag
java.util.Iterator)
@dalvik.annotation.Signature (value =(Lcom/android/internal/telephony/gsm/stk/ComprehensionTlvTag;Ljava/util/List<Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv;>;)Lcom/android/internal/telephony/gsm/stk/ComprehensionTlv; )
private com.android.internal.telephony.gsm.stk.ComprehensionTlv searchForTag(
com.android.internal.telephony.gsm.stk.ComprehensionTlvTag
java.util.List)

private void sendTerminalResponse(
com.android.internal.telephony.gsm.stk.CtlvCommandDetails
com.android.internal.telephony.gsm.stk.ResultCode
boolean
int
com.android.internal.telephony.gsm.stk.Service$ResponseData)

private void setAppState(
boolean)

public void acceptOrRejectCall(
boolean)

public boolean backwardMove()

public int getAppIndication()

public com.android.internal.telephony.gsm.stk.Menu getCurrentMenu()

public java.lang.String getServiceName()

public com.android.internal.telephony.gsm.stk.AppInterface$State getState()

public void handleMessage(
android.os.Message)

public boolean isStkSupported()

public void notifyBrowserTermination(
boolean)

public void notifyDisplayTextEnded(
boolean)

public void notifyIdleScreenAvailable()

public void notifyInkey(
char
boolean)

public void notifyInkey(
boolean
boolean)

public void notifyInput(
java.lang.String
boolean)

public void notifyLanguageSelection(
java.lang.String)

public void notifyLaunchBrowser(
boolean)

public void notifyMenuSelection(
int
boolean)

public void notifyNoResponse()

public void notifySelectedItem(
int
boolean)

public void notifyToneEnded()

public void notifyUserActivity()

 void setAppIndication(
int)

public void setCommandListener(
com.android.internal.telephony.gsm.stk.CommandListener)

public boolean terminateSession()

________________CLASS________________


public class com.android.internal.telephony.gsm.stk.StkAppInstaller extends java.lang.Object

----------------FIELDS----------------

static final java.lang.String STK_APP_INSTALL_ACTION

static final java.lang.String STK_APP_UNINSTALL_ACTION
----------------METHODS----------------

public void <init>()

public static void installApp(
android.content.Context)

private static void setAppState(
android.content.Context
int)

public static void unInstallApp(
android.content.Context)

________________CLASS________________


public class com.android.internal.telephony.gsm.stk.StkAppStateReceiver extends android.content.BroadcastReceiver

----------------FIELDS----------------

private static final java.lang.String TAG
----------------METHODS----------------

public void <init>()

public void onReceive(
android.content.Context
android.content.Intent)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/stk/TextAlignment;>; )
public final class com.android.internal.telephony.gsm.stk.TextAlignment extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.stk.TextAlignment[] $VALUES

public static final com.android.internal.telephony.gsm.stk.TextAlignment CENTER

public static final com.android.internal.telephony.gsm.stk.TextAlignment DEFAULT

public static final com.android.internal.telephony.gsm.stk.TextAlignment LEFT

public static final com.android.internal.telephony.gsm.stk.TextAlignment RIGHT

private int mValue
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static com.android.internal.telephony.gsm.stk.TextAlignment fromInt(
int)

public static com.android.internal.telephony.gsm.stk.TextAlignment valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.stk.TextAlignment[] values()

________________CLASS________________


public class com.android.internal.telephony.gsm.stk.TextAttribute extends java.lang.Object

----------------FIELDS----------------

public com.android.internal.telephony.gsm.stk.TextAlignment align

public boolean bold

public com.android.internal.telephony.gsm.stk.TextColor color

public boolean italic

public int length

public com.android.internal.telephony.gsm.stk.FontSize size

public int start

public boolean strikeThrough

public boolean underlined
----------------METHODS----------------

public void <init>(
int
int
com.android.internal.telephony.gsm.stk.TextAlignment
com.android.internal.telephony.gsm.stk.FontSize
boolean
boolean
boolean
boolean
com.android.internal.telephony.gsm.stk.TextColor)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/stk/TextColor;>; )
public final class com.android.internal.telephony.gsm.stk.TextColor extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.stk.TextColor[] $VALUES

public static final com.android.internal.telephony.gsm.stk.TextColor BLACK

public static final com.android.internal.telephony.gsm.stk.TextColor BRIGHT_BLUE

public static final com.android.internal.telephony.gsm.stk.TextColor BRIGHT_CYAN

public static final com.android.internal.telephony.gsm.stk.TextColor BRIGHT_GREEN

public static final com.android.internal.telephony.gsm.stk.TextColor BRIGHT_MAGENTA

public static final com.android.internal.telephony.gsm.stk.TextColor BRIGHT_RED

public static final com.android.internal.telephony.gsm.stk.TextColor BRIGHT_YELLOW

public static final com.android.internal.telephony.gsm.stk.TextColor DARK_BLUE

public static final com.android.internal.telephony.gsm.stk.TextColor DARK_CYAN

public static final com.android.internal.telephony.gsm.stk.TextColor DARK_GRAY

public static final com.android.internal.telephony.gsm.stk.TextColor DARK_GREEN

public static final com.android.internal.telephony.gsm.stk.TextColor DARK_MAGENTA

public static final com.android.internal.telephony.gsm.stk.TextColor DARK_RED

public static final com.android.internal.telephony.gsm.stk.TextColor DARK_YELLOW

public static final com.android.internal.telephony.gsm.stk.TextColor GRAY

public static final com.android.internal.telephony.gsm.stk.TextColor WHITE

private int mValue
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static com.android.internal.telephony.gsm.stk.TextColor fromInt(
int)

public static com.android.internal.telephony.gsm.stk.TextColor valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.stk.TextColor[] values()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/gsm/stk/Tone;>; )
public final class com.android.internal.telephony.gsm.stk.Tone extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.gsm.stk.Tone[] $VALUES

public static final com.android.internal.telephony.gsm.stk.Tone BUSY

public static final com.android.internal.telephony.gsm.stk.Tone CALL_WAITING

public static final com.android.internal.telephony.gsm.stk.Tone CONGESTION

public static final com.android.internal.telephony.gsm.stk.Tone CRITICAL_ALERT

public static final com.android.internal.telephony.gsm.stk.Tone DIAL

public static final com.android.internal.telephony.gsm.stk.Tone ERROR_SPECIAL_INFO

public static final com.android.internal.telephony.gsm.stk.Tone GENERAL_BEEP

public static final com.android.internal.telephony.gsm.stk.Tone HAPPY

public static final com.android.internal.telephony.gsm.stk.Tone INCOMING_SMS

public static final com.android.internal.telephony.gsm.stk.Tone INCOMING_SPEECH_CALL

public static final com.android.internal.telephony.gsm.stk.Tone MELODY_1

public static final com.android.internal.telephony.gsm.stk.Tone MELODY_2

public static final com.android.internal.telephony.gsm.stk.Tone MELODY_3

public static final com.android.internal.telephony.gsm.stk.Tone MELODY_4

public static final com.android.internal.telephony.gsm.stk.Tone MELODY_5

public static final com.android.internal.telephony.gsm.stk.Tone MELODY_6

public static final com.android.internal.telephony.gsm.stk.Tone MELODY_7

public static final com.android.internal.telephony.gsm.stk.Tone MELODY_8

public static final com.android.internal.telephony.gsm.stk.Tone MESSAGE_RECEIVED

public static final com.android.internal.telephony.gsm.stk.Tone NEGATIVE_ACK

public static final com.android.internal.telephony.gsm.stk.Tone POSITIVE_ACK

public static final com.android.internal.telephony.gsm.stk.Tone QUESTION

public static final com.android.internal.telephony.gsm.stk.Tone RADIO_PATH_ACK

public static final com.android.internal.telephony.gsm.stk.Tone RADIO_PATH_NOT_AVAILABLE

public static final com.android.internal.telephony.gsm.stk.Tone RINGING

public static final com.android.internal.telephony.gsm.stk.Tone SAD

public static final com.android.internal.telephony.gsm.stk.Tone URGENT

public static final com.android.internal.telephony.gsm.stk.Tone VIBRATE_ONLY

private int mValue
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static com.android.internal.telephony.gsm.stk.Tone fromInt(
int)

public static com.android.internal.telephony.gsm.stk.Tone valueOf(
java.lang.String)

public static com.android.internal.telephony.gsm.stk.Tone[] values()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16408 name =State )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/test/CallInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/test/CallInfo$State;>; )
final class com.android.internal.telephony.test.CallInfo$State extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.test.CallInfo$State[] $VALUES

public static final com.android.internal.telephony.test.CallInfo$State ACTIVE

public static final com.android.internal.telephony.test.CallInfo$State ALERTING

public static final com.android.internal.telephony.test.CallInfo$State DIALING

public static final com.android.internal.telephony.test.CallInfo$State HOLDING

public static final com.android.internal.telephony.test.CallInfo$State INCOMING

public static final com.android.internal.telephony.test.CallInfo$State WAITING

private final int value
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(I)V )
private void <init>(
java.lang.String
int
int)

public static com.android.internal.telephony.test.CallInfo$State valueOf(
java.lang.String)

public static com.android.internal.telephony.test.CallInfo$State[] values()

public int value()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/test/CallInfo$State; )
 class com.android.internal.telephony.test.CallInfo extends java.lang.Object

----------------FIELDS----------------

 int TOA

 boolean isMT

 boolean isMpty

 java.lang.String number

 com.android.internal.telephony.test.CallInfo$State state
----------------METHODS----------------

 void <init>(
boolean
com.android.internal.telephony.test.CallInfo$State
boolean
java.lang.String)

static com.android.internal.telephony.test.CallInfo createIncomingCall(
java.lang.String)

static com.android.internal.telephony.test.CallInfo createOutgoingCall(
java.lang.String)

 boolean isActiveOrHeld()

 boolean isConnecting()

 boolean isRinging()

 java.lang.String toCLCCLine(
int)

 com.android.internal.telephony.gsm.DriverCall toDriverCall(
int)

________________CLASS________________


 class com.android.internal.telephony.test.InterpreterEx extends java.lang.Exception

----------------FIELDS----------------

 java.lang.String result
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________


 class com.android.internal.telephony.test.InvalidStateEx extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

________________CLASS________________


 class com.android.internal.telephony.test.LineReader extends java.lang.Object

----------------FIELDS----------------

static final int BUFFER_SIZE

 byte[] buffer

 java.io.InputStream inStream
----------------METHODS----------------

 void <init>(
java.io.InputStream)

 java.lang.String getNextLine()

 java.lang.String getNextLine(
boolean)

 java.lang.String getNextLineCtrlZ()

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class com.android.internal.telephony.test.ModelInterpreter$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final com.android.internal.telephony.test.ModelInterpreter this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.test.ModelInterpreter)

public void run()

________________CLASS________________


public abstract interface class com.android.internal.telephony.test.SimulatedRadioControl extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void pauseResponses()

public abstract void progressConnectingCallState()

public abstract void progressConnectingToActive()

public abstract void resumeResponses()

public abstract void setAutoProgressConnectingCall(
boolean)

public abstract void setNextCallFailCause(
int)

public abstract void setNextDialFailImmediately(
boolean)

public abstract void shutdown()

public abstract void triggerHangupAll()

public abstract void triggerHangupBackground()

public abstract void triggerHangupForeground()

public abstract void triggerIncomingSMS(
java.lang.String)

public abstract void triggerIncomingUssd(
java.lang.String
java.lang.String)

public abstract void triggerRing(
java.lang.String)

public abstract void triggerSsn(
int
int)

________________CLASS________________


public class com.android.internal.telephony.test.ModelInterpreter extends java.lang.Object implements java.lang.Runnable, android.os.HandlerInterface, com.android.internal.telephony.test.SimulatedRadioControl

----------------FIELDS----------------

static final int CONNECTING_PAUSE_MSEC

static final java.lang.String LOG_TAG

static final int MAX_CALLS

static final int PROGRESS_CALL_STATE

static final java.lang.String[][] sDefaultResponses

private java.lang.String finalResponse

 com.android.internal.os.HandlerThread handlerThread

 java.io.InputStream in

 com.android.internal.telephony.test.LineReader lineReader

 java.io.OutputStream out

 int pausedResponseCount

 java.lang.Object pausedResponseMonitor

 com.android.internal.telephony.test.SimulatedGsmCallState simulatedCallState

 java.net.ServerSocket ss
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.io.InputStream
java.io.OutputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void <init>(
java.net.InetSocketAddress)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/test/InterpreterEx; )
private void conference()

private void init()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/test/InterpreterEx; )
private void onAnswer()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/test/InterpreterEx; )
private void onCHLD(
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/test/InterpreterEx; )
private void onCLCC()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/test/InterpreterEx; )
private void onDial(
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/test/InterpreterEx; )
private void onHangup()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/test/InterpreterEx; )
private void onSMSSend(
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/test/InterpreterEx; )
private void releaseActiveAcceptHeldOrWaiting()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/test/InterpreterEx; )
private void releaseHeldOrUDUB()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/test/InterpreterEx; )
private void separateCall(
int)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/test/InterpreterEx; )
private void switchActiveAndHeldOrWaiting()

public void handleMessage(
android.os.Message)

public void pauseResponses()

 void print(
java.lang.String)

 void println(
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/test/InterpreterEx; )
 void processLine(
java.lang.String)

public void progressConnectingCallState()

public void progressConnectingToActive()

public void resumeResponses()

public void run()

public void sendUnsolicited(
java.lang.String)

public void setAutoProgressConnectingCall(
boolean)

public void setNextCallFailCause(
int)

public void setNextDialFailImmediately(
boolean)

public void shutdown()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/test/InterpreterEx; )
 java.lang.String[] splitCommands(
java.lang.String)

public void triggerHangupAll()

public void triggerHangupBackground()

public void triggerHangupForeground()

public void triggerIncomingSMS(
java.lang.String)

public void triggerIncomingUssd(
java.lang.String
java.lang.String)

public void triggerRing(
java.lang.String)

public void triggerSsn(
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class com.android.internal.telephony.test.SimulatedCommands$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final com.android.internal.telephony.test.SimulatedCommands this$0
----------------METHODS----------------

 void <init>(
com.android.internal.telephony.test.SimulatedCommands)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/test/SimulatedCommands; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class com.android.internal.telephony.test.SimulatedCommands$2 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$com$android$internal$telephony$gsm$CommandsInterface$RadioState

static final int[] $SwitchMap$com$android$internal$telephony$test$SimulatedCommands$SimLockState
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16410 name =SimFdnState )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/test/SimulatedCommands$SimFdnState;>; )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/test/SimulatedCommands; )
final class com.android.internal.telephony.test.SimulatedCommands$SimFdnState extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.test.SimulatedCommands$SimFdnState[] $VALUES

public static final com.android.internal.telephony.test.SimulatedCommands$SimFdnState NONE

public static final com.android.internal.telephony.test.SimulatedCommands$SimFdnState REQUIRE_PIN2

public static final com.android.internal.telephony.test.SimulatedCommands$SimFdnState REQUIRE_PUK2

public static final com.android.internal.telephony.test.SimulatedCommands$SimFdnState SIM_PERM_LOCKED
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.test.SimulatedCommands$SimFdnState valueOf(
java.lang.String)

public static com.android.internal.telephony.test.SimulatedCommands$SimFdnState[] values()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16410 name =SimLockState )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/telephony/test/SimulatedCommands$SimLockState;>; )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/telephony/test/SimulatedCommands; )
final class com.android.internal.telephony.test.SimulatedCommands$SimLockState extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.telephony.test.SimulatedCommands$SimLockState[] $VALUES

public static final com.android.internal.telephony.test.SimulatedCommands$SimLockState NONE

public static final com.android.internal.telephony.test.SimulatedCommands$SimLockState REQUIRE_PIN

public static final com.android.internal.telephony.test.SimulatedCommands$SimLockState REQUIRE_PUK

public static final com.android.internal.telephony.test.SimulatedCommands$SimLockState SIM_PERM_LOCKED
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.telephony.test.SimulatedCommands$SimLockState valueOf(
java.lang.String)

public static com.android.internal.telephony.test.SimulatedCommands$SimLockState[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/telephony/test/SimulatedCommands$2;Lcom/android/internal/telephony/test/SimulatedCommands$SimFdnState;Lcom/android/internal/telephony/test/SimulatedCommands$SimLockState; )
public final class com.android.internal.telephony.test.SimulatedCommands extends com.android.internal.telephony.gsm.BaseCommands implements com.android.internal.telephony.gsm.CommandsInterface, android.os.HandlerInterface, com.android.internal.telephony.test.SimulatedRadioControl

----------------FIELDS----------------

private static final java.lang.String DEFAULT_SIM_PIN2_CODE

private static final java.lang.String DEFAULT_SIM_PIN_CODE

private static final com.android.internal.telephony.test.SimulatedCommands$SimFdnState INITIAL_FDN_STATE

private static final com.android.internal.telephony.test.SimulatedCommands$SimLockState INITIAL_LOCK_STATE

private static final java.lang.String LOG_TAG

private static final java.lang.String SIM_PUK2_CODE

private static final java.lang.String SIM_PUK_CODE

 com.android.internal.os.HandlerThread handlerThread

 int mNetworkType

 java.lang.String mPin2Code

 int mPin2UnlockAttempts

 java.lang.String mPinCode

 int mPinUnlockAttempts

 int mPuk2UnlockAttempts

 int mPukUnlockAttempts

 boolean mSimFdnEnabled

 com.android.internal.telephony.test.SimulatedCommands$SimFdnState mSimFdnEnabledState

 boolean mSimLockEnabled

 com.android.internal.telephony.test.SimulatedCommands$SimLockState mSimLockedState

 boolean mSsnNotifyOn

 int nextCallFailCause

 int pausedResponseCount
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/os/Message;>; )
 java.util.ArrayList pausedResponses

 com.android.internal.telephony.test.SimulatedGsmCallState simulatedCallState
----------------METHODS----------------

static void <clinit>()

public void <init>()

private boolean isSimLocked()

private void resultFail(
android.os.Message
java.lang.Throwable)

private void resultSuccess(
android.os.Message
java.lang.Object)

private void returnSimLockedStatus(
android.os.Message)

private void unimplemented(
android.os.Message)

public void acceptCall(
android.os.Message)

public void acknowledgeLastIncomingSMS(
boolean
android.os.Message)

public void cancelPendingUssd(
android.os.Message)

public void changeBarringPassword(
java.lang.String
java.lang.String
java.lang.String
android.os.Message)

public void changeSimPin(
java.lang.String
java.lang.String
android.os.Message)

public void changeSimPin2(
java.lang.String
java.lang.String
android.os.Message)

public void conference(
android.os.Message)

public void deactivateDefaultPDP(
int
android.os.Message)

public void deleteSmsOnSim(
int
android.os.Message)

public void dial(
java.lang.String
int
android.os.Message)

public void explicitCallTransfer(
android.os.Message)

public void getAvailableNetworks(
android.os.Message)

public void getBasebandVersion(
android.os.Message)

public void getCLIR(
android.os.Message)

public void getCurrentCalls(
android.os.Message)

public void getGPRSRegistrationState(
android.os.Message)

public void getIMEI(
android.os.Message)

public void getIMEISV(
android.os.Message)

public void getIMSI(
android.os.Message)

public void getLastCallFailCause(
android.os.Message)

public void getLastPdpFailCause(
android.os.Message)

public void getMute(
android.os.Message)

public void getNeighboringCids(
android.os.Message)

public void getNetworkSelectionMode(
android.os.Message)

public void getOperator(
android.os.Message)

public void getPDPContextList(
android.os.Message)

public void getPreferredNetworkType(
android.os.Message)

public void getRegistrationState(
android.os.Message)

public void getSignalStrength(
android.os.Message)

public void getSimStatus(
android.os.Message)

public void handleCallSetupRequestFromSim(
boolean
android.os.Message)

public void handleMessage(
android.os.Message)

public void hangupConnection(
int
android.os.Message)

public void hangupForegroundResumeBackground(
android.os.Message)

public void hangupWaitingOrBackground(
android.os.Message)

public void invokeOemRilRequestRaw(
byte[]
android.os.Message)

public void invokeOemRilRequestStrings(
java.lang.String[]
android.os.Message)

public void pauseResponses()

public void progressConnectingCallState()

public void progressConnectingToActive()

public void queryAvailableBandMode(
android.os.Message)

public void queryCLIP(
android.os.Message)

public void queryCallForwardStatus(
int
int
java.lang.String
android.os.Message)

public void queryCallWaiting(
int
android.os.Message)

public void queryFacilityLock(
java.lang.String
java.lang.String
int
android.os.Message)

public void rejectCall(
android.os.Message)

public void resetRadio(
android.os.Message)

public void resumeResponses()

public void sendDtmf(
char
android.os.Message)

public void sendEnvelope(
java.lang.String
android.os.Message)

public void sendSMS(
java.lang.String
java.lang.String
android.os.Message)

public void sendTerminalResponse(
java.lang.String
android.os.Message)

public void sendUSSD(
java.lang.String
android.os.Message)

public void separateConnection(
int
android.os.Message)

public void setAutoProgressConnectingCall(
boolean)

public void setBandMode(
int
android.os.Message)

public void setCLIR(
int
android.os.Message)

public void setCallForward(
int
int
int
java.lang.String
int
android.os.Message)

public void setCallWaiting(
boolean
int
android.os.Message)

public void setFacilityLock(
java.lang.String
boolean
java.lang.String
int
android.os.Message)

public void setLocationUpdates(
boolean
android.os.Message)

public void setMute(
boolean
android.os.Message)

public void setNetworkSelectionModeAutomatic(
android.os.Message)

public void setNetworkSelectionModeManual(
java.lang.String
android.os.Message)

public void setNextCallFailCause(
int)

public void setNextDialFailImmediately(
boolean)

public void setPreferredNetworkType(
int
android.os.Message)

public void setRadioPower(
boolean
android.os.Message)

public void setSuppServiceNotifications(
boolean
android.os.Message)

public void setupDefaultPDP(
java.lang.String
java.lang.String
java.lang.String
android.os.Message)

public void shutdown()

public void simIO(
int
int
java.lang.String
int
int
int
java.lang.String
java.lang.String
android.os.Message)

public void startDtmf(
char
android.os.Message)

public void stopDtmf(
android.os.Message)

public void supplyNetworkDepersonalization(
java.lang.String
android.os.Message)

public void supplySimPin(
java.lang.String
android.os.Message)

public void supplySimPin2(
java.lang.String
android.os.Message)

public void supplySimPuk(
java.lang.String
java.lang.String
android.os.Message)

public void supplySimPuk2(
java.lang.String
java.lang.String
android.os.Message)

public void switchWaitingOrHoldingAndActive(
android.os.Message)

public void triggerHangupAll()

public void triggerHangupBackground()

public void triggerHangupForeground()

public void triggerIncomingSMS(
java.lang.String)

public void triggerIncomingUssd(
java.lang.String
java.lang.String)

public void triggerRing(
java.lang.String)

public void triggerSsn(
int
int)

public void writeSmsToSim(
int
java.lang.String
java.lang.String
android.os.Message)

________________CLASS________________


 class com.android.internal.telephony.test.SimulatedGsmCallState extends android.os.Handler

----------------FIELDS----------------

static final int CONNECTING_PAUSE_MSEC

static final int EVENT_PROGRESS_CALL_STATE

static final int MAX_CALLS

private boolean autoProgressConnecting

 com.android.internal.telephony.test.CallInfo[] calls

private boolean nextDialFailImmediately
----------------METHODS----------------

 void <init>()
@dalvik.annotation.Throws (value =Lcom/android/internal/telephony/test/InvalidStateEx; )
private int countActiveLines()

public boolean conference()

public boolean explicitCallTransfer()
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getClccLines()
@dalvik.annotation.Signature (value =()Ljava/util/List<Lcom/android/internal/telephony/gsm/DriverCall;>; )
public java.util.List getDriverCalls()

public void handleMessage(
android.os.Message)

public boolean onAnswer()

public boolean onChld(
char
char)

public boolean onDial(
java.lang.String)

public boolean onHangup()

public void progressConnectingCallState()

public void progressConnectingToActive()

public boolean releaseActiveAcceptHeldOrWaiting()

public boolean releaseHeldOrUDUB()

public boolean separateCall(
int)

public void setAutoProgressConnectingCall(
boolean)

public void setNextDialFailImmediately(
boolean)

public boolean switchActiveAndHeldOrWaiting()

public boolean triggerHangupAll()

public boolean triggerHangupBackground()

public boolean triggerHangupForeground()

public boolean triggerRing(
java.lang.String)

________________CLASS________________


public class com.android.internal.util.ArrayUtils extends java.lang.Object

----------------FIELDS----------------

private static final int CACHE_SIZE

private static java.lang.Object[] EMPTY

private static java.lang.Object[] sCache
----------------METHODS----------------

static void <clinit>()

private void <init>()
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>([TT;TT;)Z )
public static boolean contains(
java.lang.Object[]
java.lang.Object)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;)[TT; )
public static java.lang.Object[] emptyArray(
java.lang.Class)

public static boolean equals(
byte[]
byte[]
int)

public static int idealBooleanArraySize(
int)

public static int idealByteArraySize(
int)

public static int idealCharArraySize(
int)

public static int idealFloatArraySize(
int)

public static int idealIntArraySize(
int)

public static int idealLongArraySize(
int)

public static int idealObjectArraySize(
int)

public static int idealShortArraySize(
int)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class com.android.internal.util.CharSequences$1 extends java.lang.Object implements java.lang.CharSequence

----------------FIELDS----------------

final byte[] val$bytes
----------------METHODS----------------

 void <init>(
byte[])

public char charAt(
int)

public int length()

public java.lang.CharSequence subSequence(
int
int)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
final class com.android.internal.util.CharSequences$2 extends java.lang.Object implements java.lang.CharSequence

----------------FIELDS----------------

final byte[] val$bytes

final int val$end

final int val$start
----------------METHODS----------------

 void <init>(
byte[]
int
int)

public char charAt(
int)

public int length()

public java.lang.CharSequence subSequence(
int
int)

public java.lang.String toString()

________________CLASS________________


public class com.android.internal.util.CharSequences extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static int compareToIgnoreCase(
java.lang.CharSequence
java.lang.CharSequence)

public static boolean equals(
java.lang.CharSequence
java.lang.CharSequence)

public static java.lang.CharSequence forAsciiBytes(
byte[])

public static java.lang.CharSequence forAsciiBytes(
byte[]
int
int)

static void validate(
int
int
int)

________________CLASS________________


public class com.android.internal.util.FastMath extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static int round(
float)

________________CLASS________________


public class com.android.internal.util.FastXmlSerializer extends java.lang.Object implements org.xmlpull.v1.XmlSerializer

----------------FIELDS----------------

private static final int BUFFER_LEN

private static final java.lang.String[] ESCAPE_TABLE

private java.nio.ByteBuffer mBytes

private java.nio.charset.CharsetEncoder mCharset

private boolean mInTag

private java.io.OutputStream mOutputStream

private int mPos

private final char[] mText

private java.io.Writer mWriter
----------------METHODS----------------

static void <clinit>()

public void <init>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private void append(
char)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private void append(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private void append(
java.lang.String
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private void append(
char[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private void escapeAndAppendString(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private void escapeAndAppendString(
char[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private void flushBytes()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public org.xmlpull.v1.XmlSerializer attribute(
java.lang.String
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public void cdsect(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public void comment(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public void docdecl(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public void endDocument()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public org.xmlpull.v1.XmlSerializer endTag(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public void entityRef(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void flush()

public int getDepth()

public boolean getFeature(
java.lang.String)

public java.lang.String getName()

public java.lang.String getNamespace()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public java.lang.String getPrefix(
java.lang.String
boolean)

public java.lang.Object getProperty(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public void ignorableWhitespace(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public void processingInstruction(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public void setFeature(
java.lang.String
boolean)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public void setOutput(
java.io.OutputStream
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public void setOutput(
java.io.Writer)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public void setPrefix(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public void setProperty(
java.lang.String
java.lang.Object)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public void startDocument(
java.lang.String
java.lang.Boolean)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public org.xmlpull.v1.XmlSerializer startTag(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public org.xmlpull.v1.XmlSerializer text(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalArgumentException;Ljava/lang/IllegalStateException; )
public org.xmlpull.v1.XmlSerializer text(
char[]
int
int)

________________CLASS________________


public class com.android.internal.util.HexDump extends java.lang.Object

----------------FIELDS----------------

private static final char[] HEX_DIGITS
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static java.lang.String dumpHexString(
byte[])

public static java.lang.String dumpHexString(
byte[]
int
int)

public static byte[] hexStringToByteArray(
java.lang.String)

private static int toByte(
char)

public static byte[] toByteArray(
byte)

public static byte[] toByteArray(
int)

public static java.lang.String toHexString(
byte)

public static java.lang.String toHexString(
int)

public static java.lang.String toHexString(
byte[])

public static java.lang.String toHexString(
byte[]
int
int)

________________CLASS________________


public class com.android.internal.util.Objects extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(TT;)TT; )
public static java.lang.Object nonNull(
java.lang.Object)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(TT;Ljava/lang/String;)TT; )
public static java.lang.Object nonNull(
java.lang.Object
java.lang.String)

________________CLASS________________

@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>Ljava/lang/Object; )
public abstract interface class com.android.internal.util.Predicate extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Signature (value =(TT;)Z )
public abstract boolean apply(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/util/Predicates; )
 class com.android.internal.util.Predicates$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =AndPredicate )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/util/Predicates; )
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>Ljava/lang/Object;Lcom/android/internal/util/Predicate<TT;>; )
 class com.android.internal.util.Predicates$AndPredicate extends java.lang.Object implements com.android.internal.util.Predicate

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/lang/Iterable<+Lcom/android/internal/util/Predicate<-TT;>;>; )
private final java.lang.Iterable components
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Ljava/lang/Iterable<+Lcom/android/internal/util/Predicate<-TT;>;>;)V )
private void <init>(
java.lang.Iterable)

 void <init>(
java.lang.Iterable
com.android.internal.util.Predicates$1)
@dalvik.annotation.Signature (value =(TT;)Z )
public boolean apply(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/util/Predicates; )
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>Ljava/lang/Object;Lcom/android/internal/util/Predicate<TT;>; )
@dalvik.annotation.InnerClass (accessFlags =10 name =NotPredicate )
 class com.android.internal.util.Predicates$NotPredicate extends java.lang.Object implements com.android.internal.util.Predicate

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Lcom/android/internal/util/Predicate<-TT;>; )
private final com.android.internal.util.Predicate predicate
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Lcom/android/internal/util/Predicate<-TT;>;)V )
private void <init>(
com.android.internal.util.Predicate)

 void <init>(
com.android.internal.util.Predicate
com.android.internal.util.Predicates$1)
@dalvik.annotation.Signature (value =(TT;)Z )
public boolean apply(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/util/Predicates; )
@dalvik.annotation.InnerClass (accessFlags =10 name =OrPredicate )
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>Ljava/lang/Object;Lcom/android/internal/util/Predicate<TT;>; )
 class com.android.internal.util.Predicates$OrPredicate extends java.lang.Object implements com.android.internal.util.Predicate

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/lang/Iterable<+Lcom/android/internal/util/Predicate<-TT;>;>; )
private final java.lang.Iterable components
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Ljava/lang/Iterable<+Lcom/android/internal/util/Predicate<-TT;>;>;)V )
private void <init>(
java.lang.Iterable)

 void <init>(
java.lang.Iterable
com.android.internal.util.Predicates$1)
@dalvik.annotation.Signature (value =(TT;)Z )
public boolean apply(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/util/Predicates$1;Lcom/android/internal/util/Predicates$NotPredicate;Lcom/android/internal/util/Predicates$OrPredicate;Lcom/android/internal/util/Predicates$AndPredicate; )
public class com.android.internal.util.Predicates extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Ljava/lang/Iterable<+Lcom/android/internal/util/Predicate<-TT;>;>;)Lcom/android/internal/util/Predicate<TT;>; )
public static com.android.internal.util.Predicate and(
java.lang.Iterable)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>([Lcom/android/internal/util/Predicate<-TT;>;)Lcom/android/internal/util/Predicate<TT;>; )
public static transient com.android.internal.util.Predicate and(
com.android.internal.util.Predicate[])
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lcom/android/internal/util/Predicate<-TT;>;)Lcom/android/internal/util/Predicate<TT;>; )
public static com.android.internal.util.Predicate not(
com.android.internal.util.Predicate)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Ljava/lang/Iterable<+Lcom/android/internal/util/Predicate<-TT;>;>;)Lcom/android/internal/util/Predicate<TT;>; )
public static com.android.internal.util.Predicate or(
java.lang.Iterable)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>([Lcom/android/internal/util/Predicate<-TT;>;)Lcom/android/internal/util/Predicate<TT;>; )
public static transient com.android.internal.util.Predicate or(
com.android.internal.util.Predicate[])

________________CLASS________________


 class com.android.internal.util.WithFramework extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()
@dalvik.annotation.Throws (value =Ljava/lang/Exception; )
public static void main(
java.lang.String[])

private static void printUsage()

static native int registerNatives()

________________CLASS________________


public class com.android.internal.util.XmlUtils extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static final void beginDocument(
org.xmlpull.v1.XmlPullParser
java.lang.String)

public static final boolean convertValueToBoolean(
java.lang.CharSequence
boolean)

public static final int convertValueToInt(
java.lang.CharSequence
int)

public static final int convertValueToList(
java.lang.CharSequence
java.lang.String[]
int)

public static final int convertValueToUnsignedInt(
java.lang.String
int)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static final void nextElement(
org.xmlpull.v1.XmlPullParser)

public static final int parseUnsignedIntAttribute(
java.lang.CharSequence)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static final java.util.ArrayList readListXml(
java.io.InputStream)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static final java.util.HashMap readMapXml(
java.io.InputStream)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static final int[] readThisIntArrayXml(
org.xmlpull.v1.XmlPullParser
java.lang.String
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static final java.util.ArrayList readThisListXml(
org.xmlpull.v1.XmlPullParser
java.lang.String
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static final java.util.HashMap readThisMapXml(
org.xmlpull.v1.XmlPullParser
java.lang.String
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private static final java.lang.Object readThisValueXml(
org.xmlpull.v1.XmlPullParser
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static final java.lang.Object readValueXml(
org.xmlpull.v1.XmlPullParser
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static void skipCurrentTag(
org.xmlpull.v1.XmlPullParser)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static final void writeByteArrayXml(
byte[]
java.lang.String
org.xmlpull.v1.XmlSerializer)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static final void writeIntArrayXml(
int[]
java.lang.String
org.xmlpull.v1.XmlSerializer)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static final void writeListXml(
java.util.List
java.io.OutputStream)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static final void writeListXml(
java.util.List
java.lang.String
org.xmlpull.v1.XmlSerializer)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static final void writeMapXml(
java.util.Map
java.io.OutputStream)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static final void writeMapXml(
java.util.Map
java.lang.String
org.xmlpull.v1.XmlSerializer)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
public static final void writeValueXml(
java.lang.Object
java.lang.String
org.xmlpull.v1.XmlSerializer)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/view/menu/MenuBuilder$MenuAdapter;Lcom/android/internal/view/menu/MenuBuilder$ItemInvoker;Lcom/android/internal/view/menu/MenuBuilder$Callback;Lcom/android/internal/view/menu/MenuBuilder$MenuType; )
public class com.android.internal.view.menu.MenuBuilder extends java.lang.Object implements android.view.Menu

----------------FIELDS----------------

static final int[] ITEM_LAYOUT_RES_FOR_TYPE

static final int[] LAYOUT_RES_FOR_TYPE

private static final java.lang.String LOGTAG

public static final int NUM_TYPES

static final int[] THEME_RES_FOR_TYPE

public static final int TYPE_DIALOG

public static final int TYPE_EXPANDED

public static final int TYPE_ICON

private static final java.lang.String VIEWS_TAG

private static final int[] sCategoryToOrder

private com.android.internal.view.menu.MenuBuilder$Callback mCallback

private final android.content.Context mContext

private android.view.ContextMenu$ContextMenuInfo mCurrentMenuInfo
@dalvik.annotation.Signature (value =Landroid/util/SparseArray<Landroid/os/Parcelable;>; )
private android.util.SparseArray mFrozenViewStates

 android.graphics.drawable.Drawable mHeaderIcon

 java.lang.CharSequence mHeaderTitle

 android.view.View mHeaderView

private boolean mIsVisibleItemsStale
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/android/internal/view/menu/MenuItemImpl;>; )
private java.util.ArrayList mItems

private com.android.internal.view.menu.MenuBuilder$MenuType[] mMenuTypes

private boolean mOptionalIconsVisible

private boolean mPreventDispatchingItemsChanged

private boolean mQwertyMode

private final android.content.res.Resources mResources

private boolean mShortcutsVisible
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/android/internal/view/menu/MenuItemImpl;>; )
private java.util.ArrayList mVisibleItems
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

static android.content.Context access$000(
com.android.internal.view.menu.MenuBuilder)

static android.util.SparseArray access$100(
com.android.internal.view.menu.MenuBuilder)

static int access$300(
com.android.internal.view.menu.MenuBuilder)

private android.view.MenuItem addInternal(
int
int
int
java.lang.CharSequence)
@dalvik.annotation.Signature (value =(Ljava/util/ArrayList<Lcom/android/internal/view/menu/MenuItemImpl;>;I)I )
private static int findInsertIndex(
java.util.ArrayList
int)

private int getNumIconMenuItemsShown()

private static int getOrdering(
int)

private void onItemsChanged(
boolean)

private void refreshShortcuts(
boolean
boolean)

private void removeItemAtInt(
int
boolean)

private void setHeaderInternal(
int
java.lang.CharSequence
int
android.graphics.drawable.Drawable
android.view.View)

public android.view.MenuItem add(
int)

public android.view.MenuItem add(
int
int
int
int)

public android.view.MenuItem add(
int
int
int
java.lang.CharSequence)

public android.view.MenuItem add(
java.lang.CharSequence)

public int addIntentOptions(
int
int
int
android.content.ComponentName
android.content.Intent[]
android.content.Intent
int
android.view.MenuItem[])

public android.view.SubMenu addSubMenu(
int)

public android.view.SubMenu addSubMenu(
int
int
int
int)

public android.view.SubMenu addSubMenu(
int
int
int
java.lang.CharSequence)

public android.view.SubMenu addSubMenu(
java.lang.CharSequence)

public void clear()

public void clearAll()

public void clearHeader()

public void clearMenuViews()

public final void close(
boolean)

public int findGroupIndex(
int)

public int findGroupIndex(
int
int)

public android.view.MenuItem findItem(
int)

public int findItemIndex(
int)

 com.android.internal.view.menu.MenuItemImpl findItemWithShortcutForKey(
int
android.view.KeyEvent)

public android.view.MenuItem get(
int)

public com.android.internal.view.menu.MenuBuilder$Callback getCallback()

public android.content.Context getContext()

public android.graphics.drawable.Drawable getHeaderIcon()

public java.lang.CharSequence getHeaderTitle()

public android.view.View getHeaderView()

public com.android.internal.view.menu.MenuBuilder$MenuAdapter getMenuAdapter(
int)

 com.android.internal.view.menu.MenuBuilder$MenuType getMenuType(
int)

public android.view.View getMenuView(
int
android.view.ViewGroup)

 boolean getOptionalIconsVisible()

 android.content.res.Resources getResources()

public com.android.internal.view.menu.MenuBuilder getRootMenu()
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Lcom/android/internal/view/menu/MenuItemImpl;>; )
 java.util.ArrayList getVisibleItems()

public boolean hasVisibleItems()

 boolean isQwertyMode()

public boolean isShortcutKey(
int
android.view.KeyEvent)

public boolean isShortcutsVisible()

 void onItemVisibleChanged(
com.android.internal.view.menu.MenuItemImpl)

public boolean performIdentifierAction(
int
int)

public boolean performItemAction(
android.view.MenuItem
int)

public boolean performShortcut(
int
android.view.KeyEvent
int)

public void removeGroup(
int)

public void removeItem(
int)

public void removeItemAt(
int)

public void restoreHierarchyState(
android.os.Bundle)

public void saveHierarchyState(
android.os.Bundle)

public void setCallback(
com.android.internal.view.menu.MenuBuilder$Callback)

public void setCurrentMenuInfo(
android.view.ContextMenu$ContextMenuInfo)

 void setExclusiveItemChecked(
android.view.MenuItem)

public void setGroupCheckable(
int
boolean
boolean)

public void setGroupEnabled(
int
boolean)

public void setGroupVisible(
int
boolean)

protected com.android.internal.view.menu.MenuBuilder setHeaderIconInt(
int)

protected com.android.internal.view.menu.MenuBuilder setHeaderIconInt(
android.graphics.drawable.Drawable)

protected com.android.internal.view.menu.MenuBuilder setHeaderTitleInt(
int)

protected com.android.internal.view.menu.MenuBuilder setHeaderTitleInt(
java.lang.CharSequence)

protected com.android.internal.view.menu.MenuBuilder setHeaderViewInt(
android.view.View)

 void setOptionalIconsVisible(
boolean)

public void setQwertyMode(
boolean)

public void setShortcutsVisible(
boolean)

public int size()

________________CLASS________________


public class com.android.internal.view.menu.ContextMenuBuilder extends com.android.internal.view.menu.MenuBuilder implements android.view.ContextMenu

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
android.content.Context)

public android.view.ContextMenu setHeaderIcon(
int)

public android.view.ContextMenu setHeaderIcon(
android.graphics.drawable.Drawable)

public android.view.ContextMenu setHeaderTitle(
int)

public android.view.ContextMenu setHeaderTitle(
java.lang.CharSequence)

public android.view.ContextMenu setHeaderView(
android.view.View)

public com.android.internal.view.menu.MenuDialogHelper show(
android.view.View
android.os.IBinder)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =ItemInvoker )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/view/menu/MenuBuilder; )
public abstract interface class com.android.internal.view.menu.MenuBuilder$ItemInvoker extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean invokeItem(
com.android.internal.view.menu.MenuItemImpl)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/view/menu/MenuView$ItemView; )
public abstract interface class com.android.internal.view.menu.MenuView extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract int getWindowAnimations()

public abstract void initialize(
com.android.internal.view.menu.MenuBuilder
int)

public abstract void updateChildren(
boolean)

________________CLASS________________


public final class com.android.internal.view.menu.ExpandedMenuView extends android.widget.ListView implements com.android.internal.view.menu.MenuBuilder$ItemInvoker, com.android.internal.view.menu.MenuView, android.widget.AdapterView$OnItemClickListener

----------------FIELDS----------------

private int mAnimations

private com.android.internal.view.menu.MenuBuilder mMenu
----------------METHODS----------------

public void <init>(
android.content.Context
android.util.AttributeSet)

public int getWindowAnimations()

public void initialize(
com.android.internal.view.menu.MenuBuilder
int)

public boolean invokeItem(
com.android.internal.view.menu.MenuItemImpl)

protected void onDetachedFromWindow()

public void onItemClick(
android.widget.AdapterView
android.view.View
int
long)

public void updateChildren(
boolean)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/view/menu/MenuView; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =ItemView )
public abstract interface class com.android.internal.view.menu.MenuView$ItemView extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract com.android.internal.view.menu.MenuItemImpl getItemData()

public abstract void initialize(
com.android.internal.view.menu.MenuItemImpl
int)

public abstract boolean prefersCondensedTitle()

public abstract void setCheckable(
boolean)

public abstract void setChecked(
boolean)

public abstract void setEnabled(
boolean)

public abstract void setIcon(
android.graphics.drawable.Drawable)

public abstract void setShortcut(
boolean
char)

public abstract void setTitle(
java.lang.CharSequence)

public abstract boolean showsIcon()

________________CLASS________________


public final class com.android.internal.view.menu.IconMenuItemView extends android.widget.TextView implements com.android.internal.view.menu.MenuView$ItemView

----------------FIELDS----------------

private static final int NO_ALPHA

private static java.lang.String sPrependShortcutLabel

private float mDisabledAlpha

private android.graphics.drawable.Drawable mIcon

private com.android.internal.view.menu.IconMenuView mIconMenuView

private com.android.internal.view.menu.MenuItemImpl mItemData

private com.android.internal.view.menu.MenuBuilder$ItemInvoker mItemInvoker

private android.graphics.Rect mPositionIconAvailable

private android.graphics.Rect mPositionIconOutput

private java.lang.String mShortcutCaption

private boolean mShortcutCaptionMode

private int mTextAppearance

private android.content.Context mTextAppearanceContext
----------------METHODS----------------

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private void positionIcon()

protected void drawableStateChanged()
@android.view.ViewDebug$CapturedViewProperty (retrieveReturn =true )
public com.android.internal.view.menu.MenuItemImpl getItemData()

public void initialize(
com.android.internal.view.menu.MenuItemImpl
int)

 void initialize(
java.lang.CharSequence
android.graphics.drawable.Drawable)

protected void onLayout(
boolean
int
int
int
int)

public boolean performClick()

public boolean prefersCondensedTitle()

 void setCaptionMode(
boolean)

public void setCheckable(
boolean)

public void setChecked(
boolean)

public void setIcon(
android.graphics.drawable.Drawable)

 void setIconMenuView(
com.android.internal.view.menu.IconMenuView)

public void setItemInvoker(
com.android.internal.view.menu.MenuBuilder$ItemInvoker)

public void setShortcut(
boolean
char)

public void setTitle(
java.lang.CharSequence)

public void setVisibility(
int)

public boolean showsIcon()

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class com.android.internal.view.menu.IconMenuView$1 extends java.lang.Object implements android.view.View$OnClickListener

----------------FIELDS----------------

final com.android.internal.view.menu.IconMenuView this$0
----------------METHODS----------------

 void <init>(
com.android.internal.view.menu.IconMenuView)

public void onClick(
android.view.View)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =LayoutParams )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/view/menu/IconMenuView; )
public class com.android.internal.view.menu.IconMenuView$LayoutParams extends android.view.ViewGroup$MarginLayoutParams

----------------FIELDS----------------

 int bottom

 int left

 int right

 int top
----------------METHODS----------------

public void <init>(
int
int)

public void <init>(
android.content.Context
android.util.AttributeSet)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/view/menu/IconMenuView$SavedState; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Lcom/android/internal/view/menu/IconMenuView$SavedState;>; )
final class com.android.internal.view.menu.IconMenuView$SavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public com.android.internal.view.menu.IconMenuView$SavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public com.android.internal.view.menu.IconMenuView$SavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =SavedState )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/view/menu/IconMenuView; )
 class com.android.internal.view.menu.IconMenuView$SavedState extends android.view.View$BaseSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Lcom/android/internal/view/menu/IconMenuView$SavedState;>; )
public static final android.os.Parcelable$Creator CREATOR

 int focusedPosition
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
com.android.internal.view.menu.IconMenuView$1)

public void <init>(
android.os.Parcelable
int)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/view/menu/IconMenuView$LayoutParams;Lcom/android/internal/view/menu/IconMenuView$SavedState; )
public final class com.android.internal.view.menu.IconMenuView extends android.view.ViewGroup implements com.android.internal.view.menu.MenuBuilder$ItemInvoker, com.android.internal.view.menu.MenuView, java.lang.Runnable

----------------FIELDS----------------

private static final int ITEM_CAPTION_CYCLE_DELAY

private int mAnimations

private boolean mHasStaleChildren

private android.graphics.drawable.Drawable mHorizontalDivider

private int mHorizontalDividerHeight
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/graphics/Rect;>; )
private java.util.ArrayList mHorizontalDividerRects

private android.graphics.drawable.Drawable mItemBackground

private boolean mLastChildrenCaptionMode

private int mMaxItemsPerRow

private int mMaxRows

private com.android.internal.view.menu.MenuBuilder mMenu

private boolean mMenuBeingLongpressed

private android.graphics.drawable.Drawable mMoreIcon

private com.android.internal.view.menu.IconMenuItemView mMoreItemView

private int mNumActualItemsShown

private int mRowHeight

private android.graphics.drawable.Drawable mVerticalDivider
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Landroid/graphics/Rect;>; )
private java.util.ArrayList mVerticalDividerRects

private int mVerticalDividerWidth
----------------METHODS----------------

public void <init>(
android.content.Context
android.util.AttributeSet)

static com.android.internal.view.menu.MenuBuilder access$000(
com.android.internal.view.menu.IconMenuView)

private void addItemView(
com.android.internal.view.menu.IconMenuItemView)

private int[] calculateNumberOfItemsPerRow(
int
int)

private int calculateNumberOfRows()

private com.android.internal.view.menu.IconMenuItemView createMoreItemView()

private void positionChildren(
int
int)

private void setChildrenCaptionMode(
boolean)

private void setCycleShortcutCaptionMode(
boolean)

protected boolean checkLayoutParams(
android.view.ViewGroup$LayoutParams)

public boolean dispatchKeyEvent(
android.view.KeyEvent)

public volatile android.view.ViewGroup$LayoutParams generateLayoutParams(
android.util.AttributeSet)

public com.android.internal.view.menu.IconMenuView$LayoutParams generateLayoutParams(
android.util.AttributeSet)

 int getNumActualItemsShown()

public int getWindowAnimations()

public void initialize(
com.android.internal.view.menu.MenuBuilder
int)

public boolean invokeItem(
com.android.internal.view.menu.MenuItemImpl)

 void markStaleChildren()

protected void onDetachedFromWindow()

protected void onDraw(
android.graphics.Canvas)

protected void onLayout(
boolean
int
int
int
int)

protected void onMeasure(
int
int)

protected void onRestoreInstanceState(
android.os.Parcelable)

protected android.os.Parcelable onSaveInstanceState()

public void onWindowFocusChanged(
boolean)

public void run()

public void updateChildren(
boolean)

________________CLASS________________


public class com.android.internal.view.menu.ListMenuItemView extends android.widget.LinearLayout implements com.android.internal.view.menu.MenuView$ItemView

----------------FIELDS----------------

private android.graphics.drawable.Drawable mBackground

private android.widget.CheckBox mCheckBox

private android.widget.ImageView mIconView

private com.android.internal.view.menu.MenuItemImpl mItemData

private int mMenuType

private android.widget.RadioButton mRadioButton

private android.widget.TextView mShortcutView

private int mTextAppearance

private android.content.Context mTextAppearanceContext

private android.widget.TextView mTitleView
----------------METHODS----------------

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private void insertCheckBox()

private void insertIconView()

private void insertRadioButton()

public com.android.internal.view.menu.MenuItemImpl getItemData()

public void initialize(
com.android.internal.view.menu.MenuItemImpl
int)

protected void onFinishInflate()

public boolean prefersCondensedTitle()

public void setCheckable(
boolean)

public void setChecked(
boolean)

public void setIcon(
android.graphics.drawable.Drawable)

public void setShortcut(
boolean
char)

public void setTitle(
java.lang.CharSequence)

public boolean showsIcon()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =Callback )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/view/menu/MenuBuilder; )
public abstract interface class com.android.internal.view.menu.MenuBuilder$Callback extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onCloseMenu(
com.android.internal.view.menu.MenuBuilder
boolean)

public abstract void onCloseSubMenu(
com.android.internal.view.menu.SubMenuBuilder)

public abstract boolean onMenuItemSelected(
com.android.internal.view.menu.MenuBuilder
android.view.MenuItem)

public abstract void onMenuModeChange(
com.android.internal.view.menu.MenuBuilder)

public abstract boolean onSubMenuSelected(
com.android.internal.view.menu.SubMenuBuilder)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1 name =MenuAdapter )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/view/menu/MenuBuilder; )
public class com.android.internal.view.menu.MenuBuilder$MenuAdapter extends android.widget.BaseAdapter

----------------FIELDS----------------

private int mMenuType

final com.android.internal.view.menu.MenuBuilder this$0
----------------METHODS----------------

public void <init>(
com.android.internal.view.menu.MenuBuilder
int)

public int getCount()

public com.android.internal.view.menu.MenuItemImpl getItem(
int)

public volatile java.lang.Object getItem(
int)

public long getItemId(
int)

public int getOffset()

public android.view.View getView(
int
android.view.View
android.view.ViewGroup)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/view/menu/MenuBuilder; )
@dalvik.annotation.InnerClass (accessFlags =0 name =MenuType )
 class com.android.internal.view.menu.MenuBuilder$MenuType extends java.lang.Object

----------------FIELDS----------------

private android.view.LayoutInflater mInflater

private int mMenuType
@dalvik.annotation.Signature (value =Ljava/lang/ref/WeakReference<Lcom/android/internal/view/menu/MenuView;>; )
private java.lang.ref.WeakReference mMenuView

final com.android.internal.view.menu.MenuBuilder this$0
----------------METHODS----------------

 void <init>(
com.android.internal.view.menu.MenuBuilder
int)

static java.lang.ref.WeakReference access$200(
com.android.internal.view.menu.MenuBuilder$MenuType)

static java.lang.ref.WeakReference access$202(
com.android.internal.view.menu.MenuBuilder$MenuType
java.lang.ref.WeakReference)

 android.view.LayoutInflater getInflater()

 com.android.internal.view.menu.MenuView getMenuView(
android.view.ViewGroup)

 boolean hasMenuView()

________________CLASS________________


public class com.android.internal.view.menu.MenuDialogHelper extends java.lang.Object implements android.content.DialogInterface$OnKeyListener, android.content.DialogInterface$OnClickListener

----------------FIELDS----------------

private android.widget.ListAdapter mAdapter

private android.app.AlertDialog mDialog

private com.android.internal.view.menu.MenuBuilder mMenu
----------------METHODS----------------

public void <init>(
com.android.internal.view.menu.MenuBuilder)

public void dismiss()

public void onClick(
android.content.DialogInterface
int)

public boolean onKey(
android.content.DialogInterface
int
android.view.KeyEvent)

public void show(
android.os.IBinder)

________________CLASS________________


public final class com.android.internal.view.menu.MenuItemImpl extends java.lang.Object implements android.view.MenuItem

----------------FIELDS----------------

private static final int CHECKABLE

private static final int CHECKED

private static final int ENABLED

private static final int EXCLUSIVE

private static final int HIDDEN

static final int NO_ICON

private static java.lang.String sDeleteShortcutLabel

private static java.lang.String sEnterShortcutLabel

private static java.lang.String sPrependShortcutLabel

private static java.lang.String sSpaceShortcutLabel

private final int mCategoryOrder

private android.view.MenuItem$OnMenuItemClickListener mClickListener

private int mFlags

private final int mGroup

private android.graphics.drawable.Drawable mIconDrawable

private int mIconResId

private final int mId

private android.content.Intent mIntent

private java.lang.Runnable mItemCallback
@dalvik.annotation.Signature (value =[Ljava/lang/ref/WeakReference<Lcom/android/internal/view/menu/MenuView$ItemView;>; )
private java.lang.ref.WeakReference[] mItemViews

private com.android.internal.view.menu.MenuBuilder mMenu

private android.view.ContextMenu$ContextMenuInfo mMenuInfo

private final int mOrdering

private char mShortcutAlphabeticChar

private char mShortcutNumericChar

private com.android.internal.view.menu.SubMenuBuilder mSubMenu

private java.lang.CharSequence mTitle

private java.lang.CharSequence mTitleCondensed
----------------METHODS----------------

 void <init>(
com.android.internal.view.menu.MenuBuilder
int
int
int
int
java.lang.CharSequence)

private com.android.internal.view.menu.MenuView$ItemView createItemView(
int
android.view.ViewGroup)

private boolean hasItemView(
int)

private boolean haveAnyOpenedIconCapableItemViews()

private void refreshShortcutOnItemViews()

private void setIconOnViews(
android.graphics.drawable.Drawable)

 void clearItemViews()

public char getAlphabeticShortcut()

 java.lang.Runnable getCallback()

public int getGroupId()

public android.graphics.drawable.Drawable getIcon()

public android.content.Intent getIntent()
@android.view.ViewDebug$CapturedViewProperty
public int getItemId()

 android.view.View getItemView(
int
android.view.ViewGroup)

public android.view.LayoutInflater getLayoutInflater(
int)

public android.view.ContextMenu$ContextMenuInfo getMenuInfo()

public char getNumericShortcut()

public int getOrder()

public int getOrdering()

 char getShortcut()

 java.lang.String getShortcutLabel()

public android.view.SubMenu getSubMenu()
@android.view.ViewDebug$CapturedViewProperty
public java.lang.CharSequence getTitle()

public java.lang.CharSequence getTitleCondensed()

 java.lang.CharSequence getTitleForItemView(
com.android.internal.view.menu.MenuView$ItemView)

public boolean hasSubMenu()

public boolean invoke()

public boolean isCheckable()

public boolean isChecked()

public boolean isEnabled()

public boolean isExclusiveCheckable()

public boolean isVisible()

 void refreshShortcutOnItemViews(
boolean
boolean)

public android.view.MenuItem setAlphabeticShortcut(
char)

public android.view.MenuItem setCallback(
java.lang.Runnable)

public android.view.MenuItem setCheckable(
boolean)

public android.view.MenuItem setChecked(
boolean)

 void setCheckedInt(
boolean)

public android.view.MenuItem setEnabled(
boolean)

public void setExclusiveCheckable(
boolean)

public android.view.MenuItem setIcon(
int)

public android.view.MenuItem setIcon(
android.graphics.drawable.Drawable)

public android.view.MenuItem setIntent(
android.content.Intent)

 void setMenuInfo(
android.view.ContextMenu$ContextMenuInfo)

public android.view.MenuItem setNumericShortcut(
char)

public android.view.MenuItem setOnMenuItemClickListener(
android.view.MenuItem$OnMenuItemClickListener)

public android.view.MenuItem setShortcut(
char
char)

 void setSubMenu(
com.android.internal.view.menu.SubMenuBuilder)

public android.view.MenuItem setTitle(
int)

public android.view.MenuItem setTitle(
java.lang.CharSequence)

public android.view.MenuItem setTitleCondensed(
java.lang.CharSequence)

public android.view.MenuItem setVisible(
boolean)

 boolean setVisibleInt(
boolean)

public boolean shouldShowIcon(
int)

 boolean shouldShowShortcut()

public java.lang.String toString()

________________CLASS________________


public class com.android.internal.view.menu.SubMenuBuilder extends com.android.internal.view.menu.MenuBuilder implements android.view.SubMenu

----------------FIELDS----------------

private com.android.internal.view.menu.MenuItemImpl mItem

private com.android.internal.view.menu.MenuBuilder mParentMenu
----------------METHODS----------------

public void <init>(
android.content.Context
com.android.internal.view.menu.MenuBuilder
com.android.internal.view.menu.MenuItemImpl)

public com.android.internal.view.menu.MenuBuilder$Callback getCallback()

public android.view.MenuItem getItem()

public android.view.Menu getParentMenu()

public com.android.internal.view.menu.MenuBuilder getRootMenu()

public boolean isQwertyMode()

public boolean isShortcutsVisible()

public void setCallback(
com.android.internal.view.menu.MenuBuilder$Callback)

public android.view.SubMenu setHeaderIcon(
int)

public android.view.SubMenu setHeaderIcon(
android.graphics.drawable.Drawable)

public android.view.SubMenu setHeaderTitle(
int)

public android.view.SubMenu setHeaderTitle(
java.lang.CharSequence)

public android.view.SubMenu setHeaderView(
android.view.View)

public android.view.SubMenu setIcon(
int)

public android.view.SubMenu setIcon(
android.graphics.drawable.Drawable)

public void setQwertyMode(
boolean)

public void setShortcutsVisible(
boolean)

________________CLASS________________


public class com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient extends android.widget.LinearLayout

----------------FIELDS----------------

private android.view.View mDefaultTouchRecepient

private final android.graphics.Rect mTempRect
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public boolean dispatchTouchEvent(
android.view.MotionEvent)

public void setDefaultTouchRecepient(
android.view.View)

________________CLASS________________


public class com.android.internal.widget.LockPatternUtils extends java.lang.Object

----------------FIELDS----------------

public static final int FAILED_ATTEMPTS_BEFORE_RESET

public static final int FAILED_ATTEMPTS_BEFORE_TIMEOUT

public static final long FAILED_ATTEMPT_COUNTDOWN_INTERVAL_MS

public static final long FAILED_ATTEMPT_TIMEOUT_MS

private static final java.lang.String LOCKOUT_PERMANENT_KEY

private static final java.lang.String LOCK_PATTERN_FILE

public static final int MIN_LOCK_PATTERN_SIZE

public static final int MIN_PATTERN_REGISTER_FAIL

private static final java.lang.String TAG

private static java.lang.String sLockPatternFilename

private final android.content.ContentResolver mContentResolver

private long mLockoutDeadline
----------------METHODS----------------

public void <init>(
android.content.ContentResolver)

private boolean getBoolean(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/util/List<Lcom/android/internal/widget/LockPatternView$Cell;>;)[B )
static byte[] patternToHash(
java.util.List)
@dalvik.annotation.Signature (value =(Ljava/util/List<Lcom/android/internal/widget/LockPatternView$Cell;>;)Ljava/lang/String; )
public static java.lang.String patternToString(
java.util.List)

private void setBoolean(
java.lang.String
boolean)
@dalvik.annotation.Signature (value =(Ljava/lang/String;)Ljava/util/List<Lcom/android/internal/widget/LockPatternView$Cell;>; )
public static java.util.List stringToPattern(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/util/List<Lcom/android/internal/widget/LockPatternView$Cell;>;)Z )
public boolean checkPattern(
java.util.List)

public long getLockoutAttemptDeadline()

public java.lang.String getNextAlarm()

public boolean isLockPatternEnabled()

public boolean isPermanentlyLocked()

public boolean isVisiblePatternEnabled()
@dalvik.annotation.Signature (value =(Ljava/util/List<Lcom/android/internal/widget/LockPatternView$Cell;>;)V )
public void saveLockPattern(
java.util.List)

public boolean savedPatternExists()

public void setLockPatternEnabled(
boolean)

public void setLockoutAttemptDeadline(
long)

public void setPermanentlyLocked(
boolean)

public void setVisiblePatternEnabled(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/LockPatternView; )
 class com.android.internal.widget.LockPatternView$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/LockPatternView; )
@dalvik.annotation.InnerClass (accessFlags =9 name =Cell )
public class com.android.internal.widget.LockPatternView$Cell extends java.lang.Object

----------------FIELDS----------------

static com.android.internal.widget.LockPatternView$Cell[][] sCells

 int column

 int row
----------------METHODS----------------

static void <clinit>()

private void <init>(
int
int)

private static void checkRange(
int
int)

public static com.android.internal.widget.LockPatternView$Cell of(
int
int)

public int getColumn()

public int getRow()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16409 name =DisplayMode )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/LockPatternView; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/android/internal/widget/LockPatternView$DisplayMode;>; )
public final class com.android.internal.widget.LockPatternView$DisplayMode extends java.lang.Enum

----------------FIELDS----------------

private static final com.android.internal.widget.LockPatternView$DisplayMode[] $VALUES

public static final com.android.internal.widget.LockPatternView$DisplayMode Animate

public static final com.android.internal.widget.LockPatternView$DisplayMode Correct

public static final com.android.internal.widget.LockPatternView$DisplayMode Wrong
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.android.internal.widget.LockPatternView$DisplayMode valueOf(
java.lang.String)

public static com.android.internal.widget.LockPatternView$DisplayMode[] values()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/LockPatternView; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnPatternListener )
public abstract interface class com.android.internal.widget.LockPatternView$OnPatternListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onPatternCleared()
@dalvik.annotation.Signature (value =(Ljava/util/List<Lcom/android/internal/widget/LockPatternView$Cell;>;)V )
public abstract void onPatternDetected(
java.util.List)

public abstract void onPatternStart()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Lcom/android/internal/widget/LockPatternView$SavedState;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/LockPatternView$SavedState; )
final class com.android.internal.widget.LockPatternView$SavedState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public com.android.internal.widget.LockPatternView$SavedState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public com.android.internal.widget.LockPatternView$SavedState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =SavedState )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/LockPatternView; )
 class com.android.internal.widget.LockPatternView$SavedState extends android.view.View$BaseSavedState

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Lcom/android/internal/widget/LockPatternView$SavedState;>; )
public static final android.os.Parcelable$Creator CREATOR

private final int mDisplayMode

private final boolean mInStealthMode

private final boolean mInputEnabled

private final java.lang.String mSerializedPattern
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
com.android.internal.widget.LockPatternView$1)

private void <init>(
android.os.Parcelable
java.lang.String
int
boolean
boolean)

 void <init>(
android.os.Parcelable
java.lang.String
int
boolean
boolean
com.android.internal.widget.LockPatternView$1)

public int getDisplayMode()

public java.lang.String getSerializedPattern()

public boolean isInStealthMode()

public boolean isInputEnabled()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/widget/LockPatternView$1;Lcom/android/internal/widget/LockPatternView$SavedState;Lcom/android/internal/widget/LockPatternView$OnPatternListener;Lcom/android/internal/widget/LockPatternView$DisplayMode;Lcom/android/internal/widget/LockPatternView$Cell; )
public class com.android.internal.widget.LockPatternView extends android.view.View

----------------FIELDS----------------

private static final int MILLIS_PER_CIRCLE_ANIMATING

private static final boolean PROFILE_DRAWING

static final int STATUS_BAR_HEIGHT

private long mAnimatingPeriodStart

private android.graphics.Bitmap mBitmapArrowGreenUp

private android.graphics.Bitmap mBitmapArrowRedUp

private android.graphics.Bitmap mBitmapBtnDefault

private android.graphics.Bitmap mBitmapBtnTouched

private android.graphics.Bitmap mBitmapCircleDefault

private android.graphics.Bitmap mBitmapCircleGreen

private android.graphics.Bitmap mBitmapCircleRed

private int mBitmapHeight

private int mBitmapWidth

private final android.graphics.Path mCurrentPath

private float mDiameterFactor

private boolean mDrawingProfilingStarted

private float mHitFactor

private float mInProgressX

private float mInProgressY

private boolean mInStealthMode

private boolean mInputEnabled

private final android.graphics.Rect mInvalidate

private com.android.internal.widget.LockPatternView$OnPatternListener mOnPatternListener

private android.graphics.Paint mPaint

private android.graphics.Paint mPathPaint
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/android/internal/widget/LockPatternView$Cell;>; )
private java.util.ArrayList mPattern

private com.android.internal.widget.LockPatternView$DisplayMode mPatternDisplayMode

private boolean[][] mPatternDrawLookup

private boolean mPatternInProgress

private float mSquareHeight

private float mSquareWidth
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

private void addCellToPattern(
com.android.internal.widget.LockPatternView$Cell)

private com.android.internal.widget.LockPatternView$Cell checkForNewHit(
float
float)

private void clearPatternDrawLookup()

private com.android.internal.widget.LockPatternView$Cell detectAndAddHit(
float
float)

private void drawArrow(
android.graphics.Canvas
float
float
com.android.internal.widget.LockPatternView$Cell
com.android.internal.widget.LockPatternView$Cell)

private void drawCircle(
android.graphics.Canvas
int
int
boolean)

private android.graphics.Bitmap getBitmapFor(
int)

private float getCenterXForColumn(
int)

private float getCenterYForRow(
int)

private int getColumnHit(
float)

private int getRowHit(
float)

private void resetPattern()

public void clearPattern()

public void disableInput()

public void enableInput()

public boolean isInStealthMode()

protected void onDraw(
android.graphics.Canvas)

protected void onMeasure(
int
int)

protected void onRestoreInstanceState(
android.os.Parcelable)

protected android.os.Parcelable onSaveInstanceState()

protected void onSizeChanged(
int
int
int
int)

public boolean onTouchEvent(
android.view.MotionEvent)

public void setDisplayMode(
com.android.internal.widget.LockPatternView$DisplayMode)

public void setInStealthMode(
boolean)

public void setOnPatternListener(
com.android.internal.widget.LockPatternView$OnPatternListener)
@dalvik.annotation.Signature (value =(Lcom/android/internal/widget/LockPatternView$DisplayMode;Ljava/util/List<Lcom/android/internal/widget/LockPatternView$Cell;>;)V )
public void setPattern(
com.android.internal.widget.LockPatternView$DisplayMode
java.util.List)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =Formatter )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/NumberPicker; )
public abstract interface class com.android.internal.widget.NumberPicker$Formatter extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.lang.String toString(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/NumberPicker; )
final class com.android.internal.widget.NumberPicker$1 extends java.lang.Object implements com.android.internal.widget.NumberPicker$Formatter

----------------FIELDS----------------

final java.lang.Object[] mArgs

final java.lang.StringBuilder mBuilder

final java.util.Formatter mFmt
----------------METHODS----------------

 void <init>()

public java.lang.String toString(
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/NumberPicker; )
 class com.android.internal.widget.NumberPicker$2 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final com.android.internal.widget.NumberPicker this$0
----------------METHODS----------------

 void <init>(
com.android.internal.widget.NumberPicker)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =NumberPickerInputFilter )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/NumberPicker; )
 class com.android.internal.widget.NumberPicker$NumberPickerInputFilter extends java.lang.Object implements android.text.InputFilter

----------------FIELDS----------------

final com.android.internal.widget.NumberPicker this$0
----------------METHODS----------------

private void <init>(
com.android.internal.widget.NumberPicker)

 void <init>(
com.android.internal.widget.NumberPicker
com.android.internal.widget.NumberPicker$1)

public java.lang.CharSequence filter(
java.lang.CharSequence
int
int
android.text.Spanned
int
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =NumberRangeKeyListener )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/NumberPicker; )
 class com.android.internal.widget.NumberPicker$NumberRangeKeyListener extends android.text.method.NumberKeyListener

----------------FIELDS----------------

final com.android.internal.widget.NumberPicker this$0
----------------METHODS----------------

private void <init>(
com.android.internal.widget.NumberPicker)

 void <init>(
com.android.internal.widget.NumberPicker
com.android.internal.widget.NumberPicker$1)

public java.lang.CharSequence filter(
java.lang.CharSequence
int
int
android.text.Spanned
int
int)

protected char[] getAcceptedChars()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/widget/NumberPicker$NumberRangeKeyListener;Lcom/android/internal/widget/NumberPicker$NumberPickerInputFilter;Lcom/android/internal/widget/NumberPicker$Formatter;Lcom/android/internal/widget/NumberPicker$OnChangedListener; )
public class com.android.internal.widget.NumberPicker extends android.widget.LinearLayout implements android.view.View$OnClickListener, android.view.View$OnFocusChangeListener, android.view.View$OnLongClickListener

----------------FIELDS----------------

private static final char[] DIGIT_CHARACTERS

public static final com.android.internal.widget.NumberPicker$Formatter TWO_DIGIT_FORMATTER

private int mCurrent

private boolean mDecrement

private com.android.internal.widget.NumberPickerButton mDecrementButton

private java.lang.String[] mDisplayedValues

private int mEnd

private com.android.internal.widget.NumberPicker$Formatter mFormatter

private final android.os.Handler mHandler

private boolean mIncrement

private com.android.internal.widget.NumberPickerButton mIncrementButton

private final android.view.LayoutInflater mInflater

private final android.text.InputFilter mInputFilter

private com.android.internal.widget.NumberPicker$OnChangedListener mListener

private final android.text.InputFilter mNumberInputFilter

private int mPrevious

private final java.lang.Runnable mRunnable

private final android.view.animation.Animation mSlideDownInAnimation

private final android.view.animation.Animation mSlideDownOutAnimation

private final android.view.animation.Animation mSlideUpInAnimation

private final android.view.animation.Animation mSlideUpOutAnimation

private long mSpeed

private int mStart

private final android.widget.TextView mText
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static boolean access$000(
com.android.internal.widget.NumberPicker)

static int access$100(
com.android.internal.widget.NumberPicker)

static java.lang.String[] access$1200(
com.android.internal.widget.NumberPicker)

static android.text.InputFilter access$1300(
com.android.internal.widget.NumberPicker)

static char[] access$1400()

static int access$1500(
com.android.internal.widget.NumberPicker
java.lang.String)

static int access$1600(
com.android.internal.widget.NumberPicker)

static android.view.animation.Animation access$200(
com.android.internal.widget.NumberPicker)

static android.view.animation.Animation access$300(
com.android.internal.widget.NumberPicker)

static void access$400(
com.android.internal.widget.NumberPicker
int
android.view.animation.Animation
android.view.animation.Animation)

static long access$500(
com.android.internal.widget.NumberPicker)

static android.os.Handler access$600(
com.android.internal.widget.NumberPicker)

static boolean access$700(
com.android.internal.widget.NumberPicker)

static android.view.animation.Animation access$800(
com.android.internal.widget.NumberPicker)

static android.view.animation.Animation access$900(
com.android.internal.widget.NumberPicker)

private void changeCurrent(
int
android.view.animation.Animation
android.view.animation.Animation)

private java.lang.String formatNumber(
int)

private int getSelectedPos(
java.lang.String)

private void notifyChange()

private void updateView()

private void validateCurrentView(
java.lang.CharSequence)

public void cancelDecrement()

public void cancelIncrement()

public void onClick(
android.view.View)

public void onFocusChange(
android.view.View
boolean)

public boolean onLongClick(
android.view.View)

public void setCurrent(
int)

public void setEnabled(
boolean)

public void setFormatter(
com.android.internal.widget.NumberPicker$Formatter)

public void setOnChangeListener(
com.android.internal.widget.NumberPicker$OnChangedListener)

public void setRange(
int
int)

public void setRange(
int
int
java.lang.String[])

public void setSpeed(
long)

________________CLASS________________


public class com.android.internal.widget.NumberPickerButton extends android.widget.ImageButton

----------------FIELDS----------------

private com.android.internal.widget.NumberPicker mNumberPicker
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private void cancelLongpress()

private void cancelLongpressIfRequired(
android.view.MotionEvent)

public boolean onKeyUp(
int
android.view.KeyEvent)

public boolean onTouchEvent(
android.view.MotionEvent)

public boolean onTrackballEvent(
android.view.MotionEvent)

public void setNumberPicker(
com.android.internal.widget.NumberPicker)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/SlidingDrawer; )
 class com.android.internal.widget.SlidingDrawer$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/SlidingDrawer; )
@dalvik.annotation.InnerClass (accessFlags =2 name =DrawerToggler )
 class com.android.internal.widget.SlidingDrawer$DrawerToggler extends java.lang.Object implements android.view.View$OnClickListener

----------------FIELDS----------------

final com.android.internal.widget.SlidingDrawer this$0
----------------METHODS----------------

private void <init>(
com.android.internal.widget.SlidingDrawer)

 void <init>(
com.android.internal.widget.SlidingDrawer
com.android.internal.widget.SlidingDrawer$1)

public void onClick(
android.view.View)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnDrawerCloseListener )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/SlidingDrawer; )
public abstract interface class com.android.internal.widget.SlidingDrawer$OnDrawerCloseListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onDrawerClosed()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnDrawerOpenListener )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/SlidingDrawer; )
public abstract interface class com.android.internal.widget.SlidingDrawer$OnDrawerOpenListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onDrawerOpened()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =OnDrawerScrollListener )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/SlidingDrawer; )
public abstract interface class com.android.internal.widget.SlidingDrawer$OnDrawerScrollListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onScrollEnded()

public abstract void onScrollStarted()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =SlidingHandler )
@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/SlidingDrawer; )
 class com.android.internal.widget.SlidingDrawer$SlidingHandler extends android.os.Handler

----------------FIELDS----------------

final com.android.internal.widget.SlidingDrawer this$0
----------------METHODS----------------

private void <init>(
com.android.internal.widget.SlidingDrawer)

 void <init>(
com.android.internal.widget.SlidingDrawer
com.android.internal.widget.SlidingDrawer$1)

public void handleMessage(
android.os.Message)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/widget/SlidingDrawer$1;Lcom/android/internal/widget/SlidingDrawer$SlidingHandler;Lcom/android/internal/widget/SlidingDrawer$DrawerToggler;Lcom/android/internal/widget/SlidingDrawer$OnDrawerScrollListener;Lcom/android/internal/widget/SlidingDrawer$OnDrawerCloseListener;Lcom/android/internal/widget/SlidingDrawer$OnDrawerOpenListener; )
public class com.android.internal.widget.SlidingDrawer extends android.view.ViewGroup

----------------FIELDS----------------

private static final int ANIMATION_FRAME_DURATION

private static final int COLLAPSED_FULL_CLOSED

private static final int EXPANDED_FULL_OPEN

private static final float MAXIMUM_ACCELERATION

private static final float MAXIMUM_MAJOR_VELOCITY

private static final float MAXIMUM_MINOR_VELOCITY

private static final float MAXIMUM_TAP_VELOCITY

private static final int MSG_ANIMATE

public static final int ORIENTATION_HORIZONTAL

public static final int ORIENTATION_VERTICAL

private static final int TAP_THRESHOLD

private static final int VELOCITY_UNITS

private boolean mAnimateOnClick

private float mAnimatedAcceleration

private float mAnimatedVelocity

private boolean mAnimating

private long mAnimationLastTime

private float mAnimationPosition

private int mBottomOffset

private android.view.View mContent

private final int mContentId

private long mCurrentAnimationTime

private boolean mExpanded

private final android.graphics.Rect mFrame

private android.view.View mHandle

private int mHandleHeight

private final int mHandleId

private int mHandleWidth

private final android.os.Handler mHandler

private final android.graphics.Rect mInvalidate

private boolean mLocked

private com.android.internal.widget.SlidingDrawer$OnDrawerCloseListener mOnDrawerCloseListener

private com.android.internal.widget.SlidingDrawer$OnDrawerOpenListener mOnDrawerOpenListener

private com.android.internal.widget.SlidingDrawer$OnDrawerScrollListener mOnDrawerScrollListener

private int mTopOffset

private int mTouchDelta

private boolean mTracking

private android.view.VelocityTracker mVelocityTracker

private boolean mVertical
----------------METHODS----------------

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

static boolean access$200(
com.android.internal.widget.SlidingDrawer)

static boolean access$300(
com.android.internal.widget.SlidingDrawer)

static void access$400(
com.android.internal.widget.SlidingDrawer)

private void animateClose(
int)

private void animateOpen(
int)

private void closeDrawer()

private void doAnimation()

private void incrementAnimation()

private void moveHandle(
int)

private void openDrawer()

private void performFling(
int
float
boolean)

private void prepareContent()

private void prepareTracking(
int)

private void stopTracking()

public void animateClose()

public void animateOpen()

public void animateToggle()

public void close()

protected void dispatchDraw(
android.graphics.Canvas)

public android.view.View getContent()

public android.view.View getHandle()

public boolean isMoving()

public boolean isOpened()

public void lock()

protected void onFinishInflate()

public boolean onInterceptTouchEvent(
android.view.MotionEvent)

protected void onLayout(
boolean
int
int
int
int)

protected void onMeasure(
int
int)

public boolean onTouchEvent(
android.view.MotionEvent)

public void open()

public void setOnDrawerCloseListener(
com.android.internal.widget.SlidingDrawer$OnDrawerCloseListener)

public void setOnDrawerOpenListener(
com.android.internal.widget.SlidingDrawer$OnDrawerOpenListener)

public void setOnDrawerScrollListener(
com.android.internal.widget.SlidingDrawer$OnDrawerScrollListener)

public void toggle()

public void unlock()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/android/internal/widget/VerticalTextSpinner; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =OnChangedListener )
public abstract interface class com.android.internal.widget.VerticalTextSpinner$OnChangedListener extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onChanged(
com.android.internal.widget.VerticalTextSpinner
int
int
java.lang.String[])

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/internal/widget/VerticalTextSpinner$OnChangedListener; )
public class com.android.internal.widget.VerticalTextSpinner extends android.view.View

----------------FIELDS----------------

private static final long DEFAULT_SCROLL_INTERVAL_MS

private static final int MIN_ANIMATIONS

private static final int SCROLL_DISTANCE

private static final int SCROLL_MODE_DOWN

private static final int SCROLL_MODE_NONE

private static final int SCROLL_MODE_UP

private static final int SELECTOR_ARROW_HEIGHT

private static final int TEXT1_Y

private static final int TEXT2_Y

private static final int TEXT3_Y

private static final int TEXT4_Y

private static final int TEXT5_Y

private static final int TEXT_MARGIN_RIGHT

private static final int TEXT_SIZE

private static final int TEXT_SPACING

private boolean isDraggingSelector

private final android.graphics.drawable.Drawable mBackgroundFocused

private int mCurrentSelectedPos

private long mDelayBetweenAnimations

private int mDistanceOfEachAnimation

private int mDownY

private boolean mIsAnimationRunning

private com.android.internal.widget.VerticalTextSpinner$OnChangedListener mListener

private int mNumberOfAnimations

private long mScrollInterval

private int mScrollMode

private android.graphics.drawable.Drawable mSelector

private final int mSelectorDefaultY

private final android.graphics.drawable.Drawable mSelectorFocused

private final int mSelectorHeight

private final int mSelectorMaxY

private final int mSelectorMinY

private final android.graphics.drawable.Drawable mSelectorNormal

private int mSelectorY

private boolean mStopAnimation

private java.lang.String mText1

private java.lang.String mText2

private java.lang.String mText3

private java.lang.String mText4

private java.lang.String mText5

private java.lang.String[] mTextList

private final android.text.TextPaint mTextPaintDark

private final android.text.TextPaint mTextPaintLight

private int mTotalAnimatedDistance

private boolean mWrapAround
----------------METHODS----------------

public void <init>(
android.content.Context)

public void <init>(
android.content.Context
android.util.AttributeSet)

public void <init>(
android.content.Context
android.util.AttributeSet
int)

private void calculateAnimationValues()

private void calculateTextPositions()

private boolean canScrollDown()

private boolean canScrollUp()

private void drawText(
android.graphics.Canvas
java.lang.String
int
android.text.TextPaint)

private int getNewIndex(
int)

private java.lang.String getTextToDraw(
int)

private void scroll()

public int getCurrentSelectedPos()

protected void onDraw(
android.graphics.Canvas)

protected void onFocusChanged(
boolean
int
android.graphics.Rect)

public boolean onKeyDown(
int
android.view.KeyEvent)

public boolean onTouchEvent(
android.view.MotionEvent)

public void setItems(
java.lang.String[])

public void setOnChangeListener(
com.android.internal.widget.VerticalTextSpinner$OnChangedListener)

public void setScrollInterval(
long)

public void setSelectedPos(
int)

public void setWrapAround(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/android/server/ResettableTimeout; )
 class com.android.server.ResettableTimeout$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =T )
@dalvik.annotation.EnclosingClass (value =Lcom/android/server/ResettableTimeout; )
 class com.android.server.ResettableTimeout$T extends java.lang.Thread

----------------FIELDS----------------

final com.android.server.ResettableTimeout this$0
----------------METHODS----------------

private void <init>(
com.android.server.ResettableTimeout)

 void <init>(
com.android.server.ResettableTimeout
com.android.server.ResettableTimeout$1)

public void run()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/android/server/ResettableTimeout$1;Lcom/android/server/ResettableTimeout$T; )
abstract class com.android.server.ResettableTimeout extends java.lang.Object

----------------FIELDS----------------

private android.os.ConditionVariable mLock

private volatile long mOffAt

private volatile boolean mOffCalled

private java.lang.Thread mThread
----------------METHODS----------------

 void <init>()

static android.os.ConditionVariable access$100(
com.android.server.ResettableTimeout)

static long access$200(
com.android.server.ResettableTimeout)

static boolean access$302(
com.android.server.ResettableTimeout
boolean)

static java.lang.Thread access$402(
com.android.server.ResettableTimeout
java.lang.Thread)

public void cancel()

public void go(
long)

public abstract void off()

public abstract void on(
boolean)

________________CLASS________________


public class com.google.android.collect.Lists extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Signature (value =<E:Ljava/lang/Object;>()Ljava/util/ArrayList<TE;>; )
public static java.util.ArrayList newArrayList()
@dalvik.annotation.Signature (value =<E:Ljava/lang/Object;>([TE;)Ljava/util/ArrayList<TE;>; )
public static transient java.util.ArrayList newArrayList(
java.lang.Object[])

________________CLASS________________


public class com.google.android.collect.Maps extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Signature (value =<K:Ljava/lang/Object;V:Ljava/lang/Object;>()Ljava/util/HashMap<TK;TV;>; )
public static java.util.HashMap newHashMap()

________________CLASS________________


public class com.google.android.collect.Sets extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Signature (value =<K:Ljava/lang/Object;>()Ljava/util/HashSet<TK;>; )
public static java.util.HashSet newHashSet()
@dalvik.annotation.Signature (value =<E:Ljava/lang/Object;>([TE;)Ljava/util/HashSet<TE;>; )
public static transient java.util.HashSet newHashSet(
java.lang.Object[])
@dalvik.annotation.Signature (value =<E:Ljava/lang/Object;>([TE;)Ljava/util/SortedSet<TE;>; )
public static transient java.util.SortedSet newSortedSet(
java.lang.Object[])

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/gdata/client/AndroidGDataClient; )
@dalvik.annotation.InnerClass (accessFlags =1546 name =HttpRequestCreator )
abstract interface class com.google.android.gdata.client.AndroidGDataClient$HttpRequestCreator extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract org.apache.http.client.methods.HttpUriRequest createRequest(
java.net.URI)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =GetRequestCreator )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/gdata/client/AndroidGDataClient; )
 class com.google.android.gdata.client.AndroidGDataClient$GetRequestCreator extends java.lang.Object implements com.google.android.gdata.client.AndroidGDataClient$HttpRequestCreator

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public org.apache.http.client.methods.HttpUriRequest createRequest(
java.net.URI)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =MediaPutRequestCreator )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/gdata/client/AndroidGDataClient; )
 class com.google.android.gdata.client.AndroidGDataClient$MediaPutRequestCreator extends java.lang.Object implements com.google.android.gdata.client.AndroidGDataClient$HttpRequestCreator

----------------FIELDS----------------

private final java.lang.String mContentType

private final java.io.InputStream mMediaInputStream
----------------METHODS----------------

public void <init>(
java.io.InputStream
java.lang.String)

public org.apache.http.client.methods.HttpUriRequest createRequest(
java.net.URI)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =PostRequestCreator )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/gdata/client/AndroidGDataClient; )
 class com.google.android.gdata.client.AndroidGDataClient$PostRequestCreator extends java.lang.Object implements com.google.android.gdata.client.AndroidGDataClient$HttpRequestCreator

----------------FIELDS----------------

private final org.apache.http.HttpEntity mEntity

private final java.lang.String mMethodOverride
----------------METHODS----------------

public void <init>(
java.lang.String
org.apache.http.HttpEntity)

public org.apache.http.client.methods.HttpUriRequest createRequest(
java.net.URI)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/google/android/gdata/client/AndroidGDataClient$MediaPutRequestCreator;Lcom/google/android/gdata/client/AndroidGDataClient$PostRequestCreator;Lcom/google/android/gdata/client/AndroidGDataClient$GetRequestCreator;Lcom/google/android/gdata/client/AndroidGDataClient$HttpRequestCreator; )
public class com.google.android.gdata.client.AndroidGDataClient extends java.lang.Object implements com.google.wireless.gdata.client.GDataClient

----------------FIELDS----------------

private static final boolean DEBUG

private static final boolean LOCAL_LOGV

private static final int MAX_REDIRECTS

private static final java.lang.String TAG

private static final java.lang.String USER_AGENT_GZIP

private static final java.lang.String X_HTTP_METHOD_OVERRIDE

private final com.google.android.net.GoogleHttpClient mHttpClient

private android.content.ContentResolver mResolver
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.ContentResolver)
@dalvik.annotation.Throws (value =Lcom/google/wireless/gdata/client/HttpException;Ljava/io/IOException; )
private java.io.InputStream createAndExecuteMethod(
com.google.android.gdata.client.AndroidGDataClient$HttpRequestCreator
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private org.apache.http.HttpEntity createEntityForEntry(
com.google.wireless.gdata.serializer.GDataSerializer
int)

public void close()
@dalvik.annotation.Throws (value =Lcom/google/wireless/gdata/client/HttpException;Ljava/io/IOException; )
public java.io.InputStream createEntry(
java.lang.String
java.lang.String
com.google.wireless.gdata.serializer.GDataSerializer)

public com.google.wireless.gdata.client.QueryParams createQueryParams()
@dalvik.annotation.Throws (value =Lcom/google/wireless/gdata/client/HttpException;Ljava/io/IOException; )
public void deleteEntry(
java.lang.String
java.lang.String)

public java.lang.String encodeUri(
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/google/wireless/gdata/client/HttpException;Ljava/io/IOException; )
public java.io.InputStream getFeedAsStream(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/google/wireless/gdata/client/HttpException;Ljava/io/IOException; )
public java.io.InputStream getMediaEntryAsStream(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/google/wireless/gdata/client/HttpException;Ljava/io/IOException; )
public java.io.InputStream updateEntry(
java.lang.String
java.lang.String
com.google.wireless.gdata.serializer.GDataSerializer)
@dalvik.annotation.Throws (value =Lcom/google/wireless/gdata/client/HttpException;Ljava/io/IOException; )
public java.io.InputStream updateMediaEntry(
java.lang.String
java.lang.String
java.io.InputStream
java.lang.String)

________________CLASS________________


public class com.google.android.gdata.client.AndroidXmlParserFactory extends java.lang.Object implements com.google.wireless.gdata.parser.xml.XmlParserFactory

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException; )
public org.xmlpull.v1.XmlPullParser createParser()
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException; )
public org.xmlpull.v1.XmlSerializer createSerializer()

________________CLASS________________


public class com.google.android.gdata.client.QueryParamsImpl extends com.google.wireless.gdata.client.QueryParams

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>; )
private final java.util.Map mParams
----------------METHODS----------------

public void <init>()

public void clear()

public java.lang.String generateQueryUrl(
java.lang.String)

public java.lang.String getParamValue(
java.lang.String)

public void setParamValue(
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Lcom/google/android/googleapps/GoogleLoginCredentialsResult;>; )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/googleapps/GoogleLoginCredentialsResult; )
final class com.google.android.googleapps.GoogleLoginCredentialsResult$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public com.google.android.googleapps.GoogleLoginCredentialsResult createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public com.google.android.googleapps.GoogleLoginCredentialsResult[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class com.google.android.googleapps.GoogleLoginCredentialsResult extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Lcom/google/android/googleapps/GoogleLoginCredentialsResult;>; )
public static final android.os.Parcelable$Creator CREATOR

private java.lang.String mAccount

private android.content.Intent mCredentialsIntent

private java.lang.String mCredentialsString
----------------METHODS----------------

static void <clinit>()

public void <init>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
com.google.android.googleapps.GoogleLoginCredentialsResult$1)

public int describeContents()

public java.lang.String getAccount()

public android.content.Intent getCredentialsIntent()

public java.lang.String getCredentialsString()

public void readFromParcel(
android.os.Parcel)

public void setAccount(
java.lang.String)

public void setCredentialsIntent(
android.content.Intent)

public void setCredentialsString(
java.lang.String)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class com.google.android.googleapps.GoogleLoginServiceBlockingHelper$1 extends java.lang.Object implements android.content.ServiceConnection

----------------FIELDS----------------

final com.google.android.googleapps.GoogleLoginServiceBlockingHelper this$0
----------------METHODS----------------

 void <init>(
com.google.android.googleapps.GoogleLoginServiceBlockingHelper)

public void onServiceConnected(
android.content.ComponentName
android.os.IBinder)

public void onServiceDisconnected(
android.content.ComponentName)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1 name =AuthenticationException )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/googleapps/GoogleLoginServiceBlockingHelper; )
public class com.google.android.googleapps.GoogleLoginServiceBlockingHelper$AuthenticationException extends java.lang.Exception

----------------FIELDS----------------

final com.google.android.googleapps.GoogleLoginServiceBlockingHelper this$0
----------------METHODS----------------

public void <init>(
com.google.android.googleapps.GoogleLoginServiceBlockingHelper)

public void <init>(
com.google.android.googleapps.GoogleLoginServiceBlockingHelper
java.lang.String)

public void <init>(
com.google.android.googleapps.GoogleLoginServiceBlockingHelper
java.lang.String
java.lang.Throwable)

public void <init>(
com.google.android.googleapps.GoogleLoginServiceBlockingHelper
java.lang.Throwable)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/google/android/googleapps/GoogleLoginServiceBlockingHelper$AuthenticationException; )
public class com.google.android.googleapps.GoogleLoginServiceBlockingHelper extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String TAG

private final double mBackoffFactor

private java.util.concurrent.locks.Condition mBindWaitCondition

private final android.content.Context mContext

private int mDelay

private volatile com.google.android.googleapps.IGoogleLoginService mGoogleLoginService

private java.util.concurrent.locks.Lock mGoogleLoginServiceLock

private final int mMaxDelaySecs

private final int mMinDelaySecs

private android.content.ServiceConnection mServiceConnection

private java.lang.Thread mServiceThread
----------------METHODS----------------

public void <init>(
android.content.Context)

static java.util.concurrent.locks.Lock access$000(
com.google.android.googleapps.GoogleLoginServiceBlockingHelper)

static java.lang.Thread access$102(
com.google.android.googleapps.GoogleLoginServiceBlockingHelper
java.lang.Thread)

static com.google.android.googleapps.IGoogleLoginService access$202(
com.google.android.googleapps.GoogleLoginServiceBlockingHelper
com.google.android.googleapps.IGoogleLoginService)

static java.util.concurrent.locks.Condition access$300(
com.google.android.googleapps.GoogleLoginServiceBlockingHelper)

private void delay()

public static java.lang.String getAccount(
android.content.Context
boolean)

public static java.lang.String[] getAccounts(
android.content.Context)

public static long getAndroidId(
android.content.Context)
@dalvik.annotation.Throws (value =Lcom/google/android/googleapps/GoogleLoginServiceBlockingHelper$AuthenticationException; )
public static java.lang.String getAuthToken(
android.content.Context
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/google/android/googleapps/GoogleLoginServiceBlockingHelper$AuthenticationException; )
public static java.lang.String getOneAuthToken(
android.content.Context
java.lang.String
java.lang.String)

public static void invalidateAuthToken(
android.content.Context
java.lang.String)

private void resetDelay()

public void close()

public java.lang.String getAccount(
boolean)

public java.lang.String[] getAccounts()

public long getAndroidId()
@dalvik.annotation.Throws (value =Lcom/google/android/googleapps/GoogleLoginServiceBlockingHelper$AuthenticationException; )
public java.lang.String getAuthToken(
java.lang.String
java.lang.String)

public com.google.android.googleapps.GoogleLoginCredentialsResult getCredentials(
java.lang.String
java.lang.String
boolean)

public com.google.android.googleapps.IGoogleLoginService getLoginService()

public void invalidateAuthToken(
java.lang.String)

public java.lang.String peekCredentials(
java.lang.String
java.lang.String)

________________CLASS________________


public class com.google.android.googleapps.GoogleLoginServiceConstants extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ACCOUNTS_KEY

public static final java.lang.String AUTHTOKEN_KEY

public static final java.lang.String AUTH_ACCOUNT_KEY

public static final int FLAG_GOOGLE_ACCOUNT

public static final int FLAG_HOSTED_ACCOUNT

public static final boolean PREFER_HOSTED

public static final java.lang.String REQUEST_EXTRAS

public static final boolean REQUIRE_GOOGLE

public static final android.content.Intent SERVICE_INTENT

public static final java.lang.String YOUTUBE_USER_KEY
----------------METHODS----------------

static void <clinit>()

private void <init>()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
final class com.google.android.googleapps.GoogleLoginServiceHelper$1 extends java.lang.Thread

----------------FIELDS----------------

final android.app.Activity val$activity

final android.os.Handler val$handler

final int val$requestCode

final boolean val$requireGoogle
----------------METHODS----------------

 void <init>(
android.app.Activity
boolean
android.os.Handler
int)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class com.google.android.googleapps.GoogleLoginServiceHelper$2$1 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final com.google.android.googleapps.GoogleLoginServiceHelper$2 this$0

final com.google.android.googleapps.GoogleLoginCredentialsResult val$credentialsResult
----------------METHODS----------------

 void <init>(
com.google.android.googleapps.GoogleLoginServiceHelper$2
com.google.android.googleapps.GoogleLoginCredentialsResult)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
final class com.google.android.googleapps.GoogleLoginServiceHelper$2 extends java.lang.Thread

----------------FIELDS----------------

final android.app.Activity val$activity

final android.os.Handler val$handler

final boolean val$promptUser

final int val$requestCode

final android.os.Bundle val$requestExtras

final boolean val$requireGoogle

final java.lang.String val$service
----------------METHODS----------------

 void <init>(
android.app.Activity
boolean
java.lang.String
boolean
android.os.Bundle
android.os.Handler
int)

public void run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
final class com.google.android.googleapps.GoogleLoginServiceHelper$3 extends java.lang.Thread

----------------FIELDS----------------

final android.app.Activity val$activity

final java.lang.String val$authToken

final android.os.Handler val$handler

final int val$requestCode
----------------METHODS----------------

 void <init>(
android.app.Activity
java.lang.String
android.os.Handler
int)

public void run()

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class com.google.android.googleapps.GoogleLoginServiceHelper$4 extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

final android.app.Activity val$activity

final android.os.Bundle val$bundle

final int val$requestCode
----------------METHODS----------------

 void <init>(
android.app.Activity
int
android.os.Bundle)

public void run()

________________CLASS________________


public class com.google.android.googleapps.GoogleLoginServiceHelper extends java.lang.Object

----------------FIELDS----------------

private static final boolean DEBUG

private static final boolean LOCAL_LOGV

private static final java.lang.String TAG
----------------METHODS----------------

private void <init>()

static void access$000(
android.os.Handler
android.app.Activity
int
android.os.Bundle)

static void access$100(
android.app.Activity
int
android.os.Bundle)

public static void getAccount(
android.app.Activity
int
boolean)

public static void getCredentials(
android.app.Activity
int
android.os.Bundle
boolean
java.lang.String
boolean)

public static void invalidateAuthToken(
android.app.Activity
int
java.lang.String)

private static void postActivityResult(
android.os.Handler
android.app.Activity
int
android.os.Bundle)

private static void sendActivityResult(
android.app.Activity
int
android.os.Bundle)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/google/android/googleapps/IGoogleLoginService$Stub; )
public abstract interface class com.google.android.googleapps.IGoogleLoginService extends java.lang.Object implements android.os.IInterface

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract com.google.android.googleapps.GoogleLoginCredentialsResult blockingGetCredentials(
java.lang.String
java.lang.String
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void deleteAllAccounts()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void deleteOneAccount(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getAccount(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String[] getAccounts()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract long getAndroidId()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String getPrimaryAccount()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void invalidateAuthToken(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract java.lang.String peekCredentials(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void saveAuthToken(
java.lang.String
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void saveNewAccount(
com.google.android.googleapps.LoginData)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void saveUsernameAndPassword(
java.lang.String
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void tryNewAccount(
com.google.android.googleapps.LoginData)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract void updatePassword(
com.google.android.googleapps.LoginData)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public abstract boolean verifyStoredPassword(
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =Proxy )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/googleapps/IGoogleLoginService$Stub; )
 class com.google.android.googleapps.IGoogleLoginService$Stub$Proxy extends java.lang.Object implements com.google.android.googleapps.IGoogleLoginService

----------------FIELDS----------------

private android.os.IBinder mRemote
----------------METHODS----------------

 void <init>(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public com.google.android.googleapps.GoogleLoginCredentialsResult blockingGetCredentials(
java.lang.String
java.lang.String
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void deleteAllAccounts()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void deleteOneAccount(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getAccount(
boolean)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String[] getAccounts()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public long getAndroidId()

public java.lang.String getInterfaceDescriptor()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String getPrimaryAccount()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void invalidateAuthToken(
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public java.lang.String peekCredentials(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void saveAuthToken(
java.lang.String
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void saveNewAccount(
com.google.android.googleapps.LoginData)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void saveUsernameAndPassword(
java.lang.String
java.lang.String
int)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void tryNewAccount(
com.google.android.googleapps.LoginData)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public void updatePassword(
com.google.android.googleapps.LoginData)
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean verifyStoredPassword(
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/google/android/googleapps/IGoogleLoginService$Stub$Proxy; )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/googleapps/IGoogleLoginService; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Stub )
public abstract class com.google.android.googleapps.IGoogleLoginService$Stub extends android.os.Binder implements com.google.android.googleapps.IGoogleLoginService

----------------FIELDS----------------

private static final java.lang.String DESCRIPTOR

static final int TRANSACTION_blockingGetCredentials

static final int TRANSACTION_deleteAllAccounts

static final int TRANSACTION_deleteOneAccount

static final int TRANSACTION_getAccount

static final int TRANSACTION_getAccounts

static final int TRANSACTION_getAndroidId

static final int TRANSACTION_getPrimaryAccount

static final int TRANSACTION_invalidateAuthToken

static final int TRANSACTION_peekCredentials

static final int TRANSACTION_saveAuthToken

static final int TRANSACTION_saveNewAccount

static final int TRANSACTION_saveUsernameAndPassword

static final int TRANSACTION_tryNewAccount

static final int TRANSACTION_updatePassword

static final int TRANSACTION_verifyStoredPassword
----------------METHODS----------------

public void <init>()

public static com.google.android.googleapps.IGoogleLoginService asInterface(
android.os.IBinder)

public android.os.IBinder asBinder()
@dalvik.annotation.Throws (value =Landroid/os/RemoteException; )
public boolean onTransact(
int
android.os.Parcel
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Lcom/google/android/googleapps/LoginData;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/googleapps/LoginData; )
final class com.google.android.googleapps.LoginData$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public com.google.android.googleapps.LoginData createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public com.google.android.googleapps.LoginData[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/googleapps/LoginData; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Status )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/google/android/googleapps/LoginData$Status;>; )
public final class com.google.android.googleapps.LoginData$Status extends java.lang.Enum

----------------FIELDS----------------

private static final com.google.android.googleapps.LoginData$Status[] $VALUES

public static final com.google.android.googleapps.LoginData$Status ACCOUNT_DISABLED

public static final com.google.android.googleapps.LoginData$Status BAD_REQUEST

public static final com.google.android.googleapps.LoginData$Status BAD_USERNAME

public static final com.google.android.googleapps.LoginData$Status CANCELLED

public static final com.google.android.googleapps.LoginData$Status CAPTCHA

public static final com.google.android.googleapps.LoginData$Status LOGIN_FAIL

public static final com.google.android.googleapps.LoginData$Status MISSING_APPS

public static final com.google.android.googleapps.LoginData$Status NETWORK_ERROR

public static final com.google.android.googleapps.LoginData$Status NO_GMAIL

public static final com.google.android.googleapps.LoginData$Status SERVER_ERROR

public static final com.google.android.googleapps.LoginData$Status SUCCESS
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static com.google.android.googleapps.LoginData$Status valueOf(
java.lang.String)

public static com.google.android.googleapps.LoginData$Status[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/google/android/googleapps/LoginData$Status; )
public class com.google.android.googleapps.LoginData extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Lcom/google/android/googleapps/LoginData;>; )
public static final android.os.Parcelable$Creator CREATOR

public java.lang.String mAuthtoken

public java.lang.String mCaptchaAnswer

public byte[] mCaptchaData

public java.lang.String mCaptchaMimeType

public java.lang.String mCaptchaToken

public java.lang.String mEncryptedPassword

public int mFlags

public java.lang.String mJsonString

public java.lang.String mPassword

public java.lang.String mService

public java.lang.String mSid

public com.google.android.googleapps.LoginData$Status mStatus

public java.lang.String mUsername
----------------METHODS----------------

static void <clinit>()

public void <init>()

private void <init>(
android.os.Parcel)

 void <init>(
android.os.Parcel
com.google.android.googleapps.LoginData$1)

public void <init>(
com.google.android.googleapps.LoginData)

public int describeContents()

public java.lang.String dump()

public void readFromParcel(
android.os.Parcel)

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________


public class com.google.android.googleapps.MsisdnTokenFetcher extends java.lang.Object

----------------FIELDS----------------

private static final int MAX_TOKEN_LENGTH

private static final java.lang.String MSISDN_URL

private static final java.lang.String PURPOSE_PARAM

private final android.content.ContentResolver mContentResolver

private final org.apache.http.client.HttpClient mHttpClient
----------------METHODS----------------

public void <init>(
android.content.ContentResolver
org.apache.http.client.HttpClient)

private org.apache.http.HttpHost createProxy()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/HttpException; )
public byte[] getToken(
java.lang.String)

________________CLASS________________


public abstract class javax.microedition.khronos.egl.EGLConfig extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________


public class com.google.android.jsr239.EGLConfigImpl extends javax.microedition.khronos.egl.EGLConfig

----------------FIELDS----------------

private int mEGLConfig
----------------METHODS----------------

 void <init>(
int)

 int get()

________________CLASS________________


public abstract class javax.microedition.khronos.egl.EGLContext extends java.lang.Object

----------------FIELDS----------------

private static final javax.microedition.khronos.egl.EGL EGL_INSTANCE
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static javax.microedition.khronos.egl.EGL getEGL()

public abstract javax.microedition.khronos.opengles.GL getGL()

________________CLASS________________


public class com.google.android.jsr239.EGLContextImpl extends javax.microedition.khronos.egl.EGLContext

----------------FIELDS----------------

 int mEGLContext

private com.google.android.jsr239.GLImpl mGLContext
----------------METHODS----------------

public void <init>(
int)

public javax.microedition.khronos.opengles.GL getGL()

________________CLASS________________


public abstract class javax.microedition.khronos.egl.EGLDisplay extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________


public class com.google.android.jsr239.EGLDisplayImpl extends javax.microedition.khronos.egl.EGLDisplay

----------------FIELDS----------------

 int mEGLDisplay
----------------METHODS----------------

public void <init>(
int)

________________CLASS________________


public class com.google.android.jsr239.EGLImpl extends java.lang.Object implements javax.microedition.khronos.egl.EGL10

----------------FIELDS----------------

private com.google.android.jsr239.EGLContextImpl mContext

private com.google.android.jsr239.EGLDisplayImpl mDisplay

private com.google.android.jsr239.EGLSurfaceImpl mSurface
----------------METHODS----------------

static void <clinit>()

public void <init>()

private native int _eglCreateContext(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
javax.microedition.khronos.egl.EGLContext
int[])

private native int _eglCreatePbufferSurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
int[])

private native void _eglCreatePixmapSurface(
javax.microedition.khronos.egl.EGLSurface
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
java.lang.Object
int[])

private native int _eglCreateWindowSurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
java.lang.Object
int[])

private native int _eglGetCurrentContext()

private native int _eglGetCurrentDisplay()

private native int _eglGetCurrentSurface(
int)

private native int _eglGetDisplay(
java.lang.Object)

private static native void _nativeClassInit()

public native boolean eglChooseConfig(
javax.microedition.khronos.egl.EGLDisplay
int[]
javax.microedition.khronos.egl.EGLConfig[]
int
int[])

public native boolean eglCopyBuffers(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLSurface
java.lang.Object)

public javax.microedition.khronos.egl.EGLContext eglCreateContext(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
javax.microedition.khronos.egl.EGLContext
int[])

public javax.microedition.khronos.egl.EGLSurface eglCreatePbufferSurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
int[])

public javax.microedition.khronos.egl.EGLSurface eglCreatePixmapSurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
java.lang.Object
int[])

public javax.microedition.khronos.egl.EGLSurface eglCreateWindowSurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
java.lang.Object
int[])

public native boolean eglDestroyContext(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLContext)

public native boolean eglDestroySurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLSurface)

public native boolean eglGetConfigAttrib(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig
int
int[])

public native boolean eglGetConfigs(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLConfig[]
int
int[])

public javax.microedition.khronos.egl.EGLContext eglGetCurrentContext()

public javax.microedition.khronos.egl.EGLDisplay eglGetCurrentDisplay()

public javax.microedition.khronos.egl.EGLSurface eglGetCurrentSurface(
int)

public javax.microedition.khronos.egl.EGLDisplay eglGetDisplay(
java.lang.Object)

public native int eglGetError()

public native boolean eglInitialize(
javax.microedition.khronos.egl.EGLDisplay
int[])

public native boolean eglMakeCurrent(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLSurface
javax.microedition.khronos.egl.EGLSurface
javax.microedition.khronos.egl.EGLContext)

public native boolean eglQueryContext(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLContext
int
int[])

public native java.lang.String eglQueryString(
javax.microedition.khronos.egl.EGLDisplay
int)

public native boolean eglQuerySurface(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLSurface
int
int[])

public native boolean eglSwapBuffers(
javax.microedition.khronos.egl.EGLDisplay
javax.microedition.khronos.egl.EGLSurface)

public native boolean eglTerminate(
javax.microedition.khronos.egl.EGLDisplay)

public native boolean eglWaitGL()

public native boolean eglWaitNative(
int
java.lang.Object)

________________CLASS________________


public abstract class javax.microedition.khronos.egl.EGLSurface extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

________________CLASS________________


public class com.google.android.jsr239.EGLSurfaceImpl extends javax.microedition.khronos.egl.EGLSurface

----------------FIELDS----------------

 int mEGLSurface

private int mNativePixelRef
----------------METHODS----------------

public void <init>()

public void <init>(
int)

________________CLASS________________


public abstract interface class javax.microedition.khronos.opengles.GL11ExtensionPack extends java.lang.Object implements javax.microedition.khronos.opengles.GL

----------------FIELDS----------------

public static final int GL_BLEND_DST_ALPHA

public static final int GL_BLEND_DST_RGB

public static final int GL_BLEND_EQUATION

public static final int GL_BLEND_EQUATION_ALPHA

public static final int GL_BLEND_EQUATION_RGB

public static final int GL_BLEND_SRC_ALPHA

public static final int GL_BLEND_SRC_RGB

public static final int GL_COLOR_ATTACHMENT0_OES

public static final int GL_COLOR_ATTACHMENT10_OES

public static final int GL_COLOR_ATTACHMENT11_OES

public static final int GL_COLOR_ATTACHMENT12_OES

public static final int GL_COLOR_ATTACHMENT13_OES

public static final int GL_COLOR_ATTACHMENT14_OES

public static final int GL_COLOR_ATTACHMENT15_OES

public static final int GL_COLOR_ATTACHMENT1_OES

public static final int GL_COLOR_ATTACHMENT2_OES

public static final int GL_COLOR_ATTACHMENT3_OES

public static final int GL_COLOR_ATTACHMENT4_OES

public static final int GL_COLOR_ATTACHMENT5_OES

public static final int GL_COLOR_ATTACHMENT6_OES

public static final int GL_COLOR_ATTACHMENT7_OES

public static final int GL_COLOR_ATTACHMENT8_OES

public static final int GL_COLOR_ATTACHMENT9_OES

public static final int GL_DECR_WRAP

public static final int GL_DEPTH_ATTACHMENT_OES

public static final int GL_DEPTH_COMPONENT

public static final int GL_DEPTH_COMPONENT16

public static final int GL_DEPTH_COMPONENT24

public static final int GL_DEPTH_COMPONENT32

public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES

public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES

public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES

public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES

public static final int GL_FRAMEBUFFER_BINDING_OES

public static final int GL_FRAMEBUFFER_COMPLETE_OES

public static final int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES

public static final int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES

public static final int GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES

public static final int GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES

public static final int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES

public static final int GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES

public static final int GL_FRAMEBUFFER_OES

public static final int GL_FRAMEBUFFER_UNSUPPORTED_OES

public static final int GL_FUNC_ADD

public static final int GL_FUNC_REVERSE_SUBTRACT

public static final int GL_FUNC_SUBTRACT

public static final int GL_INCR_WRAP

public static final int GL_INVALID_FRAMEBUFFER_OPERATION_OES

public static final int GL_MAX_COLOR_ATTACHMENTS_OES

public static final int GL_MAX_CUBE_MAP_TEXTURE_SIZE

public static final int GL_MAX_RENDERBUFFER_SIZE_OES

public static final int GL_MIRRORED_REPEAT

public static final int GL_NORMAL_MAP

public static final int GL_REFLECTION_MAP

public static final int GL_RENDERBUFFER_ALPHA_SIZE_OES

public static final int GL_RENDERBUFFER_BINDING_OES

public static final int GL_RENDERBUFFER_BLUE_SIZE_OES

public static final int GL_RENDERBUFFER_DEPTH_SIZE_OES

public static final int GL_RENDERBUFFER_GREEN_SIZE_OES

public static final int GL_RENDERBUFFER_HEIGHT_OES

public static final int GL_RENDERBUFFER_INTERNAL_FORMAT_OES

public static final int GL_RENDERBUFFER_OES

public static final int GL_RENDERBUFFER_RED_SIZE_OES

public static final int GL_RENDERBUFFER_STENCIL_SIZE_OES

public static final int GL_RENDERBUFFER_WIDTH_OES

public static final int GL_RGB565_OES

public static final int GL_RGB5_A1

public static final int GL_RGB8

public static final int GL_RGBA4

public static final int GL_RGBA8

public static final int GL_STENCIL_ATTACHMENT_OES

public static final int GL_STENCIL_INDEX

public static final int GL_STENCIL_INDEX1_OES

public static final int GL_STENCIL_INDEX4_OES

public static final int GL_STENCIL_INDEX8_OES

public static final int GL_STR

public static final int GL_TEXTURE_BINDING_CUBE_MAP

public static final int GL_TEXTURE_CUBE_MAP

public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_X

public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y

public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z

public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_X

public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Y

public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Z

public static final int GL_TEXTURE_GEN_MODE

public static final int GL_TEXTURE_GEN_STR
----------------METHODS----------------

public abstract void glBindFramebufferOES(
int
int)

public abstract void glBindRenderbufferOES(
int
int)

public abstract void glBindTexture(
int
int)

public abstract void glBlendEquation(
int)

public abstract void glBlendEquationSeparate(
int
int)

public abstract void glBlendFuncSeparate(
int
int
int
int)

public abstract int glCheckFramebufferStatusOES(
int)

public abstract void glCompressedTexImage2D(
int
int
int
int
int
int
int
java.nio.Buffer)

public abstract void glCopyTexImage2D(
int
int
int
int
int
int
int
int)

public abstract void glDeleteFramebuffersOES(
int
java.nio.IntBuffer)

public abstract void glDeleteFramebuffersOES(
int
int[]
int)

public abstract void glDeleteRenderbuffersOES(
int
java.nio.IntBuffer)

public abstract void glDeleteRenderbuffersOES(
int
int[]
int)

public abstract void glEnable(
int)

public abstract void glFramebufferRenderbufferOES(
int
int
int
int)

public abstract void glFramebufferTexture2DOES(
int
int
int
int
int)

public abstract void glGenFramebuffersOES(
int
java.nio.IntBuffer)

public abstract void glGenFramebuffersOES(
int
int[]
int)

public abstract void glGenRenderbuffersOES(
int
java.nio.IntBuffer)

public abstract void glGenRenderbuffersOES(
int
int[]
int)

public abstract void glGenerateMipmapOES(
int)

public abstract void glGetFramebufferAttachmentParameterivOES(
int
int
int
java.nio.IntBuffer)

public abstract void glGetFramebufferAttachmentParameterivOES(
int
int
int
int[]
int)

public abstract void glGetIntegerv(
int
java.nio.IntBuffer)

public abstract void glGetIntegerv(
int
int[]
int)

public abstract void glGetRenderbufferParameterivOES(
int
int
java.nio.IntBuffer)

public abstract void glGetRenderbufferParameterivOES(
int
int
int[]
int)

public abstract void glGetTexGenfv(
int
int
java.nio.FloatBuffer)

public abstract void glGetTexGenfv(
int
int
float[]
int)

public abstract void glGetTexGeniv(
int
int
java.nio.IntBuffer)

public abstract void glGetTexGeniv(
int
int
int[]
int)

public abstract void glGetTexGenxv(
int
int
java.nio.IntBuffer)

public abstract void glGetTexGenxv(
int
int
int[]
int)

public abstract boolean glIsFramebufferOES(
int)

public abstract boolean glIsRenderbufferOES(
int)

public abstract void glRenderbufferStorageOES(
int
int
int
int)

public abstract void glStencilOp(
int
int
int)

public abstract void glTexEnvf(
int
int
float)

public abstract void glTexEnvfv(
int
int
java.nio.FloatBuffer)

public abstract void glTexEnvfv(
int
int
float[]
int)

public abstract void glTexEnvx(
int
int
int)

public abstract void glTexEnvxv(
int
int
java.nio.IntBuffer)

public abstract void glTexEnvxv(
int
int
int[]
int)

public abstract void glTexGenf(
int
int
float)

public abstract void glTexGenfv(
int
int
java.nio.FloatBuffer)

public abstract void glTexGenfv(
int
int
float[]
int)

public abstract void glTexGeni(
int
int
int)

public abstract void glTexGeniv(
int
int
java.nio.IntBuffer)

public abstract void glTexGeniv(
int
int
int[]
int)

public abstract void glTexGenx(
int
int
int)

public abstract void glTexGenxv(
int
int
java.nio.IntBuffer)

public abstract void glTexGenxv(
int
int
int[]
int)

public abstract void glTexParameterf(
int
int
float)

________________CLASS________________


public class com.google.android.jsr239.GLImpl extends java.lang.Object implements javax.microedition.khronos.opengles.GL10, javax.microedition.khronos.opengles.GL10Ext, javax.microedition.khronos.opengles.GL11, javax.microedition.khronos.opengles.GL11Ext, javax.microedition.khronos.opengles.GL11ExtensionPack

----------------FIELDS----------------

 java.nio.Buffer _colorPointer

 java.nio.Buffer _normalPointer

 java.nio.Buffer _texCoordPointer

 java.nio.Buffer _vertexPointer
----------------METHODS----------------

static void <clinit>()

public void <init>()

private static native void _nativeClassInit()

private native void glColorPointerBounds(
int
int
int
java.nio.Buffer
int)

private native void glNormalPointerBounds(
int
int
java.nio.Buffer
int)

private native void glTexCoordPointerBounds(
int
int
int
java.nio.Buffer
int)

private native void glVertexPointerBounds(
int
int
int
java.nio.Buffer
int)

public native java.lang.String _glGetString(
int)

public native void glActiveTexture(
int)

public native void glAlphaFunc(
int
float)

public native void glAlphaFuncx(
int
int)

public native void glBindBuffer(
int
int)

public native void glBindFramebufferOES(
int
int)

public native void glBindRenderbufferOES(
int
int)

public native void glBindTexture(
int
int)

public native void glBlendEquation(
int)

public native void glBlendEquationSeparate(
int
int)

public native void glBlendFunc(
int
int)

public native void glBlendFuncSeparate(
int
int
int
int)

public native void glBufferData(
int
int
java.nio.Buffer
int)

public native void glBufferSubData(
int
int
int
java.nio.Buffer)

public native int glCheckFramebufferStatusOES(
int)

public native void glClear(
int)

public native void glClearColor(
float
float
float
float)

public native void glClearColorx(
int
int
int
int)

public native void glClearDepthf(
float)

public native void glClearDepthx(
int)

public native void glClearStencil(
int)

public native void glClientActiveTexture(
int)

public native void glClipPlanef(
int
java.nio.FloatBuffer)

public native void glClipPlanef(
int
float[]
int)

public native void glClipPlanex(
int
java.nio.IntBuffer)

public native void glClipPlanex(
int
int[]
int)

public native void glColor4f(
float
float
float
float)

public native void glColor4ub(
byte
byte
byte
byte)

public native void glColor4x(
int
int
int
int)

public native void glColorMask(
boolean
boolean
boolean
boolean)

public native void glColorPointer(
int
int
int
int)

public void glColorPointer(
int
int
int
java.nio.Buffer)

public native void glCompressedTexImage2D(
int
int
int
int
int
int
int
java.nio.Buffer)

public native void glCompressedTexSubImage2D(
int
int
int
int
int
int
int
int
java.nio.Buffer)

public native void glCopyTexImage2D(
int
int
int
int
int
int
int
int)

public native void glCopyTexSubImage2D(
int
int
int
int
int
int
int
int)

public native void glCullFace(
int)

public native void glCurrentPaletteMatrixOES(
int)

public native void glDeleteBuffers(
int
java.nio.IntBuffer)

public native void glDeleteBuffers(
int
int[]
int)

public native void glDeleteFramebuffersOES(
int
java.nio.IntBuffer)

public native void glDeleteFramebuffersOES(
int
int[]
int)

public native void glDeleteRenderbuffersOES(
int
java.nio.IntBuffer)

public native void glDeleteRenderbuffersOES(
int
int[]
int)

public native void glDeleteTextures(
int
java.nio.IntBuffer)

public native void glDeleteTextures(
int
int[]
int)

public native void glDepthFunc(
int)

public native void glDepthMask(
boolean)

public native void glDepthRangef(
float
float)

public native void glDepthRangex(
int
int)

public native void glDisable(
int)

public native void glDisableClientState(
int)

public native void glDrawArrays(
int
int
int)

public native void glDrawElements(
int
int
int
int)

public native void glDrawElements(
int
int
int
java.nio.Buffer)

public native void glDrawTexfOES(
float
float
float
float
float)

public native void glDrawTexfvOES(
java.nio.FloatBuffer)

public native void glDrawTexfvOES(
float[]
int)

public native void glDrawTexiOES(
int
int
int
int
int)

public native void glDrawTexivOES(
java.nio.IntBuffer)

public native void glDrawTexivOES(
int[]
int)

public native void glDrawTexsOES(
short
short
short
short
short)

public native void glDrawTexsvOES(
java.nio.ShortBuffer)

public native void glDrawTexsvOES(
short[]
int)

public native void glDrawTexxOES(
int
int
int
int
int)

public native void glDrawTexxvOES(
java.nio.IntBuffer)

public native void glDrawTexxvOES(
int[]
int)

public native void glEnable(
int)

public native void glEnableClientState(
int)

public native void glFinish()

public native void glFlush()

public native void glFogf(
int
float)

public native void glFogfv(
int
java.nio.FloatBuffer)

public native void glFogfv(
int
float[]
int)

public native void glFogx(
int
int)

public native void glFogxv(
int
java.nio.IntBuffer)

public native void glFogxv(
int
int[]
int)

public native void glFramebufferRenderbufferOES(
int
int
int
int)

public native void glFramebufferTexture2DOES(
int
int
int
int
int)

public native void glFrontFace(
int)

public native void glFrustumf(
float
float
float
float
float
float)

public native void glFrustumx(
int
int
int
int
int
int)

public native void glGenBuffers(
int
java.nio.IntBuffer)

public native void glGenBuffers(
int
int[]
int)

public native void glGenFramebuffersOES(
int
java.nio.IntBuffer)

public native void glGenFramebuffersOES(
int
int[]
int)

public native void glGenRenderbuffersOES(
int
java.nio.IntBuffer)

public native void glGenRenderbuffersOES(
int
int[]
int)

public native void glGenTextures(
int
java.nio.IntBuffer)

public native void glGenTextures(
int
int[]
int)

public native void glGenerateMipmapOES(
int)

public native void glGetBooleanv(
int
java.nio.IntBuffer)

public native void glGetBooleanv(
int
boolean[]
int)

public native void glGetBufferParameteriv(
int
int
java.nio.IntBuffer)

public native void glGetBufferParameteriv(
int
int
int[]
int)

public native void glGetClipPlanef(
int
java.nio.FloatBuffer)

public native void glGetClipPlanef(
int
float[]
int)

public native void glGetClipPlanex(
int
java.nio.IntBuffer)

public native void glGetClipPlanex(
int
int[]
int)

public native int glGetError()

public native void glGetFixedv(
int
java.nio.IntBuffer)

public native void glGetFixedv(
int
int[]
int)

public native void glGetFloatv(
int
java.nio.FloatBuffer)

public native void glGetFloatv(
int
float[]
int)

public native void glGetFramebufferAttachmentParameterivOES(
int
int
int
java.nio.IntBuffer)

public native void glGetFramebufferAttachmentParameterivOES(
int
int
int
int[]
int)

public native void glGetIntegerv(
int
java.nio.IntBuffer)

public native void glGetIntegerv(
int
int[]
int)

public native void glGetLightfv(
int
int
java.nio.FloatBuffer)

public native void glGetLightfv(
int
int
float[]
int)

public native void glGetLightxv(
int
int
java.nio.IntBuffer)

public native void glGetLightxv(
int
int
int[]
int)

public native void glGetMaterialfv(
int
int
java.nio.FloatBuffer)

public native void glGetMaterialfv(
int
int
float[]
int)

public native void glGetMaterialxv(
int
int
java.nio.IntBuffer)

public native void glGetMaterialxv(
int
int
int[]
int)

public void glGetPointerv(
int
java.nio.Buffer[])

public native void glGetRenderbufferParameterivOES(
int
int
java.nio.IntBuffer)

public native void glGetRenderbufferParameterivOES(
int
int
int[]
int)

public java.lang.String glGetString(
int)

public native void glGetTexEnviv(
int
int
java.nio.IntBuffer)

public native void glGetTexEnviv(
int
int
int[]
int)

public native void glGetTexEnvxv(
int
int
java.nio.IntBuffer)

public native void glGetTexEnvxv(
int
int
int[]
int)

public native void glGetTexGenfv(
int
int
java.nio.FloatBuffer)

public native void glGetTexGenfv(
int
int
float[]
int)

public native void glGetTexGeniv(
int
int
java.nio.IntBuffer)

public native void glGetTexGeniv(
int
int
int[]
int)

public native void glGetTexGenxv(
int
int
java.nio.IntBuffer)

public native void glGetTexGenxv(
int
int
int[]
int)

public native void glGetTexParameterfv(
int
int
java.nio.FloatBuffer)

public native void glGetTexParameterfv(
int
int
float[]
int)

public native void glGetTexParameteriv(
int
int
java.nio.IntBuffer)

public native void glGetTexParameteriv(
int
int
int[]
int)

public native void glGetTexParameterxv(
int
int
java.nio.IntBuffer)

public native void glGetTexParameterxv(
int
int
int[]
int)

public native void glHint(
int
int)

public native boolean glIsBuffer(
int)

public native boolean glIsEnabled(
int)

public native boolean glIsFramebufferOES(
int)

public native boolean glIsRenderbufferOES(
int)

public native boolean glIsTexture(
int)

public native void glLightModelf(
int
float)

public native void glLightModelfv(
int
java.nio.FloatBuffer)

public native void glLightModelfv(
int
float[]
int)

public native void glLightModelx(
int
int)

public native void glLightModelxv(
int
java.nio.IntBuffer)

public native void glLightModelxv(
int
int[]
int)

public native void glLightf(
int
int
float)

public native void glLightfv(
int
int
java.nio.FloatBuffer)

public native void glLightfv(
int
int
float[]
int)

public native void glLightx(
int
int
int)

public native void glLightxv(
int
int
java.nio.IntBuffer)

public native void glLightxv(
int
int
int[]
int)

public native void glLineWidth(
float)

public native void glLineWidthx(
int)

public native void glLoadIdentity()

public native void glLoadMatrixf(
java.nio.FloatBuffer)

public native void glLoadMatrixf(
float[]
int)

public native void glLoadMatrixx(
java.nio.IntBuffer)

public native void glLoadMatrixx(
int[]
int)

public native void glLoadPaletteFromModelViewMatrixOES()

public native void glLogicOp(
int)

public native void glMaterialf(
int
int
float)

public native void glMaterialfv(
int
int
java.nio.FloatBuffer)

public native void glMaterialfv(
int
int
float[]
int)

public native void glMaterialx(
int
int
int)

public native void glMaterialxv(
int
int
java.nio.IntBuffer)

public native void glMaterialxv(
int
int
int[]
int)

public native void glMatrixIndexPointerOES(
int
int
int
int)

public native void glMatrixIndexPointerOES(
int
int
int
java.nio.Buffer)

public native void glMatrixMode(
int)

public native void glMultMatrixf(
java.nio.FloatBuffer)

public native void glMultMatrixf(
float[]
int)

public native void glMultMatrixx(
java.nio.IntBuffer)

public native void glMultMatrixx(
int[]
int)

public native void glMultiTexCoord4f(
int
float
float
float
float)

public native void glMultiTexCoord4x(
int
int
int
int
int)

public native void glNormal3f(
float
float
float)

public native void glNormal3x(
int
int
int)

public native void glNormalPointer(
int
int
int)

public void glNormalPointer(
int
int
java.nio.Buffer)

public native void glOrthof(
float
float
float
float
float
float)

public native void glOrthox(
int
int
int
int
int
int)

public native void glPixelStorei(
int
int)

public native void glPointParameterf(
int
float)

public native void glPointParameterfv(
int
java.nio.FloatBuffer)

public native void glPointParameterfv(
int
float[]
int)

public native void glPointParameterx(
int
int)

public native void glPointParameterxv(
int
java.nio.IntBuffer)

public native void glPointParameterxv(
int
int[]
int)

public native void glPointSize(
float)

public native void glPointSizePointerOES(
int
int
java.nio.Buffer)

public native void glPointSizex(
int)

public native void glPolygonOffset(
float
float)

public native void glPolygonOffsetx(
int
int)

public native void glPopMatrix()

public native void glPushMatrix()

public native int glQueryMatrixxOES(
java.nio.IntBuffer
java.nio.IntBuffer)

public native int glQueryMatrixxOES(
int[]
int
int[]
int)

public native void glReadPixels(
int
int
int
int
int
int
java.nio.Buffer)

public native void glRenderbufferStorageOES(
int
int
int
int)

public native void glRotatef(
float
float
float
float)

public native void glRotatex(
int
int
int
int)

public native void glSampleCoverage(
float
boolean)

public native void glSampleCoveragex(
int
boolean)

public native void glScalef(
float
float
float)

public native void glScalex(
int
int
int)

public native void glScissor(
int
int
int
int)

public native void glShadeModel(
int)

public native void glStencilFunc(
int
int
int)

public native void glStencilMask(
int)

public native void glStencilOp(
int
int
int)

public native void glTexCoordPointer(
int
int
int
int)

public void glTexCoordPointer(
int
int
int
java.nio.Buffer)

public native void glTexEnvf(
int
int
float)

public native void glTexEnvfv(
int
int
java.nio.FloatBuffer)

public native void glTexEnvfv(
int
int
float[]
int)

public native void glTexEnvi(
int
int
int)

public native void glTexEnviv(
int
int
java.nio.IntBuffer)

public native void glTexEnviv(
int
int
int[]
int)

public native void glTexEnvx(
int
int
int)

public native void glTexEnvxv(
int
int
java.nio.IntBuffer)

public native void glTexEnvxv(
int
int
int[]
int)

public native void glTexGenf(
int
int
float)

public native void glTexGenfv(
int
int
java.nio.FloatBuffer)

public native void glTexGenfv(
int
int
float[]
int)

public native void glTexGeni(
int
int
int)

public native void glTexGeniv(
int
int
java.nio.IntBuffer)

public native void glTexGeniv(
int
int
int[]
int)

public native void glTexGenx(
int
int
int)

public native void glTexGenxv(
int
int
java.nio.IntBuffer)

public native void glTexGenxv(
int
int
int[]
int)

public native void glTexImage2D(
int
int
int
int
int
int
int
int
java.nio.Buffer)

public native void glTexParameterf(
int
int
float)

public native void glTexParameterfv(
int
int
java.nio.FloatBuffer)

public native void glTexParameterfv(
int
int
float[]
int)

public native void glTexParameteri(
int
int
int)

public native void glTexParameteriv(
int
int
java.nio.IntBuffer)

public native void glTexParameteriv(
int
int
int[]
int)

public native void glTexParameterx(
int
int
int)

public native void glTexParameterxv(
int
int
java.nio.IntBuffer)

public native void glTexParameterxv(
int
int
int[]
int)

public native void glTexSubImage2D(
int
int
int
int
int
int
int
int
java.nio.Buffer)

public native void glTranslatef(
float
float
float)

public native void glTranslatex(
int
int
int)

public native void glVertexPointer(
int
int
int
int)

public void glVertexPointer(
int
int
int
java.nio.Buffer)

public native void glViewport(
int
int
int
int)

public native void glWeightPointerOES(
int
int
int
int)

public native void glWeightPointerOES(
int
int
int
java.nio.Buffer)

________________CLASS________________


public class com.google.android.mms.ContentType extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String APP_DRM_CONTENT

public static final java.lang.String APP_DRM_MESSAGE

public static final java.lang.String APP_SMIL

public static final java.lang.String APP_WAP_XHTML

public static final java.lang.String APP_XHTML

public static final java.lang.String AUDIO_3GPP

public static final java.lang.String AUDIO_AAC

public static final java.lang.String AUDIO_AMR

public static final java.lang.String AUDIO_IMELODY

public static final java.lang.String AUDIO_MID

public static final java.lang.String AUDIO_MIDI

public static final java.lang.String AUDIO_MP3

public static final java.lang.String AUDIO_MP4

public static final java.lang.String AUDIO_MPEG

public static final java.lang.String AUDIO_MPEG3

public static final java.lang.String AUDIO_MPG

public static final java.lang.String AUDIO_OGG

public static final java.lang.String AUDIO_UNSPECIFIED

public static final java.lang.String AUDIO_X_MID

public static final java.lang.String AUDIO_X_MIDI

public static final java.lang.String AUDIO_X_MP3

public static final java.lang.String AUDIO_X_MPEG

public static final java.lang.String AUDIO_X_MPEG3

public static final java.lang.String AUDIO_X_MPG

public static final java.lang.String IMAGE_GIF

public static final java.lang.String IMAGE_JPEG

public static final java.lang.String IMAGE_JPG

public static final java.lang.String IMAGE_PNG

public static final java.lang.String IMAGE_UNSPECIFIED

public static final java.lang.String IMAGE_WBMP

public static final java.lang.String MMS_GENERIC

public static final java.lang.String MMS_MESSAGE

public static final java.lang.String MULTIPART_MIXED

public static final java.lang.String MULTIPART_RELATED

public static final java.lang.String TEXT_HTML

public static final java.lang.String TEXT_PLAIN

public static final java.lang.String TEXT_VCALENDAR

public static final java.lang.String TEXT_VCARD

public static final java.lang.String VIDEO_3G2

public static final java.lang.String VIDEO_3GPP

public static final java.lang.String VIDEO_H263

public static final java.lang.String VIDEO_MP4

public static final java.lang.String VIDEO_UNSPECIFIED
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/lang/String;>; )
private static final java.util.ArrayList sSupportedAudioTypes
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/lang/String;>; )
private static final java.util.ArrayList sSupportedContentTypes
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/lang/String;>; )
private static final java.util.ArrayList sSupportedImageTypes
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Ljava/lang/String;>; )
private static final java.util.ArrayList sSupportedVideoTypes
----------------METHODS----------------

static void <clinit>()

private void <init>()
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Ljava/lang/String;>; )
public static java.util.ArrayList getAudioTypes()
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Ljava/lang/String;>; )
public static java.util.ArrayList getImageTypes()
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Ljava/lang/String;>; )
public static java.util.ArrayList getSupportedTypes()
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Ljava/lang/String;>; )
public static java.util.ArrayList getVideoTypes()

public static boolean isAudioType(
java.lang.String)

public static boolean isDrmType(
java.lang.String)

public static boolean isImageType(
java.lang.String)

public static boolean isSupportedAudioType(
java.lang.String)

public static boolean isSupportedImageType(
java.lang.String)

public static boolean isSupportedType(
java.lang.String)

public static boolean isSupportedVideoType(
java.lang.String)

public static boolean isTextType(
java.lang.String)

public static boolean isUnspecified(
java.lang.String)

public static boolean isVideoType(
java.lang.String)

________________CLASS________________


public class com.google.android.mms.MmsException extends java.lang.Exception

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

public void <init>(
java.lang.Throwable)

________________CLASS________________


public class com.google.android.mms.InvalidHeaderValueException extends com.google.android.mms.MmsException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public class com.google.android.mms.pdu.GenericPdu extends java.lang.Object

----------------FIELDS----------------

 com.google.android.mms.pdu.PduHeaders mPduHeaders
----------------METHODS----------------

public void <init>()

 void <init>(
com.google.android.mms.pdu.PduHeaders)

public int getMessageType()

public int getMmsVersion()

 com.google.android.mms.pdu.PduHeaders getPduHeaders()
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setMessageType(
int)
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setMmsVersion(
int)

________________CLASS________________


public class com.google.android.mms.pdu.AcknowledgeInd extends com.google.android.mms.pdu.GenericPdu

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void <init>(
int
byte[])

 void <init>(
com.google.android.mms.pdu.PduHeaders)

public int getReportAllowed()

public byte[] getTransactionId()
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setReportAllowed(
int)

public void setTransactionId(
byte[])

________________CLASS________________


public class com.google.android.mms.pdu.Base64 extends java.lang.Object

----------------FIELDS----------------

static final int BASELENGTH

static final int FOURBYTE

static final byte PAD

private static byte[] base64Alphabet
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static byte[] decodeBase64(
byte[])

static byte[] discardNonBase64(
byte[])

private static boolean isBase64(
byte)

________________CLASS________________


public class com.google.android.mms.pdu.CharacterSets extends java.lang.Object

----------------FIELDS----------------

static final boolean $assertionsDisabled

public static final int ANY_CHARSET

public static final int BIG5

public static final int DEFAULT_CHARSET

public static final java.lang.String DEFAULT_CHARSET_NAME

public static final int ISO_8859_1

public static final int ISO_8859_2

public static final int ISO_8859_3

public static final int ISO_8859_4

public static final int ISO_8859_5

public static final int ISO_8859_6

public static final int ISO_8859_7

public static final int ISO_8859_8

public static final int ISO_8859_9

private static final int[] MIBENUM_NUMBERS
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/String;>; )
private static final java.util.HashMap MIBENUM_TO_NAME_MAP

public static final java.lang.String MIMENAME_ANY_CHARSET

public static final java.lang.String MIMENAME_BIG5

public static final java.lang.String MIMENAME_ISO_8859_1

public static final java.lang.String MIMENAME_ISO_8859_2

public static final java.lang.String MIMENAME_ISO_8859_3

public static final java.lang.String MIMENAME_ISO_8859_4

public static final java.lang.String MIMENAME_ISO_8859_5

public static final java.lang.String MIMENAME_ISO_8859_6

public static final java.lang.String MIMENAME_ISO_8859_7

public static final java.lang.String MIMENAME_ISO_8859_8

public static final java.lang.String MIMENAME_ISO_8859_9

public static final java.lang.String MIMENAME_SHIFT_JIS

public static final java.lang.String MIMENAME_UCS2

public static final java.lang.String MIMENAME_US_ASCII

public static final java.lang.String MIMENAME_UTF_16

public static final java.lang.String MIMENAME_UTF_8

private static final java.lang.String[] MIME_NAMES
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/Integer;>; )
private static final java.util.HashMap NAME_TO_MIBENUM_MAP

public static final int SHIFT_JIS

public static final int UCS2

public static final int US_ASCII

public static final int UTF_16

public static final int UTF_8
----------------METHODS----------------

static void <clinit>()

private void <init>()
@dalvik.annotation.Throws (value =Ljava/io/UnsupportedEncodingException; )
public static int getMibEnumValue(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/UnsupportedEncodingException; )
public static java.lang.String getMimeName(
int)

________________CLASS________________


public class com.google.android.mms.pdu.DeliveryInd extends com.google.android.mms.pdu.GenericPdu

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void <init>()

 void <init>(
com.google.android.mms.pdu.PduHeaders)

public long getDate()

public byte[] getMessageId()

public int getStatus()

public com.google.android.mms.pdu.EncodedStringValue[] getTo()

public void setDate(
long)

public void setMessageId(
byte[])
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setStatus(
int)

public void setTo(
com.google.android.mms.pdu.EncodedStringValue[])

________________CLASS________________


public class com.google.android.mms.pdu.EncodedStringValue extends java.lang.Object implements java.lang.Cloneable

----------------FIELDS----------------

private static final boolean DEBUG

private static final boolean LOCAL_LOGV

private static final java.lang.String TAG

private int mCharacterSet

private byte[] mData
----------------METHODS----------------

public void <init>(
int
byte[])

public void <init>(
java.lang.String)

public void <init>(
byte[])

public static java.lang.String concat(
com.google.android.mms.pdu.EncodedStringValue[])

public static com.google.android.mms.pdu.EncodedStringValue copy(
com.google.android.mms.pdu.EncodedStringValue)

public static com.google.android.mms.pdu.EncodedStringValue[] extract(
java.lang.String)

public void appendTextString(
byte[])
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public int getCharacterSet()

public java.lang.String getString()

public byte[] getTextString()

public void setCharacterSet(
int)

public void setTextString(
byte[])

public com.google.android.mms.pdu.EncodedStringValue[] split(
java.lang.String)

________________CLASS________________


public class com.google.android.mms.pdu.MultimediaMessagePdu extends com.google.android.mms.pdu.GenericPdu

----------------FIELDS----------------

private com.google.android.mms.pdu.PduBody mMessageBody
----------------METHODS----------------

public void <init>()

 void <init>(
com.google.android.mms.pdu.PduHeaders)

public void <init>(
com.google.android.mms.pdu.PduHeaders
com.google.android.mms.pdu.PduBody)

public void addTo(
com.google.android.mms.pdu.EncodedStringValue)

public com.google.android.mms.pdu.PduBody getBody()

public long getDate()

public int getPriority()

public com.google.android.mms.pdu.EncodedStringValue getSubject()

public com.google.android.mms.pdu.EncodedStringValue[] getTo()

public void setBody(
com.google.android.mms.pdu.PduBody)

public void setDate(
long)
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setPriority(
int)

public void setSubject(
com.google.android.mms.pdu.EncodedStringValue)

________________CLASS________________


public class com.google.android.mms.pdu.NotificationInd extends com.google.android.mms.pdu.GenericPdu

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void <init>()

 void <init>(
com.google.android.mms.pdu.PduHeaders)

public int getContentClass()

public byte[] getContentLocation()

public int getDeliveryReport()

public long getExpiry()

public com.google.android.mms.pdu.EncodedStringValue getFrom()

public byte[] getMessageClass()

public long getMessageSize()

public com.google.android.mms.pdu.EncodedStringValue getSubject()

public byte[] getTransactionId()
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setContentClass(
int)

public void setContentLocation(
byte[])
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setDeliveryReport(
int)

public void setExpiry(
long)

public void setFrom(
com.google.android.mms.pdu.EncodedStringValue)

public void setMessageClass(
byte[])

public void setMessageSize(
long)

public void setSubject(
com.google.android.mms.pdu.EncodedStringValue)

public void setTransactionId(
byte[])

________________CLASS________________


public class com.google.android.mms.pdu.NotifyRespInd extends com.google.android.mms.pdu.GenericPdu

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void <init>(
int
byte[]
int)

 void <init>(
com.google.android.mms.pdu.PduHeaders)

public int getReportAllowed()

public int getStatus()

public byte[] getTransactionId()
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setReportAllowed(
int)
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setStatus(
int)

public void setTransactionId(
byte[])

________________CLASS________________


public class com.google.android.mms.pdu.PduBody extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Lcom/google/android/mms/pdu/PduPart;>; )
private java.util.Map mPartMapByContentId
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Lcom/google/android/mms/pdu/PduPart;>; )
private java.util.Map mPartMapByContentLocation
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Lcom/google/android/mms/pdu/PduPart;>; )
private java.util.Map mPartMapByFileName
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Lcom/google/android/mms/pdu/PduPart;>; )
private java.util.Map mPartMapByName
@dalvik.annotation.Signature (value =Ljava/util/Vector<Lcom/google/android/mms/pdu/PduPart;>; )
private java.util.Vector mParts
----------------METHODS----------------

public void <init>()

private void putPartToMaps(
com.google.android.mms.pdu.PduPart)

public void addPart(
int
com.google.android.mms.pdu.PduPart)

public boolean addPart(
com.google.android.mms.pdu.PduPart)

public com.google.android.mms.pdu.PduPart getPart(
int)

public com.google.android.mms.pdu.PduPart getPartByContentId(
java.lang.String)

public com.google.android.mms.pdu.PduPart getPartByContentLocation(
java.lang.String)

public com.google.android.mms.pdu.PduPart getPartByFileName(
java.lang.String)

public com.google.android.mms.pdu.PduPart getPartByName(
java.lang.String)

public int getPartIndex(
com.google.android.mms.pdu.PduPart)

public int getPartsNum()

public void removeAll()

public com.google.android.mms.pdu.PduPart removePart(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/mms/pdu/PduComposer; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class com.google.android.mms.pdu.PduComposer$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/mms/pdu/PduComposer; )
@dalvik.annotation.InnerClass (accessFlags =2 name =BufferStack )
 class com.google.android.mms.pdu.PduComposer$BufferStack extends java.lang.Object

----------------FIELDS----------------

private com.google.android.mms.pdu.PduComposer$LengthRecordNode stack

 int stackSize

final com.google.android.mms.pdu.PduComposer this$0

private com.google.android.mms.pdu.PduComposer$LengthRecordNode toCopy
----------------METHODS----------------

private void <init>(
com.google.android.mms.pdu.PduComposer)

 void <init>(
com.google.android.mms.pdu.PduComposer
com.google.android.mms.pdu.PduComposer$1)

 void copy()

 com.google.android.mms.pdu.PduComposer$PositionMarker mark()

 void newbuf()

 void pop()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =LengthRecordNode )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/mms/pdu/PduComposer; )
 class com.google.android.mms.pdu.PduComposer$LengthRecordNode extends java.lang.Object

----------------FIELDS----------------

 java.io.ByteArrayOutputStream currentMessage

public int currentPosition

public com.google.android.mms.pdu.PduComposer$LengthRecordNode next
----------------METHODS----------------

private void <init>()

 void <init>(
com.google.android.mms.pdu.PduComposer$1)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =2 name =PositionMarker )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/mms/pdu/PduComposer; )
 class com.google.android.mms.pdu.PduComposer$PositionMarker extends java.lang.Object

----------------FIELDS----------------

private int c_pos

private int currentStackSize

final com.google.android.mms.pdu.PduComposer this$0
----------------METHODS----------------

private void <init>(
com.google.android.mms.pdu.PduComposer)

 void <init>(
com.google.android.mms.pdu.PduComposer
com.google.android.mms.pdu.PduComposer$1)

static int access$402(
com.google.android.mms.pdu.PduComposer$PositionMarker
int)

static int access$502(
com.google.android.mms.pdu.PduComposer$PositionMarker
int)

 int getLength()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/google/android/mms/pdu/PduComposer$1;Lcom/google/android/mms/pdu/PduComposer$BufferStack;Lcom/google/android/mms/pdu/PduComposer$PositionMarker;Lcom/google/android/mms/pdu/PduComposer$LengthRecordNode; )
public class com.google.android.mms.pdu.PduComposer extends java.lang.Object

----------------FIELDS----------------

static final boolean $assertionsDisabled

private static final int END_STRING_FLAG

private static final int LENGTH_QUOTE

private static final int LONG_INTEGER_LENGTH_MAX

private static final int PDU_COMPOSER_BLOCK_SIZE

private static final int PDU_COMPOSE_CONTENT_ERROR

private static final int PDU_COMPOSE_FIELD_NOT_SET

private static final int PDU_COMPOSE_FIELD_NOT_SUPPORTED

private static final int PDU_COMPOSE_SUCCESS

private static final int PDU_EMAIL_ADDRESS_TYPE

private static final int PDU_IPV4_ADDRESS_TYPE

private static final int PDU_IPV6_ADDRESS_TYPE

private static final int PDU_PHONE_NUMBER_ADDRESS_TYPE

private static final int PDU_UNKNOWN_ADDRESS_TYPE

private static final int QUOTED_STRING_FLAG

static final java.lang.String REGEXP_EMAIL_ADDRESS_TYPE

static final java.lang.String REGEXP_IPV4_ADDRESS_TYPE

static final java.lang.String REGEXP_IPV6_ADDRESS_TYPE

static final java.lang.String REGEXP_PHONE_NUMBER_ADDRESS_TYPE

private static final int SHORT_INTEGER_MAX

static final java.lang.String STRING_IPV4_ADDRESS_TYPE

static final java.lang.String STRING_IPV6_ADDRESS_TYPE

static final java.lang.String STRING_PHONE_NUMBER_ADDRESS_TYPE

private static final int TEXT_MAX
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/Integer;>; )
private static java.util.HashMap mContentTypeMap

protected java.io.ByteArrayOutputStream mMessage

private com.google.android.mms.pdu.GenericPdu mPdu

private com.google.android.mms.pdu.PduHeaders mPduHeader

protected int mPosition

private final android.content.ContentResolver mResolver

private com.google.android.mms.pdu.PduComposer$BufferStack mStack
----------------METHODS----------------

static void <clinit>()

public void <init>(
android.content.Context
com.google.android.mms.pdu.GenericPdu)

static com.google.android.mms.pdu.PduComposer$BufferStack access$100(
com.google.android.mms.pdu.PduComposer)

private int appendHeader(
int)

protected static int checkAddressType(
java.lang.String)

private int makeAckInd()

private int makeMessageBody()

private int makeNotifyResp()

private int makeReadRecInd()

private int makeSendReqPdu()

protected void append(
int)

protected void appendDateValue(
long)

protected void appendEncodedString(
com.google.android.mms.pdu.EncodedStringValue)

protected void appendLongInteger(
long)

protected void appendOctet(
int)

protected void appendQuotedString(
java.lang.String)

protected void appendQuotedString(
byte[])

protected void appendShortInteger(
int)

protected void appendShortLength(
int)

protected void appendTextString(
java.lang.String)

protected void appendTextString(
byte[])

protected void appendUintvarInteger(
long)

protected void appendValueLength(
long)

protected void arraycopy(
byte[]
int
int)

public byte[] make()

________________CLASS________________


public class com.google.android.mms.pdu.PduContentTypes extends java.lang.Object

----------------FIELDS----------------

static final java.lang.String[] contentTypes
----------------METHODS----------------

static void <clinit>()

public void <init>()

________________CLASS________________


public class com.google.android.mms.pdu.PduHeaders extends java.lang.Object

----------------FIELDS----------------

public static final int ADAPTATION_ALLOWED

public static final int ADDITIONAL_HEADERS

public static final int APPLIC_ID

public static final int ATTRIBUTES

public static final int AUX_APPLIC_ID

public static final int BCC

public static final int CANCEL_ID

public static final int CANCEL_STATUS

public static final int CANCEL_STATUS_REQUEST_CORRUPTED

public static final int CANCEL_STATUS_REQUEST_SUCCESSFULLY_RECEIVED

public static final int CC

public static final int CONTENT

public static final int CONTENT_CLASS

public static final int CONTENT_CLASS_CONTENT_BASIC

public static final int CONTENT_CLASS_CONTENT_RICH

public static final int CONTENT_CLASS_IMAGE_BASIC

public static final int CONTENT_CLASS_IMAGE_RICH

public static final int CONTENT_CLASS_MEGAPIXEL

public static final int CONTENT_CLASS_TEXT

public static final int CONTENT_CLASS_VIDEO_BASIC

public static final int CONTENT_CLASS_VIDEO_RICH

public static final int CONTENT_LOCATION

public static final int CONTENT_TYPE

public static final int DATE

public static final int DELIVERY_REPORT

public static final int DELIVERY_TIME

public static final int DISTRIBUTION_INDICATOR

public static final int DRM_CONTENT

public static final int ELEMENT_DESCRIPTOR

public static final int EXPIRY

public static final int FROM

public static final int FROM_ADDRESS_PRESENT_TOKEN

public static final java.lang.String FROM_ADDRESS_PRESENT_TOKEN_STR

public static final int FROM_INSERT_ADDRESS_TOKEN

public static final java.lang.String FROM_INSERT_ADDRESS_TOKEN_STR

public static final int LIMIT

public static final int MBOX_QUOTAS

public static final int MBOX_TOTALS

public static final int MESSAGE_CLASS

public static final int MESSAGE_CLASS_ADVERTISEMENT

public static final java.lang.String MESSAGE_CLASS_ADVERTISEMENT_STR

public static final int MESSAGE_CLASS_AUTO

public static final java.lang.String MESSAGE_CLASS_AUTO_STR

public static final int MESSAGE_CLASS_INFORMATIONAL

public static final java.lang.String MESSAGE_CLASS_INFORMATIONAL_STR

public static final int MESSAGE_CLASS_PERSONAL

public static final java.lang.String MESSAGE_CLASS_PERSONAL_STR

public static final int MESSAGE_COUNT

public static final int MESSAGE_ID

public static final int MESSAGE_SIZE

public static final int MESSAGE_TYPE

public static final int MESSAGE_TYPE_ACKNOWLEDGE_IND

public static final int MESSAGE_TYPE_CANCEL_CONF

public static final int MESSAGE_TYPE_CANCEL_REQ

public static final int MESSAGE_TYPE_DELETE_CONF

public static final int MESSAGE_TYPE_DELETE_REQ

public static final int MESSAGE_TYPE_DELIVERY_IND

public static final int MESSAGE_TYPE_FORWARD_CONF

public static final int MESSAGE_TYPE_FORWARD_REQ

public static final int MESSAGE_TYPE_MBOX_DELETE_CONF

public static final int MESSAGE_TYPE_MBOX_DELETE_REQ

public static final int MESSAGE_TYPE_MBOX_DESCR

public static final int MESSAGE_TYPE_MBOX_STORE_CONF

public static final int MESSAGE_TYPE_MBOX_STORE_REQ

public static final int MESSAGE_TYPE_MBOX_UPLOAD_CONF

public static final int MESSAGE_TYPE_MBOX_UPLOAD_REQ

public static final int MESSAGE_TYPE_MBOX_VIEW_CONF

public static final int MESSAGE_TYPE_MBOX_VIEW_REQ

public static final int MESSAGE_TYPE_NOTIFICATION_IND

public static final int MESSAGE_TYPE_NOTIFYRESP_IND

public static final int MESSAGE_TYPE_READ_ORIG_IND

public static final int MESSAGE_TYPE_READ_REC_IND

public static final int MESSAGE_TYPE_RETRIEVE_CONF

public static final int MESSAGE_TYPE_SEND_CONF

public static final int MESSAGE_TYPE_SEND_REQ

public static final int MMS_VERSION

public static final int MMS_VERSION_1_0

public static final int MMS_VERSION_1_1

public static final int MMS_VERSION_1_2

public static final int MMS_VERSION_1_3

public static final int MM_FLAGS

public static final int MM_FLAGS_ADD_TOKEN

public static final int MM_FLAGS_FILTER_TOKEN

public static final int MM_FLAGS_REMOVE_TOKEN

public static final int MM_STATE

public static final int MM_STATE_DRAFT

public static final int MM_STATE_FORWARDED

public static final int MM_STATE_NEW

public static final int MM_STATE_RETRIEVED

public static final int MM_STATE_SENT

public static final int PREVIOUSLY_SENT_BY

public static final int PREVIOUSLY_SENT_DATE

public static final int PRIORITY

public static final int PRIORITY_HIGH

public static final int PRIORITY_LOW

public static final int PRIORITY_NORMAL

public static final int QUOTAS

public static final int READ_REPLY

public static final int READ_REPORT

public static final int READ_STATUS

public static final int READ_STATUS_READ

public static final int READ_STATUS__DELETED_WITHOUT_BEING_READ

public static final int RECOMMENDED_RETRIEVAL_MODE

public static final int RECOMMENDED_RETRIEVAL_MODE_MANUAL

public static final int RECOMMENDED_RETRIEVAL_MODE_TEXT

public static final int REPLACE_ID

public static final int REPLY_APPLIC_ID

public static final int REPLY_CHARGING

public static final int REPLY_CHARGING_ACCEPTED

public static final int REPLY_CHARGING_ACCEPTED_TEXT_ONLY

public static final int REPLY_CHARGING_DEADLINE

public static final int REPLY_CHARGING_ID

public static final int REPLY_CHARGING_REQUESTED

public static final int REPLY_CHARGING_REQUESTED_TEXT_ONLY

public static final int REPLY_CHARGING_SIZE

public static final int REPORT_ALLOWED

public static final int RESPONSE_STATUS

public static final int RESPONSE_STATUS_ERROR_CONTENT_NOT_ACCEPTED

public static final int RESPONSE_STATUS_ERROR_MESSAGE_FORMAT_CORRUPT

public static final int RESPONSE_STATUS_ERROR_MESSAGE_NOT_FOUND

public static final int RESPONSE_STATUS_ERROR_NETWORK_PROBLEM

public static final int RESPONSE_STATUS_ERROR_PERMANENT_ADDRESS_HIDING_NOT_SUPPORTED

public static final int RESPONSE_STATUS_ERROR_PERMANENT_CONTENT_NOT_ACCEPTED

public static final int RESPONSE_STATUS_ERROR_PERMANENT_END

public static final int RESPONSE_STATUS_ERROR_PERMANENT_FAILURE

public static final int RESPONSE_STATUS_ERROR_PERMANENT_LACK_OF_PREPAID

public static final int RESPONSE_STATUS_ERROR_PERMANENT_MESSAGE_FORMAT_CORRUPT

public static final int RESPONSE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND

public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_FORWARDING_DENIED

public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_LIMITATIONS_NOT_MET

public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_NOT_SUPPORTED

public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_REQUEST_NOT_ACCEPTED

public static final int RESPONSE_STATUS_ERROR_PERMANENT_SENDING_ADDRESS_UNRESOLVED

public static final int RESPONSE_STATUS_ERROR_PERMANENT_SERVICE_DENIED

public static final int RESPONSE_STATUS_ERROR_SENDING_ADDRESS_UNRESOLVED

public static final int RESPONSE_STATUS_ERROR_SERVICE_DENIED

public static final int RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE

public static final int RESPONSE_STATUS_ERROR_TRANSIENT_MESSAGE_NOT_FOUND

public static final int RESPONSE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM

public static final int RESPONSE_STATUS_ERROR_TRANSIENT_PARTIAL_SUCCESS

public static final int RESPONSE_STATUS_ERROR_TRANSIENT_SENDNG_ADDRESS_UNRESOLVED

public static final int RESPONSE_STATUS_ERROR_UNSPECIFIED

public static final int RESPONSE_STATUS_ERROR_UNSUPPORTED_MESSAGE

public static final int RESPONSE_STATUS_OK

public static final int RESPONSE_TEXT

public static final int RETRIEVE_STATUS

public static final int RETRIEVE_STATUS_ERROR_END

public static final int RETRIEVE_STATUS_ERROR_PERMANENT_CONTENT_UNSUPPORTED

public static final int RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE

public static final int RETRIEVE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND

public static final int RETRIEVE_STATUS_ERROR_PERMANENT_SERVICE_DENIED

public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE

public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_MESSAGE_NOT_FOUND

public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM

public static final int RETRIEVE_STATUS_OK

public static final int RETRIEVE_TEXT

public static final int SENDER_VISIBILITY

public static final int SENDER_VISIBILITY_HIDE

public static final int SENDER_VISIBILITY_SHOW

public static final int START

public static final int STATUS

public static final int STATUS_DEFERRED

public static final int STATUS_EXPIRED

public static final int STATUS_FORWARDED

public static final int STATUS_INDETERMINATE

public static final int STATUS_REJECTED

public static final int STATUS_RETRIEVED

public static final int STATUS_TEXT

public static final int STATUS_UNREACHABLE

public static final int STATUS_UNRECOGNIZED

public static final int STORE

public static final int STORED

public static final int STORE_STATUS

public static final int STORE_STATUS_ERROR_END

public static final int STORE_STATUS_ERROR_PERMANENT_FAILURE

public static final int STORE_STATUS_ERROR_PERMANENT_MESSAGE_FORMAT_CORRUPT

public static final int STORE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND

public static final int STORE_STATUS_ERROR_PERMANENT_MMBOX_FULL

public static final int STORE_STATUS_ERROR_PERMANENT_SERVICE_DENIED

public static final int STORE_STATUS_ERROR_TRANSIENT_FAILURE

public static final int STORE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM

public static final int STORE_STATUS_SUCCESS

public static final int STORE_STATUS_TEXT

public static final int SUBJECT

public static final int TO

public static final int TOTALS

public static final int TRANSACTION_ID

public static final int VALUE_ABSOLUTE_TOKEN

public static final int VALUE_NO

public static final int VALUE_RELATIVE_TOKEN

public static final int VALUE_YES
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/Object;>; )
private java.util.HashMap mHeaderMap
----------------METHODS----------------

public void <init>()

protected void appendEncodedStringValue(
com.google.android.mms.pdu.EncodedStringValue
int)

protected com.google.android.mms.pdu.EncodedStringValue getEncodedStringValue(
int)

protected com.google.android.mms.pdu.EncodedStringValue[] getEncodedStringValues(
int)

protected long getLongInteger(
int)

protected int getOctet(
int)

protected byte[] getTextString(
int)

protected void setEncodedStringValue(
com.google.android.mms.pdu.EncodedStringValue
int)

protected void setEncodedStringValues(
com.google.android.mms.pdu.EncodedStringValue[]
int)

protected void setLongInteger(
long
int)
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
protected void setOctet(
int
int)

protected void setTextString(
byte[]
int)

________________CLASS________________


public class com.google.android.mms.pdu.PduParser extends java.lang.Object

----------------FIELDS----------------

static final boolean $assertionsDisabled

private static final boolean DEBUG

private static final int END_STRING_FLAG

private static final int LENGTH_QUOTE

private static final boolean LOCAL_LOGV

private static final java.lang.String LOG_TAG

private static final int LONG_INTEGER_LENGTH_MAX

private static final int QUOTE

private static final int QUOTED_STRING_FLAG

private static final int SHORT_INTEGER_MAX

private static final int SHORT_LENGTH_MAX

private static final int TEXT_MAX

private static final int TEXT_MIN

private static final int THE_FIRST_PART

private static final int THE_LAST_PART

private static final int TYPE_QUOTED_STRING

private static final int TYPE_TEXT_STRING

private static final int TYPE_TOKEN_STRING

private static byte[] mStartParam

private static byte[] mTypeParam

private com.google.android.mms.pdu.PduBody mBody

private com.google.android.mms.pdu.PduHeaders mHeaders

private java.io.ByteArrayInputStream mPduDataStream
----------------METHODS----------------

static void <clinit>()

public void <init>(
byte[])

protected static boolean checkMandatoryHeader(
com.google.android.mms.pdu.PduHeaders)

private static int checkPartPosition(
com.google.android.mms.pdu.PduPart)

protected static int extractByteValue(
java.io.ByteArrayInputStream)

protected static byte[] getWapString(
java.io.ByteArrayInputStream
int)

protected static boolean isText(
int)

protected static boolean isTokenCharacter(
int)

private static void log(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/io/ByteArrayInputStream;Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/Object;>;)[B )
protected static byte[] parseContentType(
java.io.ByteArrayInputStream
java.util.HashMap)
@dalvik.annotation.Signature (value =(Ljava/io/ByteArrayInputStream;Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/Object;>;Ljava/lang/Integer;)V )
protected static void parseContentTypeParams(
java.io.ByteArrayInputStream
java.util.HashMap
java.lang.Integer)

protected static com.google.android.mms.pdu.EncodedStringValue parseEncodedStringValue(
java.io.ByteArrayInputStream)

protected static long parseIntegerValue(
java.io.ByteArrayInputStream)

protected static long parseLongInteger(
java.io.ByteArrayInputStream)

protected static boolean parsePartHeaders(
java.io.ByteArrayInputStream
com.google.android.mms.pdu.PduPart
int)

protected static com.google.android.mms.pdu.PduBody parseParts(
java.io.ByteArrayInputStream)

protected static int parseShortInteger(
java.io.ByteArrayInputStream)

protected static int parseUnsignedInt(
java.io.ByteArrayInputStream)

protected static int parseValueLength(
java.io.ByteArrayInputStream)

protected static byte[] parseWapString(
java.io.ByteArrayInputStream
int)

protected static int skipWapValue(
java.io.ByteArrayInputStream
int)

public com.google.android.mms.pdu.GenericPdu parse()

protected com.google.android.mms.pdu.PduHeaders parseHeaders(
java.io.ByteArrayInputStream)

________________CLASS________________


public class com.google.android.mms.pdu.PduPart extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String CONTENT_TRANSFER_ENCODING

static final byte[] DISPOSITION_ATTACHMENT

static final byte[] DISPOSITION_FROM_DATA

static final byte[] DISPOSITION_INLINE

public static final java.lang.String P_7BIT

public static final java.lang.String P_8BIT

public static final java.lang.String P_BASE64

public static final java.lang.String P_BINARY

public static final int P_CHARSET

public static final int P_COMMENT

public static final int P_CONTENT_DISPOSITION

public static final int P_CONTENT_ID

public static final int P_CONTENT_LOCATION

public static final int P_CONTENT_TRANSFER_ENCODING

public static final int P_CONTENT_TYPE

public static final int P_CREATION_DATE

public static final int P_CT_MR_TYPE

public static final int P_DEP_COMMENT

public static final int P_DEP_CONTENT_DISPOSITION

public static final int P_DEP_DOMAIN

public static final int P_DEP_FILENAME

public static final int P_DEP_NAME

public static final int P_DEP_PATH

public static final int P_DEP_START

public static final int P_DEP_START_INFO

public static final int P_DIFFERENCES

public static final int P_DISPOSITION_ATTACHMENT

public static final int P_DISPOSITION_FROM_DATA

public static final int P_DISPOSITION_INLINE

public static final int P_DOMAIN

public static final int P_FILENAME

public static final int P_LEVEL

public static final int P_MAC

public static final int P_MAX_AGE

public static final int P_MODIFICATION_DATE

public static final int P_NAME

public static final int P_PADDING

public static final int P_PATH

public static final int P_Q

public static final java.lang.String P_QUOTED_PRINTABLE

public static final int P_READ_DATE

public static final int P_SEC

public static final int P_SECURE

public static final int P_SIZE

public static final int P_START

public static final int P_START_INFO

public static final int P_TYPE

private static final java.lang.String TAG

private byte[] mPartData
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/Integer;Ljava/lang/Object;>; )
private java.util.Map mPartHeader

private android.net.Uri mUri
----------------METHODS----------------

static void <clinit>()

public void <init>()

public java.lang.String generateLocation()

public int getCharset()

public byte[] getContentDisposition()

public byte[] getContentId()

public byte[] getContentLocation()

public byte[] getContentTransferEncoding()

public byte[] getContentType()

public byte[] getData()

public android.net.Uri getDataUri()

public byte[] getFilename()

public byte[] getName()

public void setCharset(
int)

public void setContentDisposition(
byte[])

public void setContentId(
byte[])

public void setContentLocation(
byte[])

public void setContentTransferEncoding(
byte[])

public void setContentType(
byte[])

public void setData(
byte[])

public void setDataUri(
android.net.Uri)

public void setFilename(
byte[])

public void setName(
byte[])

________________CLASS________________


public class com.google.android.mms.pdu.PduPersister extends java.lang.Object

----------------FIELDS----------------

private static final int[] ADDRESS_FIELDS
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/Integer;>; )
private static final java.util.HashMap CHARSET_COLUMN_INDEX_MAP
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/String;>; )
private static final java.util.HashMap CHARSET_COLUMN_NAME_MAP

private static final boolean DEBUG

private static final long DUMMY_THREAD_ID
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/Integer;>; )
private static final java.util.HashMap ENCODED_STRING_COLUMN_INDEX_MAP
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/String;>; )
private static final java.util.HashMap ENCODED_STRING_COLUMN_NAME_MAP

private static final boolean LOCAL_LOGV
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/Integer;>; )
private static final java.util.HashMap LONG_COLUMN_INDEX_MAP
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/String;>; )
private static final java.util.HashMap LONG_COLUMN_NAME_MAP
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Landroid/net/Uri;Ljava/lang/Integer;>; )
private static final java.util.HashMap MESSAGE_BOX_MAP
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/Integer;>; )
private static final java.util.HashMap OCTET_COLUMN_INDEX_MAP
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/String;>; )
private static final java.util.HashMap OCTET_COLUMN_NAME_MAP

private static final int PART_COLUMN_CHARSET

private static final int PART_COLUMN_CONTENT_DISPOSITION

private static final int PART_COLUMN_CONTENT_ID

private static final int PART_COLUMN_CONTENT_LOCATION

private static final int PART_COLUMN_CONTENT_TYPE

private static final int PART_COLUMN_FILENAME

private static final int PART_COLUMN_ID

private static final int PART_COLUMN_NAME

private static final java.lang.String[] PART_PROJECTION

private static final com.google.android.mms.util.PduCache PDU_CACHE_INSTANCE

private static final int PDU_COLUMN_CONTENT_CLASS

private static final int PDU_COLUMN_CONTENT_LOCATION

private static final int PDU_COLUMN_CONTENT_TYPE

private static final int PDU_COLUMN_DATE

private static final int PDU_COLUMN_DELIVERY_REPORT

private static final int PDU_COLUMN_DELIVERY_TIME

private static final int PDU_COLUMN_EXPIRY

private static final int PDU_COLUMN_ID

private static final int PDU_COLUMN_MESSAGE_BOX

private static final int PDU_COLUMN_MESSAGE_CLASS

private static final int PDU_COLUMN_MESSAGE_ID

private static final int PDU_COLUMN_MESSAGE_SIZE

private static final int PDU_COLUMN_MESSAGE_TYPE

private static final int PDU_COLUMN_MMS_VERSION

private static final int PDU_COLUMN_PRIORITY

private static final int PDU_COLUMN_READ_REPORT

private static final int PDU_COLUMN_READ_STATUS

private static final int PDU_COLUMN_REPORT_ALLOWED

private static final int PDU_COLUMN_RESPONSE_TEXT

private static final int PDU_COLUMN_RETRIEVE_STATUS

private static final int PDU_COLUMN_RETRIEVE_TEXT

private static final int PDU_COLUMN_RETRIEVE_TEXT_CHARSET

private static final int PDU_COLUMN_STATUS

private static final int PDU_COLUMN_SUBJECT

private static final int PDU_COLUMN_SUBJECT_CHARSET

private static final int PDU_COLUMN_THREAD_ID

private static final int PDU_COLUMN_TRANSACTION_ID

private static final java.lang.String[] PDU_PROJECTION

public static final int PROC_STATUS_COMPLETED

public static final int PROC_STATUS_PERMANENTLY_FAILURE

public static final int PROC_STATUS_TRANSIENT_FAILURE

private static final java.lang.String TAG

public static final java.lang.String TEMPORARY_DRM_OBJECT_URI
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/Integer;>; )
private static final java.util.HashMap TEXT_STRING_COLUMN_INDEX_MAP
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/String;>; )
private static final java.util.HashMap TEXT_STRING_COLUMN_NAME_MAP

private static com.google.android.mms.pdu.PduPersister sPersister

private final android.content.ContentResolver mContentResolver

private final android.content.Context mContext
----------------METHODS----------------

static void <clinit>()

private void <init>(
android.content.Context)

private byte[] getByteArrayFromPartColumn(
android.database.Cursor
int)

public static byte[] getBytes(
java.lang.String)

private java.lang.Integer getIntegerFromPartColumn(
android.database.Cursor
int)

public static com.google.android.mms.pdu.PduPersister getPduPersister(
android.content.Context)

private void loadAddress(
long
com.google.android.mms.pdu.PduHeaders)
@dalvik.annotation.Throws (value =Lcom/google/android/mms/MmsException; )
private com.google.android.mms.pdu.PduPart[] loadParts(
long)

private void persistAddress(
long
int
com.google.android.mms.pdu.EncodedStringValue[])
@dalvik.annotation.Throws (value =Lcom/google/android/mms/MmsException; )
private void persistData(
com.google.android.mms.pdu.PduPart
android.net.Uri
java.lang.String)

private void setEncodedStringValueToHeaders(
android.database.Cursor
int
com.google.android.mms.pdu.PduHeaders
int)

private void setLongToHeaders(
android.database.Cursor
int
com.google.android.mms.pdu.PduHeaders
int)
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
private void setOctetToHeaders(
android.database.Cursor
int
com.google.android.mms.pdu.PduHeaders
int)

private void setTextStringToHeaders(
android.database.Cursor
int
com.google.android.mms.pdu.PduHeaders
int)

public static java.lang.String toIsoString(
byte[])

private void updateAddress(
long
int
com.google.android.mms.pdu.EncodedStringValue[])
@dalvik.annotation.Throws (value =Lcom/google/android/mms/MmsException; )
private void updatePart(
android.net.Uri
com.google.android.mms.pdu.PduPart)

public android.database.Cursor getPendingMessages(
long)
@dalvik.annotation.Throws (value =Lcom/google/android/mms/MmsException; )
public com.google.android.mms.pdu.GenericPdu load(
android.net.Uri)
@dalvik.annotation.Throws (value =Lcom/google/android/mms/MmsException; )
public android.net.Uri move(
android.net.Uri
android.net.Uri)
@dalvik.annotation.Throws (value =Lcom/google/android/mms/MmsException; )
public android.net.Uri persist(
com.google.android.mms.pdu.GenericPdu
android.net.Uri)
@dalvik.annotation.Throws (value =Lcom/google/android/mms/MmsException; )
public android.net.Uri persistPart(
com.google.android.mms.pdu.PduPart
long)

public void release()

public void updateHeaders(
android.net.Uri
com.google.android.mms.pdu.SendReq)
@dalvik.annotation.Throws (value =Lcom/google/android/mms/MmsException; )
public void updateParts(
android.net.Uri
com.google.android.mms.pdu.PduBody)

________________CLASS________________


public class com.google.android.mms.pdu.QuotedPrintable extends java.lang.Object

----------------FIELDS----------------

private static byte ESCAPE_CHAR
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static final byte[] decodeQuotedPrintable(
byte[])

________________CLASS________________


public class com.google.android.mms.pdu.ReadOrigInd extends com.google.android.mms.pdu.GenericPdu

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void <init>()

 void <init>(
com.google.android.mms.pdu.PduHeaders)

public long getDate()

public com.google.android.mms.pdu.EncodedStringValue getFrom()

public byte[] getMessageId()

public int getReadStatus()

public com.google.android.mms.pdu.EncodedStringValue[] getTo()

public void setDate(
long)

public void setFrom(
com.google.android.mms.pdu.EncodedStringValue)

public void setMessageId(
byte[])
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setReadStatus(
int)

public void setTo(
com.google.android.mms.pdu.EncodedStringValue[])

________________CLASS________________


public class com.google.android.mms.pdu.ReadRecInd extends com.google.android.mms.pdu.GenericPdu

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void <init>(
com.google.android.mms.pdu.EncodedStringValue
byte[]
int
int
com.google.android.mms.pdu.EncodedStringValue[])

 void <init>(
com.google.android.mms.pdu.PduHeaders)

public long getDate()

public com.google.android.mms.pdu.EncodedStringValue getFrom()

public byte[] getMessageId()

public int getReadStatus()

public com.google.android.mms.pdu.EncodedStringValue[] getTo()

public void setDate(
long)

public void setFrom(
com.google.android.mms.pdu.EncodedStringValue)

public void setMessageId(
byte[])
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setReadStatus(
int)

public void setTo(
com.google.android.mms.pdu.EncodedStringValue[])

________________CLASS________________


public class com.google.android.mms.pdu.RetrieveConf extends com.google.android.mms.pdu.MultimediaMessagePdu

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void <init>()

 void <init>(
com.google.android.mms.pdu.PduHeaders)

 void <init>(
com.google.android.mms.pdu.PduHeaders
com.google.android.mms.pdu.PduBody)

public void addCc(
com.google.android.mms.pdu.EncodedStringValue)

public com.google.android.mms.pdu.EncodedStringValue[] getCc()

public byte[] getContentType()

public int getDeliveryReport()

public com.google.android.mms.pdu.EncodedStringValue getFrom()

public byte[] getMessageClass()

public byte[] getMessageId()

public int getReadReport()

public int getRetrieveStatus()

public com.google.android.mms.pdu.EncodedStringValue getRetrieveText()

public byte[] getTransactionId()

public void setContentType(
byte[])
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setDeliveryReport(
int)

public void setFrom(
com.google.android.mms.pdu.EncodedStringValue)

public void setMessageClass(
byte[])

public void setMessageId(
byte[])
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setReadReport(
int)
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setRetrieveStatus(
int)

public void setRetrieveText(
com.google.android.mms.pdu.EncodedStringValue)

public void setTransactionId(
byte[])

________________CLASS________________


public class com.google.android.mms.pdu.SendConf extends com.google.android.mms.pdu.GenericPdu

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void <init>()

 void <init>(
com.google.android.mms.pdu.PduHeaders)

public byte[] getMessageId()

public int getResponseStatus()

public byte[] getTransactionId()

public void setMessageId(
byte[])
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setResponseStatus(
int)

public void setTransactionId(
byte[])

________________CLASS________________


public class com.google.android.mms.pdu.SendReq extends com.google.android.mms.pdu.MultimediaMessagePdu

----------------FIELDS----------------

private static final java.lang.String TAG
----------------METHODS----------------

public void <init>()

 void <init>(
com.google.android.mms.pdu.PduHeaders)

 void <init>(
com.google.android.mms.pdu.PduHeaders
com.google.android.mms.pdu.PduBody)
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void <init>(
byte[]
com.google.android.mms.pdu.EncodedStringValue
int
byte[])

private byte[] generateTransactionId()

public void addBcc(
com.google.android.mms.pdu.EncodedStringValue)

public void addCc(
com.google.android.mms.pdu.EncodedStringValue)

public com.google.android.mms.pdu.EncodedStringValue[] getBcc()

public com.google.android.mms.pdu.EncodedStringValue[] getCc()

public byte[] getContentType()

public int getDeliveryReport()

public long getExpiry()

public com.google.android.mms.pdu.EncodedStringValue getFrom()

public byte[] getMessageClass()

public int getReadReport()

public byte[] getTransactionId()

public void setBcc(
com.google.android.mms.pdu.EncodedStringValue[])

public void setCc(
com.google.android.mms.pdu.EncodedStringValue[])

public void setContentType(
byte[])
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setDeliveryReport(
int)

public void setExpiry(
long)

public void setFrom(
com.google.android.mms.pdu.EncodedStringValue)

public void setMessageClass(
byte[])
@dalvik.annotation.Throws (value =Lcom/google/android/mms/InvalidHeaderValueException; )
public void setReadReport(
int)

public void setTo(
com.google.android.mms.pdu.EncodedStringValue[])

public void setTransactionId(
byte[])

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/mms/util/AbstractCache; )
 class com.google.android.mms.util.AbstractCache$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =10 name =CacheEntry )
@dalvik.annotation.Signature (value =<V:Ljava/lang/Object;>Ljava/lang/Object; )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/mms/util/AbstractCache; )
 class com.google.android.mms.util.AbstractCache$CacheEntry extends java.lang.Object

----------------FIELDS----------------

 int hit
@dalvik.annotation.Signature (value =TV; )
 java.lang.Object value
----------------METHODS----------------

private void <init>()

 void <init>(
com.google.android.mms.util.AbstractCache$1)

________________CLASS________________

@dalvik.annotation.Signature (value =<K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/lang/Object; )
@dalvik.annotation.MemberClasses (value =Lcom/google/android/mms/util/AbstractCache$1;Lcom/google/android/mms/util/AbstractCache$CacheEntry; )
public abstract class com.google.android.mms.util.AbstractCache extends java.lang.Object

----------------FIELDS----------------

private static final boolean DEBUG

private static final boolean LOCAL_LOGV

private static final int MAX_CACHED_ITEMS

private static final java.lang.String TAG
@dalvik.annotation.Signature (value =Ljava/util/HashMap<TK;Lcom/google/android/mms/util/AbstractCache$CacheEntry<TV;>;>; )
private final java.util.HashMap mCacheMap
----------------METHODS----------------

protected void <init>()
@dalvik.annotation.Signature (value =(TK;)TV; )
public java.lang.Object get(
java.lang.Object)
@dalvik.annotation.Signature (value =(TK;)TV; )
public java.lang.Object purge(
java.lang.Object)

public void purgeAll()
@dalvik.annotation.Signature (value =(TK;TV;)Z )
public boolean put(
java.lang.Object
java.lang.Object)

public int size()

________________CLASS________________

@dalvik.annotation.Signature (value =Lcom/google/android/mms/util/AbstractCache<Landroid/net/Uri;Lcom/google/android/mms/util/PduCacheEntry;>; )
public final class com.google.android.mms.util.PduCache extends com.google.android.mms.util.AbstractCache

----------------FIELDS----------------

private static final boolean DEBUG

private static final boolean LOCAL_LOGV
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/lang/Integer;>; )
private static final java.util.HashMap MATCH_TO_MSGBOX_ID_MAP

private static final int MMS_ALL

private static final int MMS_ALL_ID

private static final int MMS_CONVERSATION

private static final int MMS_CONVERSATION_ID

private static final int MMS_DRAFTS

private static final int MMS_DRAFTS_ID

private static final int MMS_INBOX

private static final int MMS_INBOX_ID

private static final int MMS_OUTBOX

private static final int MMS_OUTBOX_ID

private static final int MMS_SENT

private static final int MMS_SENT_ID

private static final java.lang.String TAG

private static final android.content.UriMatcher URI_MATCHER

private static com.google.android.mms.util.PduCache sInstance
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Integer;Ljava/util/HashSet<Landroid/net/Uri;>;>; )
private final java.util.HashMap mMessageBoxes
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Long;Ljava/util/HashSet<Landroid/net/Uri;>;>; )
private final java.util.HashMap mThreads
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static final com.google.android.mms.util.PduCache getInstance()

private android.net.Uri normalizeKey(
android.net.Uri)

private void purgeByMessageBox(
java.lang.Integer)

private void purgeByThreadId(
long)

private com.google.android.mms.util.PduCacheEntry purgeSingleEntry(
android.net.Uri)

private void removeFromMessageBoxes(
android.net.Uri
com.google.android.mms.util.PduCacheEntry)

private void removeFromThreads(
android.net.Uri
com.google.android.mms.util.PduCacheEntry)

public com.google.android.mms.util.PduCacheEntry purge(
android.net.Uri)

public volatile java.lang.Object purge(
java.lang.Object)

public void purgeAll()

public boolean put(
android.net.Uri
com.google.android.mms.util.PduCacheEntry)

public volatile boolean put(
java.lang.Object
java.lang.Object)

________________CLASS________________


public final class com.google.android.mms.util.PduCacheEntry extends java.lang.Object

----------------FIELDS----------------

private final int mMessageBox

private final com.google.android.mms.pdu.GenericPdu mPdu

private final long mThreadId
----------------METHODS----------------

public void <init>(
com.google.android.mms.pdu.GenericPdu
int
long)

public int getMessageBox()

public com.google.android.mms.pdu.GenericPdu getPdu()

public long getThreadId()

________________CLASS________________


public final class com.google.android.mms.util.SqliteWrapper extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String SQLITE_EXCEPTION_DETAIL_MESSAGE

private static final java.lang.String TAG
----------------METHODS----------------

private void <init>()

public static void checkSQLiteException(
android.content.Context
android.database.sqlite.SQLiteException)

public static int delete(
android.content.Context
android.content.ContentResolver
android.net.Uri
java.lang.String
java.lang.String[])

public static android.net.Uri insert(
android.content.Context
android.content.ContentResolver
android.net.Uri
android.content.ContentValues)

private static boolean isLowMemory(
android.content.Context)

private static boolean isLowMemory(
android.database.sqlite.SQLiteException)

public static android.database.Cursor query(
android.content.Context
android.content.ContentResolver
android.net.Uri
java.lang.String[]
java.lang.String
java.lang.String[]
java.lang.String)

public static boolean requery(
android.content.Context
android.database.Cursor)

public static int update(
android.content.Context
android.content.ContentResolver
android.net.Uri
android.content.ContentValues
java.lang.String
java.lang.String[])

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =BlockedRequestException )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/net/GoogleHttpClient; )
public class com.google.android.net.GoogleHttpClient$BlockedRequestException extends java.io.IOException

----------------FIELDS----------------

private final com.google.android.net.UrlRules$Rule mRule
----------------METHODS----------------

 void <init>(
com.google.android.net.UrlRules$Rule)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/google/android/net/GoogleHttpClient$BlockedRequestException; )
public class com.google.android.net.GoogleHttpClient extends java.lang.Object implements org.apache.http.client.HttpClient

----------------FIELDS----------------

private static final java.lang.String TAG

private final android.net.http.AndroidHttpClient mClient

private final android.content.ContentResolver mResolver

private final java.lang.String mUserAgent
----------------METHODS----------------

public void <init>(
android.content.ContentResolver
java.lang.String)

public static java.lang.String getGzipCapableUserAgent(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private static org.apache.http.impl.client.RequestWrapper wrapRequest(
org.apache.http.client.methods.HttpUriRequest)

public void close()

public void disableCurlLogging()

public void enableCurlLogging(
java.lang.String
int)
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/client/ResponseHandler<+TT;>;)TT; )
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
public java.lang.Object execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.client.ResponseHandler)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/client/ResponseHandler<+TT;>;Lorg/apache/http/protocol/HttpContext;)TT; )
public java.lang.Object execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.client.ResponseHandler
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/client/ResponseHandler<+TT;>;)TT; )
public java.lang.Object execute(
org.apache.http.client.methods.HttpUriRequest
org.apache.http.client.ResponseHandler)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/client/ClientProtocolException; )
@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/client/ResponseHandler<+TT;>;Lorg/apache/http/protocol/HttpContext;)TT; )
public java.lang.Object execute(
org.apache.http.client.methods.HttpUriRequest
org.apache.http.client.ResponseHandler
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public org.apache.http.HttpResponse execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public org.apache.http.HttpResponse execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public org.apache.http.HttpResponse execute(
org.apache.http.client.methods.HttpUriRequest)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public org.apache.http.HttpResponse execute(
org.apache.http.client.methods.HttpUriRequest
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public org.apache.http.HttpResponse executeWithoutRewriting(
org.apache.http.client.methods.HttpUriRequest
org.apache.http.protocol.HttpContext)

public org.apache.http.conn.ClientConnectionManager getConnectionManager()

public org.apache.http.params.HttpParams getParams()

________________CLASS________________


public class com.google.android.net.NetStats extends java.lang.Object

----------------FIELDS----------------

private static java.lang.String TAG

private static java.lang.String statsFile
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static long[] getStats()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1545 name =Callback )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/net/ParentalControl; )
public abstract interface class com.google.android.net.ParentalControl$Callback extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void onResult(
com.google.android.net.ParentalControlState)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/net/ParentalControl; )
@dalvik.annotation.InnerClass (accessFlags =10 name =RemoteCallback )
 class com.google.android.net.ParentalControl$RemoteCallback extends android.os.IParentalControlCallback$Stub

----------------FIELDS----------------

private com.google.android.net.ParentalControl$Callback mCallback
----------------METHODS----------------

public void <init>(
com.google.android.net.ParentalControl$Callback)

public void onResult(
com.google.android.net.ParentalControlState)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/google/android/net/ParentalControl$RemoteCallback;Lcom/google/android/net/ParentalControl$Callback; )
public class com.google.android.net.ParentalControl extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public static void getParentalControlState(
com.google.android.net.ParentalControl$Callback)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Lcom/google/android/net/ParentalControlState;>; )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/net/ParentalControlState; )
final class com.google.android.net.ParentalControlState$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public com.google.android.net.ParentalControlState createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public com.google.android.net.ParentalControlState[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________


public class com.google.android.net.ParentalControlState extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Lcom/google/android/net/ParentalControlState;>; )
public static final android.os.Parcelable$Creator CREATOR

public boolean isEnabled

public java.lang.String redirectUrl
----------------METHODS----------------

static void <clinit>()

public void <init>()

public int describeContents()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/net/UrlRules; )
@dalvik.annotation.InnerClass (accessFlags =9 name =Rule )
public class com.google.android.net.UrlRules$Rule extends java.lang.Object implements java.lang.Comparable

----------------FIELDS----------------

public static final com.google.android.net.UrlRules$Rule DEFAULT

public final boolean mBlock

public final java.lang.String mName

public final java.lang.String mPrefix

public final java.lang.String mRewrite
----------------METHODS----------------

static void <clinit>()

private void <init>()
@dalvik.annotation.Throws (value =Lcom/google/android/net/UrlRules$RuleFormatException; )
public void <init>(
java.lang.String
java.lang.String)

public java.lang.String apply(
java.lang.String)

public int compareTo(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/net/UrlRules; )
@dalvik.annotation.InnerClass (accessFlags =9 name =RuleFormatException )
public class com.google.android.net.UrlRules$RuleFormatException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/google/android/net/UrlRules$Rule;Lcom/google/android/net/UrlRules$RuleFormatException; )
public class com.google.android.net.UrlRules extends java.lang.Object

----------------FIELDS----------------

private static final java.util.regex.Pattern PATTERN_SPACE_PLUS

private static final java.util.regex.Pattern RULE_PATTERN

private static java.lang.String sCachedDigest

private static com.google.android.net.UrlRules sCachedRules

private final java.util.regex.Pattern mPattern

private final com.google.android.net.UrlRules$Rule[] mRules
----------------METHODS----------------

static void <clinit>()

public void <init>(
com.google.android.net.UrlRules$Rule[])

static java.util.regex.Pattern access$000()

public static com.google.android.net.UrlRules getRules(
android.content.ContentResolver)

public com.google.android.net.UrlRules$Rule matchRule(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/providers/AbstractGDataSyncAdapter$GDataSyncData; )
@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Lcom/google/android/providers/AbstractGDataSyncAdapter$GDataSyncData;>; )
final class com.google.android.providers.AbstractGDataSyncAdapter$GDataSyncData$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public com.google.android.providers.AbstractGDataSyncAdapter$GDataSyncData createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public com.google.android.providers.AbstractGDataSyncAdapter$GDataSyncData[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Landroid/os/Parcelable$Creator<Lcom/google/android/providers/AbstractGDataSyncAdapter$GDataSyncData$FeedData;>; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/providers/AbstractGDataSyncAdapter$GDataSyncData$FeedData; )
final class com.google.android.providers.AbstractGDataSyncAdapter$GDataSyncData$FeedData$1 extends java.lang.Object implements android.os.Parcelable$Creator

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public com.google.android.providers.AbstractGDataSyncAdapter$GDataSyncData$FeedData createFromParcel(
android.os.Parcel)

public volatile java.lang.Object createFromParcel(
android.os.Parcel)

public com.google.android.providers.AbstractGDataSyncAdapter$GDataSyncData$FeedData[] newArray(
int)

public volatile java.lang.Object[] newArray(
int)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/providers/AbstractGDataSyncAdapter$GDataSyncData; )
@dalvik.annotation.InnerClass (accessFlags =9 name =FeedData )
public class com.google.android.providers.AbstractGDataSyncAdapter$GDataSyncData$FeedData extends java.lang.Object implements android.os.Parcelable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Lcom/google/android/providers/AbstractGDataSyncAdapter$GDataSyncData$FeedData;>; )
public static final android.os.Parcelable$Creator CREATOR

public int endIndex

public boolean hasMoreEntriesToFetch

public java.lang.String lastId

public long lastUpdatedTime

public long numEntriesFetched
----------------METHODS----------------

static void <clinit>()

public void <init>(
long
long
boolean
java.lang.String
int)

public int describeContents()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =GDataSyncData )
@dalvik.annotation.MemberClasses (value =Lcom/google/android/providers/AbstractGDataSyncAdapter$GDataSyncData$FeedData; )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/providers/AbstractGDataSyncAdapter; )
public class com.google.android.providers.AbstractGDataSyncAdapter$GDataSyncData extends android.content.TempProviderSyncAdapter$SyncData

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Landroid/os/Parcelable$Creator<Lcom/google/android/providers/AbstractGDataSyncAdapter$GDataSyncData;>; )
public static final android.os.Parcelable$Creator CREATOR
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Lcom/google/android/providers/AbstractGDataSyncAdapter$GDataSyncData$FeedData;>; )
public final java.util.Map feedData
----------------METHODS----------------

static void <clinit>()

public void <init>()

public int describeContents()

public java.lang.String toString()

public void writeToParcel(
android.os.Parcel
int)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/google/android/providers/AbstractGDataSyncAdapter$GDataSyncData; )
public abstract class com.google.android.providers.AbstractGDataSyncAdapter extends android.content.TempProviderSyncAdapter

----------------FIELDS----------------

public static final int ENTRY_DELETED

public static final int ENTRY_INVALID

public static final int ENTRY_OK

private static final java.lang.String SCHEMA_HTTP

private static final java.lang.String SCHEMA_HTTPS

private static final android.net.Uri SYNC_STATE_CONTENT_URI

protected static final java.lang.String TAG

private java.lang.String mAccount

private java.lang.String mAuthToken

protected int mServerEntries

protected int mServerQueries

protected volatile boolean mSyncCanceled
----------------METHODS----------------

static void <clinit>()

protected void <init>(
android.content.Context
android.content.SyncableContentProvider)

public static byte[] newBytesFromGDataSyncData(
com.google.android.providers.AbstractGDataSyncAdapter$GDataSyncData)

public static com.google.android.providers.AbstractGDataSyncAdapter$GDataSyncData newGDataSyncDataFromBytes(
byte[])

public static java.lang.String rewriteUrlforAccount(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/google/wireless/gdata/parser/ParseException; )
protected abstract java.lang.String cursorToEntry(
android.content.SyncContext
android.database.Cursor
com.google.wireless.gdata.data.Entry
java.lang.Object)
@dalvik.annotation.Throws (value =Lcom/google/wireless/gdata/parser/ParseException; )
protected abstract void deletedCursorToEntry(
android.content.SyncContext
android.database.Cursor
com.google.wireless.gdata.data.Entry)

protected java.lang.String getAccount()

protected java.lang.String getAuthToken()

protected abstract android.database.Cursor getCursorForDeletedTable(
android.content.ContentProvider
java.lang.Class)

protected abstract android.database.Cursor getCursorForTable(
android.content.ContentProvider
java.lang.Class)

protected abstract java.lang.Class getFeedEntryClass()

protected abstract java.lang.String getFeedUrl(
java.lang.String)

protected abstract com.google.wireless.gdata.client.GDataServiceClient getGDataServiceClient()

public int getMaxEntriesPerSync()

public void getServerDiffs(
android.content.SyncContext
android.content.TempProviderSyncAdapter$SyncData
android.content.SyncableContentProvider
android.os.Bundle
java.lang.Object
android.content.SyncResult)

protected void getServerDiffsImpl(
android.content.SyncContext
android.content.SyncableContentProvider
java.lang.Class
java.lang.String
java.lang.Object
int
com.google.android.providers.AbstractGDataSyncAdapter$GDataSyncData
android.content.SyncResult)

protected void getStatsString(
java.lang.StringBuffer
android.content.SyncResult)

protected abstract boolean handleAllDeletedUnavailable(
com.google.android.providers.AbstractGDataSyncAdapter$GDataSyncData
java.lang.String)

public boolean isReadOnly()

protected void logSyncDetails(
long
long
android.content.SyncResult)

protected abstract com.google.wireless.gdata.data.Entry newEntry()

public volatile android.content.TempProviderSyncAdapter$SyncData newSyncData()

public com.google.android.providers.AbstractGDataSyncAdapter$GDataSyncData newSyncData()

public void onSyncCanceled()

public void onSyncEnding(
android.content.SyncContext
boolean)

public void onSyncStarting(
android.content.SyncContext
java.lang.String
boolean
android.content.SyncResult)

public volatile android.content.TempProviderSyncAdapter$SyncData readSyncData(
android.content.SyncableContentProvider)

public com.google.android.providers.AbstractGDataSyncAdapter$GDataSyncData readSyncData(
android.content.SyncableContentProvider)

public void sendClientDiffs(
android.content.SyncContext
android.content.SyncableContentProvider
android.content.SyncableContentProvider
android.content.SyncResult
boolean)

protected void sendClientDiffsImpl(
android.content.SyncContext
android.content.SyncableContentProvider
com.google.wireless.gdata.data.Entry
java.lang.Object
android.content.SyncableContentProvider
android.content.SyncResult
boolean)

protected void setAuthToken(
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/google/wireless/gdata/parser/ParseException; )
protected abstract void updateProvider(
com.google.wireless.gdata.data.Feed
long
boolean
com.google.wireless.gdata.data.Entry
android.content.ContentProvider
java.lang.Object)

protected void updateQueryParameters(
com.google.wireless.gdata.client.QueryParams)

public void writeSyncData(
android.content.TempProviderSyncAdapter$SyncData
android.content.SyncableContentProvider)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/AbstractMessageParser; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class com.google.android.util.AbstractMessageParser$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$com$google$android$util$AbstractMessageParser$Token$Type
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/google/android/util/AbstractMessageParser$Token$Type; )
@dalvik.annotation.InnerClass (accessFlags =1033 name =Token )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/AbstractMessageParser; )
public abstract class com.google.android.util.AbstractMessageParser$Token extends java.lang.Object

----------------FIELDS----------------

protected java.lang.String text

protected com.google.android.util.AbstractMessageParser$Token$Type type
----------------METHODS----------------

protected void <init>(
com.google.android.util.AbstractMessageParser$Token$Type
java.lang.String)

public boolean controlCaps()
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getInfo()

public java.lang.String getRawText()

public com.google.android.util.AbstractMessageParser$Token$Type getType()

public boolean isArray()

public abstract boolean isHtml()

public boolean isMedia()

public boolean setCaps()

public java.lang.String toHtml(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Acronym )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/AbstractMessageParser; )
public class com.google.android.util.AbstractMessageParser$Acronym extends com.google.android.util.AbstractMessageParser$Token

----------------FIELDS----------------

private java.lang.String value
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String)
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getInfo()

public java.lang.String getValue()

public boolean isHtml()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/AbstractMessageParser; )
@dalvik.annotation.InnerClass (accessFlags =9 name =FlickrPhoto )
public class com.google.android.util.AbstractMessageParser$FlickrPhoto extends com.google.android.util.AbstractMessageParser$Token

----------------FIELDS----------------

private static final java.util.regex.Pattern GROUPING_PATTERN

private static final java.lang.String SETS

private static final java.lang.String TAGS

private static final java.util.regex.Pattern URL_PATTERN

private java.lang.String grouping

private java.lang.String groupingId

private java.lang.String photo

private java.lang.String user
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

public static java.lang.String getPhotoURL(
java.lang.String
java.lang.String)

public static java.lang.String getRssUrl(
java.lang.String)

public static java.lang.String getTagsURL(
java.lang.String)

public static java.lang.String getUserSetsURL(
java.lang.String
java.lang.String)

public static java.lang.String getUserTagsURL(
java.lang.String
java.lang.String)

public static java.lang.String getUserURL(
java.lang.String)

public static com.google.android.util.AbstractMessageParser$FlickrPhoto matchURL(
java.lang.String
java.lang.String)

public java.lang.String getGrouping()

public java.lang.String getGroupingId()
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getInfo()

public java.lang.String getPhoto()

public java.lang.String getUrl()

public java.lang.String getUser()

public boolean isHtml()

public boolean isMedia()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Format )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/AbstractMessageParser; )
public class com.google.android.util.AbstractMessageParser$Format extends com.google.android.util.AbstractMessageParser$Token

----------------FIELDS----------------

private char ch

private boolean matched

private boolean start
----------------METHODS----------------

public void <init>(
char
boolean)

private java.lang.String getFormatEnd(
char)

private java.lang.String getFormatStart(
char)

public boolean controlCaps()
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getInfo()

public boolean isHtml()

public boolean setCaps()

public void setMatched(
boolean)

public java.lang.String toHtml(
boolean)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Html )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/AbstractMessageParser; )
public class com.google.android.util.AbstractMessageParser$Html extends com.google.android.util.AbstractMessageParser$Token

----------------FIELDS----------------

private java.lang.String html
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String)

private static java.lang.String trimLeadingWhitespace(
java.lang.String)

public static java.lang.String trimTrailingWhitespace(
java.lang.String)
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getInfo()

public boolean isHtml()

public java.lang.String toHtml(
boolean)

public void trimLeadingWhitespace()

public void trimTrailingWhitespace()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Link )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/AbstractMessageParser; )
public class com.google.android.util.AbstractMessageParser$Link extends com.google.android.util.AbstractMessageParser$Token

----------------FIELDS----------------

private java.lang.String url
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String)
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getInfo()

public java.lang.String getURL()

public boolean isHtml()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/AbstractMessageParser; )
@dalvik.annotation.InnerClass (accessFlags =9 name =MusicTrack )
public class com.google.android.util.AbstractMessageParser$MusicTrack extends com.google.android.util.AbstractMessageParser$Token

----------------FIELDS----------------

private java.lang.String track
----------------METHODS----------------

public void <init>(
java.lang.String)
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getInfo()

public java.lang.String getTrack()

public boolean isHtml()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Part )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/AbstractMessageParser; )
public class com.google.android.util.AbstractMessageParser$Part extends java.lang.Object

----------------FIELDS----------------

private java.lang.String meText
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/google/android/util/AbstractMessageParser$Token;>; )
private java.util.ArrayList tokens
----------------METHODS----------------

public void <init>()

private java.lang.String getPartType()

public void add(
com.google.android.util.AbstractMessageParser$Token)

public com.google.android.util.AbstractMessageParser$Token getMediaToken()

public java.lang.String getRawText()
@dalvik.annotation.Signature (value =()Ljava/util/ArrayList<Lcom/google/android/util/AbstractMessageParser$Token;>; )
public java.util.ArrayList getTokens()

public java.lang.String getType(
boolean)

public boolean isMedia()

public void setMeText(
java.lang.String)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Photo )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/AbstractMessageParser; )
public class com.google.android.util.AbstractMessageParser$Photo extends com.google.android.util.AbstractMessageParser$Token

----------------FIELDS----------------

private static final java.util.regex.Pattern URL_PATTERN

private java.lang.String album

private java.lang.String photo

private java.lang.String user
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

public static java.lang.String getAlbumURL(
java.lang.String
java.lang.String)

public static java.lang.String getPhotoURL(
java.lang.String
java.lang.String
java.lang.String)

public static java.lang.String getRssUrl(
java.lang.String)

public static com.google.android.util.AbstractMessageParser$Photo matchURL(
java.lang.String
java.lang.String)

public java.lang.String getAlbum()
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getInfo()

public java.lang.String getPhoto()

public java.lang.String getUser()

public boolean isHtml()

public boolean isMedia()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/AbstractMessageParser; )
@dalvik.annotation.InnerClass (accessFlags =1545 name =Resources )
public abstract interface class com.google.android.util.AbstractMessageParser$Resources extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract com.google.android.util.AbstractMessageParser$TrieNode getAcronyms()

public abstract com.google.android.util.AbstractMessageParser$TrieNode getDomainSuffixes()
@dalvik.annotation.Signature (value =()Ljava/util/Set<Ljava/lang/String;>; )
public abstract java.util.Set getSchemes()

public abstract com.google.android.util.AbstractMessageParser$TrieNode getSmileys()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =Smiley )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/AbstractMessageParser; )
public class com.google.android.util.AbstractMessageParser$Smiley extends com.google.android.util.AbstractMessageParser$Token

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getInfo()

public boolean isHtml()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/AbstractMessageParser$Token; )
@dalvik.annotation.InnerClass (accessFlags =16409 name =Type )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lcom/google/android/util/AbstractMessageParser$Token$Type;>; )
public final class com.google.android.util.AbstractMessageParser$Token$Type extends java.lang.Enum

----------------FIELDS----------------

private static final com.google.android.util.AbstractMessageParser$Token$Type[] $VALUES

public static final com.google.android.util.AbstractMessageParser$Token$Type ACRONYM

public static final com.google.android.util.AbstractMessageParser$Token$Type FLICKR

public static final com.google.android.util.AbstractMessageParser$Token$Type FORMAT

public static final com.google.android.util.AbstractMessageParser$Token$Type GOOGLE_VIDEO

public static final com.google.android.util.AbstractMessageParser$Token$Type HTML

public static final com.google.android.util.AbstractMessageParser$Token$Type LINK

public static final com.google.android.util.AbstractMessageParser$Token$Type MUSIC

public static final com.google.android.util.AbstractMessageParser$Token$Type PHOTO

public static final com.google.android.util.AbstractMessageParser$Token$Type SMILEY

public static final com.google.android.util.AbstractMessageParser$Token$Type YOUTUBE_VIDEO

private java.lang.String stringRep
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =(Ljava/lang/String;)V )
private void <init>(
java.lang.String
int
java.lang.String)

public static com.google.android.util.AbstractMessageParser$Token$Type valueOf(
java.lang.String)

public static com.google.android.util.AbstractMessageParser$Token$Type[] values()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/AbstractMessageParser; )
@dalvik.annotation.InnerClass (accessFlags =9 name =TrieNode )
public class com.google.android.util.AbstractMessageParser$TrieNode extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Character;Lcom/google/android/util/AbstractMessageParser$TrieNode;>; )
private final java.util.HashMap children

private java.lang.String text

private java.lang.String value
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public static void addToTrie(
com.google.android.util.AbstractMessageParser$TrieNode
java.lang.String
java.lang.String)

public final boolean exists()

public com.google.android.util.AbstractMessageParser$TrieNode getChild(
char)

public com.google.android.util.AbstractMessageParser$TrieNode getOrCreateChild(
char)

public final java.lang.String getText()

public final java.lang.String getValue()

public void setValue(
java.lang.String)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/AbstractMessageParser; )
@dalvik.annotation.InnerClass (accessFlags =9 name =Video )
public class com.google.android.util.AbstractMessageParser$Video extends com.google.android.util.AbstractMessageParser$Token

----------------FIELDS----------------

private static final java.util.regex.Pattern URL_PATTERN

private java.lang.String docid
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String
java.lang.String)

public static java.lang.String getRssUrl(
java.lang.String)

public static java.lang.String getURL(
java.lang.String)

public static java.lang.String getURL(
java.lang.String
java.lang.String)

public static com.google.android.util.AbstractMessageParser$Video matchURL(
java.lang.String
java.lang.String)

public java.lang.String getDocID()
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getInfo()

public boolean isHtml()

public boolean isMedia()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =9 name =YouTubeVideo )
@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/AbstractMessageParser; )
public class com.google.android.util.AbstractMessageParser$YouTubeVideo extends com.google.android.util.AbstractMessageParser$Token

----------------FIELDS----------------

private static final java.util.regex.Pattern URL_PATTERN

private java.lang.String docid
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String
java.lang.String)

public static java.lang.String getPrefixedURL(
boolean
java.lang.String
java.lang.String
java.lang.String)

public static java.lang.String getRssUrl(
java.lang.String)

public static java.lang.String getURL(
java.lang.String)

public static java.lang.String getURL(
java.lang.String
java.lang.String)

public static com.google.android.util.AbstractMessageParser$YouTubeVideo matchURL(
java.lang.String
java.lang.String)

public java.lang.String getDocID()
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getInfo()

public boolean isHtml()

public boolean isMedia()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/google/android/util/AbstractMessageParser$1;Lcom/google/android/util/AbstractMessageParser$Part;Lcom/google/android/util/AbstractMessageParser$TrieNode;Lcom/google/android/util/AbstractMessageParser$Format;Lcom/google/android/util/AbstractMessageParser$Acronym;Lcom/google/android/util/AbstractMessageParser$Smiley;Lcom/google/android/util/AbstractMessageParser$FlickrPhoto;Lcom/google/android/util/AbstractMessageParser$Photo;Lcom/google/android/util/AbstractMessageParser$YouTubeVideo;Lcom/google/android/util/AbstractMessageParser$Video;Lcom/google/android/util/AbstractMessageParser$Link;Lcom/google/android/util/AbstractMessageParser$MusicTrack;Lcom/google/android/util/AbstractMessageParser$Html;Lcom/google/android/util/AbstractMessageParser$Token;Lcom/google/android/util/AbstractMessageParser$Resources; )
public abstract class com.google.android.util.AbstractMessageParser extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String musicNote
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/Character;Lcom/google/android/util/AbstractMessageParser$Format;>; )
private java.util.HashMap formatStart

private int nextChar

private int nextClass

private boolean parseAcronyms

private boolean parseFormatting

private boolean parseMeText

private boolean parseMusic

private boolean parseSmilies

private boolean parseUrls
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/google/android/util/AbstractMessageParser$Part;>; )
private java.util.ArrayList parts

private java.lang.String text
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lcom/google/android/util/AbstractMessageParser$Token;>; )
private java.util.ArrayList tokens
----------------METHODS----------------

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
boolean
boolean
boolean
boolean
boolean
boolean)

private void addToken(
com.google.android.util.AbstractMessageParser$Token)

private void addURLToken(
java.lang.String
java.lang.String)

private void buildParts(
java.lang.String)

private int getCharClass(
int)

private boolean isDomainChar(
char)

private static boolean isFormatChar(
char)

private static boolean isPunctuation(
char)

private static boolean isSmileyBreak(
char
char)

private boolean isSmileyBreak(
int)

private boolean isURLBreak(
int)

private boolean isValidDomain(
java.lang.String)

private boolean isWordBreak(
int)

private com.google.android.util.AbstractMessageParser$Part lastPart()

private static com.google.android.util.AbstractMessageParser$TrieNode longestMatch(
com.google.android.util.AbstractMessageParser$TrieNode
com.google.android.util.AbstractMessageParser
int)

private static com.google.android.util.AbstractMessageParser$TrieNode longestMatch(
com.google.android.util.AbstractMessageParser$TrieNode
com.google.android.util.AbstractMessageParser
int
boolean)

private static boolean matches(
com.google.android.util.AbstractMessageParser$TrieNode
java.lang.String)

private boolean parseAcronym()

private boolean parseFormatting()

private boolean parseMusicTrack()

private boolean parseSmiley()

private void parseText()

private boolean parseURL()

protected static java.lang.String reverse(
java.lang.String)

public static com.google.android.util.AbstractMessageParser$Token tokenForUrl(
java.lang.String
java.lang.String)

public final com.google.android.util.AbstractMessageParser$Part getPart(
int)

public final int getPartCount()
@dalvik.annotation.Signature (value =()Ljava/util/List<Lcom/google/android/util/AbstractMessageParser$Part;>; )
public final java.util.List getParts()

public final java.lang.String getRawText()

protected abstract com.google.android.util.AbstractMessageParser$Resources getResources()

public void parse()

public java.lang.String toHtml()

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/GoogleWebContentHelper; )
@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
 class com.google.android.util.GoogleWebContentHelper$1 extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/GoogleWebContentHelper; )
@dalvik.annotation.InnerClass (accessFlags =2 name =MyWebViewClient )
 class com.google.android.util.GoogleWebContentHelper$MyWebViewClient extends android.webkit.WebViewClient

----------------FIELDS----------------

final com.google.android.util.GoogleWebContentHelper this$0
----------------METHODS----------------

private void <init>(
com.google.android.util.GoogleWebContentHelper)

 void <init>(
com.google.android.util.GoogleWebContentHelper
com.google.android.util.GoogleWebContentHelper$1)

public void onPageFinished(
android.webkit.WebView
java.lang.String)

public void onReceivedError(
android.webkit.WebView
int
java.lang.String
java.lang.String)

public void onReceivedHttpAuthRequest(
android.webkit.WebView
android.webkit.HttpAuthHandler
java.lang.String
java.lang.String)

public void onReceivedSslError(
android.webkit.WebView
android.webkit.SslErrorHandler
android.net.http.SslError)

public void onTooManyRedirects(
android.webkit.WebView
android.os.Message
android.os.Message)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/google/android/util/GoogleWebContentHelper$1;Lcom/google/android/util/GoogleWebContentHelper$MyWebViewClient; )
public class com.google.android.util.GoogleWebContentHelper extends java.lang.Object

----------------FIELDS----------------

private android.content.Context mContext

private android.view.ViewGroup mLayout

private java.lang.String mPrettyUrl

private android.view.View mProgressBar

private boolean mReceivedResponse

private java.lang.String mSecureUrl

private android.widget.TextView mTextView

private java.lang.String mUnsuccessfulMessage

private android.webkit.WebView mWebView
----------------METHODS----------------

public void <init>(
android.content.Context)

static void access$100(
com.google.android.util.GoogleWebContentHelper
boolean)

private void ensureViews()

private static java.lang.String fillUrl(
java.lang.String)

private void handleWebViewCompletion(
boolean)

private void initializeViews()

public android.view.ViewGroup getLayout()

public com.google.android.util.GoogleWebContentHelper loadUrl()

public com.google.android.util.GoogleWebContentHelper setUnsuccessfulMessage(
java.lang.String)

public com.google.android.util.GoogleWebContentHelper setUrlsFromGservices(
java.lang.String
java.lang.String)

________________CLASS________________

@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>Ljava/lang/Object; )
public abstract interface class com.google.android.util.Procedure extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Signature (value =(TT;)V )
public abstract void apply(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lcom/google/android/util/SimplePullParser; )
@dalvik.annotation.InnerClass (accessFlags =25 name =ParseException )
public final class com.google.android.util.SimplePullParser$ParseException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

public void <init>(
java.lang.Throwable)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lcom/google/android/util/SimplePullParser$ParseException; )
public class com.google.android.util.SimplePullParser extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String TEXT_TAG

private java.lang.String mCurrentStartTag

private java.lang.String mLogTag

private final org.xmlpull.v1.XmlPullParser mParser
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lcom/google/android/util/SimplePullParser$ParseException;Ljava/io/IOException; )
public void <init>(
java.io.InputStream
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lcom/google/android/util/SimplePullParser$ParseException; )
public void <init>(
java.io.Reader)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lcom/google/android/util/SimplePullParser$ParseException; )
public void <init>(
java.lang.String)

public void <init>(
org.xmlpull.v1.XmlPullParser)
@dalvik.annotation.Throws (value =Lorg/xmlpull/v1/XmlPullParserException;Ljava/io/IOException; )
private static void moveToStartDocument(
org.xmlpull.v1.XmlPullParser)

public java.lang.String getAttributeName(
int)

public java.lang.String getAttributeNamespace(
int)

public int getDepth()
@dalvik.annotation.Throws (value =Lcom/google/android/util/SimplePullParser$ParseException; )
public int getIntAttribute(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/google/android/util/SimplePullParser$ParseException; )
public int getIntAttribute(
java.lang.String
java.lang.String
int)
@dalvik.annotation.Throws (value =Lcom/google/android/util/SimplePullParser$ParseException; )
public long getLongAttribute(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lcom/google/android/util/SimplePullParser$ParseException; )
public long getLongAttribute(
java.lang.String
java.lang.String
long)
@dalvik.annotation.Throws (value =Lcom/google/android/util/SimplePullParser$ParseException; )
public java.lang.String getStringAttribute(
java.lang.String
java.lang.String)

public java.lang.String getStringAttribute(
java.lang.String
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lcom/google/android/util/SimplePullParser$ParseException; )
public java.lang.String nextTag(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lcom/google/android/util/SimplePullParser$ParseException; )
public java.lang.String nextTagOrText(
int
java.lang.StringBuilder)

public int numAttributes()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lcom/google/android/util/SimplePullParser$ParseException; )
public void readRemainingText(
int
java.lang.StringBuilder)

public void setLogTag(
java.lang.String)

________________CLASS________________


public class com.google.android.util.SmileyParser extends com.google.android.util.AbstractMessageParser

----------------FIELDS----------------

private com.google.android.util.SmileyResources mRes
----------------METHODS----------------

public void <init>(
java.lang.String
com.google.android.util.SmileyResources)

protected com.google.android.util.AbstractMessageParser$Resources getResources()

public java.lang.CharSequence getSpannableString(
android.content.Context)

________________CLASS________________


public class com.google.android.util.SmileyResources extends java.lang.Object implements com.google.android.util.AbstractMessageParser$Resources

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/Integer;>; )
private java.util.HashMap mSmileyToRes

private final com.google.android.util.AbstractMessageParser$TrieNode smileys
----------------METHODS----------------

public void <init>(
java.lang.String[]
int[])

public com.google.android.util.AbstractMessageParser$TrieNode getAcronyms()

public com.google.android.util.AbstractMessageParser$TrieNode getDomainSuffixes()
@dalvik.annotation.Signature (value =()Ljava/util/Set<Ljava/lang/String;>; )
public java.util.Set getSchemes()

public int getSmileyRes(
java.lang.String)

public com.google.android.util.AbstractMessageParser$TrieNode getSmileys()

________________CLASS________________


public abstract interface class org.apache.commons.codec.Decoder extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public abstract java.lang.Object decode(
java.lang.Object)

________________CLASS________________


public abstract interface class org.apache.commons.codec.BinaryDecoder extends java.lang.Object implements org.apache.commons.codec.Decoder

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public abstract byte[] decode(
byte[])

________________CLASS________________


public abstract interface class org.apache.commons.codec.Encoder extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public abstract java.lang.Object encode(
java.lang.Object)

________________CLASS________________


public abstract interface class org.apache.commons.codec.BinaryEncoder extends java.lang.Object implements org.apache.commons.codec.Encoder

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public abstract byte[] encode(
byte[])

________________CLASS________________


public class org.apache.commons.codec.DecoderException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________


public class org.apache.commons.codec.EncoderException extends java.lang.Exception

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________


public abstract interface class org.apache.commons.codec.StringDecoder extends java.lang.Object implements org.apache.commons.codec.Decoder

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public abstract java.lang.String decode(
java.lang.String)

________________CLASS________________


public abstract interface class org.apache.commons.codec.StringEncoder extends java.lang.Object implements org.apache.commons.codec.Encoder

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public abstract java.lang.String encode(
java.lang.String)

________________CLASS________________


public class org.apache.commons.codec.StringEncoderComparator extends java.lang.Object implements java.util.Comparator

----------------FIELDS----------------

private org.apache.commons.codec.StringEncoder stringEncoder
----------------METHODS----------------

public void <init>()

public void <init>(
org.apache.commons.codec.StringEncoder)

public int compare(
java.lang.Object
java.lang.Object)

________________CLASS________________


public class org.apache.commons.codec.binary.Base64 extends java.lang.Object implements org.apache.commons.codec.BinaryEncoder, org.apache.commons.codec.BinaryDecoder

----------------FIELDS----------------

static final int BASELENGTH

static final byte[] CHUNK_SEPARATOR

static final int CHUNK_SIZE

static final int EIGHTBIT

static final int FOURBYTE

static final int LOOKUPLENGTH

static final byte PAD

static final int SIGN

static final int SIXTEENBIT

static final int TWENTYFOURBITGROUP

private static byte[] base64Alphabet

private static byte[] lookUpBase64Alphabet
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static byte[] decodeBase64(
byte[])

static byte[] discardNonBase64(
byte[])

static byte[] discardWhitespace(
byte[])

public static byte[] encodeBase64(
byte[])

public static byte[] encodeBase64(
byte[]
boolean)

public static byte[] encodeBase64Chunked(
byte[])

public static boolean isArrayByteBase64(
byte[])

private static boolean isBase64(
byte)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public java.lang.Object decode(
java.lang.Object)

public byte[] decode(
byte[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.Object encode(
java.lang.Object)

public byte[] encode(
byte[])

________________CLASS________________


public class org.apache.commons.codec.binary.BinaryCodec extends java.lang.Object implements org.apache.commons.codec.BinaryDecoder, org.apache.commons.codec.BinaryEncoder

----------------FIELDS----------------

private static final int[] BITS

private static final int BIT_0

private static final int BIT_1

private static final int BIT_2

private static final int BIT_3

private static final int BIT_4

private static final int BIT_5

private static final int BIT_6

private static final int BIT_7

private static final byte[] EMPTY_BYTE_ARRAY

private static final char[] EMPTY_CHAR_ARRAY
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static byte[] fromAscii(
byte[])

public static byte[] fromAscii(
char[])

public static byte[] toAsciiBytes(
byte[])

public static char[] toAsciiChars(
byte[])

public static java.lang.String toAsciiString(
byte[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public java.lang.Object decode(
java.lang.Object)

public byte[] decode(
byte[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.Object encode(
java.lang.Object)

public byte[] encode(
byte[])

public byte[] toByteArray(
java.lang.String)

________________CLASS________________


public class org.apache.commons.codec.binary.Hex extends java.lang.Object implements org.apache.commons.codec.BinaryEncoder, org.apache.commons.codec.BinaryDecoder

----------------FIELDS----------------

private static final char[] DIGITS
----------------METHODS----------------

static void <clinit>()

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public static byte[] decodeHex(
char[])

public static char[] encodeHex(
byte[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
protected static int toDigit(
char
int)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public java.lang.Object decode(
java.lang.Object)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public byte[] decode(
byte[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.Object encode(
java.lang.Object)

public byte[] encode(
byte[])

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =1 name =DoubleMetaphoneResult )
@dalvik.annotation.EnclosingClass (value =Lorg/apache/commons/codec/language/DoubleMetaphone; )
public class org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult extends java.lang.Object

----------------FIELDS----------------

private java.lang.StringBuffer alternate

private int maxLength

private java.lang.StringBuffer primary

final org.apache.commons.codec.language.DoubleMetaphone this$0
----------------METHODS----------------

public void <init>(
org.apache.commons.codec.language.DoubleMetaphone
int)

public void append(
char)

public void append(
char
char)

public void append(
java.lang.String)

public void append(
java.lang.String
java.lang.String)

public void appendAlternate(
char)

public void appendAlternate(
java.lang.String)

public void appendPrimary(
char)

public void appendPrimary(
java.lang.String)

public java.lang.String getAlternate()

public java.lang.String getPrimary()

public boolean isComplete()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lorg/apache/commons/codec/language/DoubleMetaphone$DoubleMetaphoneResult; )
public class org.apache.commons.codec.language.DoubleMetaphone extends java.lang.Object implements org.apache.commons.codec.StringEncoder

----------------FIELDS----------------

private static final java.lang.String[] ES_EP_EB_EL_EY_IB_IL_IN_IE_EI_ER

private static final java.lang.String[] L_R_N_M_B_H_F_V_W_SPACE

private static final java.lang.String[] L_T_K_S_N_M_B_Z

private static final java.lang.String[] SILENT_START

private static final java.lang.String VOWELS

protected int maxCodeLen
----------------METHODS----------------

static void <clinit>()

public void <init>()

private java.lang.String cleanInput(
java.lang.String)

private boolean conditionC0(
java.lang.String
int)

private boolean conditionCH0(
java.lang.String
int)

private boolean conditionCH1(
java.lang.String
int)

private boolean conditionL0(
java.lang.String
int)

private boolean conditionM0(
java.lang.String
int)

private static boolean contains(
java.lang.String
int
int
java.lang.String)

private static boolean contains(
java.lang.String
int
int
java.lang.String
java.lang.String)

private static boolean contains(
java.lang.String
int
int
java.lang.String
java.lang.String
java.lang.String)

private static boolean contains(
java.lang.String
int
int
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

private static boolean contains(
java.lang.String
int
int
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

private static boolean contains(
java.lang.String
int
int
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

protected static boolean contains(
java.lang.String
int
int
java.lang.String[])

private int handleAEIOUY(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int)

private int handleC(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int)

private int handleCC(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int)

private int handleCH(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int)

private int handleD(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int)

private int handleG(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int
boolean)

private int handleGH(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int)

private int handleH(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int)

private int handleJ(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int
boolean)

private int handleL(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int)

private int handleP(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int)

private int handleR(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int
boolean)

private int handleS(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int
boolean)

private int handleSC(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int)

private int handleT(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int)

private int handleW(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int)

private int handleX(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int)

private int handleZ(
java.lang.String
org.apache.commons.codec.language.DoubleMetaphone$DoubleMetaphoneResult
int
boolean)

private boolean isSilentStart(
java.lang.String)

private boolean isSlavoGermanic(
java.lang.String)

private boolean isVowel(
char)

protected char charAt(
java.lang.String
int)

public java.lang.String doubleMetaphone(
java.lang.String)

public java.lang.String doubleMetaphone(
java.lang.String
boolean)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.Object encode(
java.lang.Object)

public java.lang.String encode(
java.lang.String)

public int getMaxCodeLen()

public boolean isDoubleMetaphoneEqual(
java.lang.String
java.lang.String)

public boolean isDoubleMetaphoneEqual(
java.lang.String
java.lang.String
boolean)

public void setMaxCodeLen(
int)

________________CLASS________________


public class org.apache.commons.codec.language.Metaphone extends java.lang.Object implements org.apache.commons.codec.StringEncoder

----------------FIELDS----------------

private java.lang.String frontv

private int maxCodeLen

private java.lang.String varson

private java.lang.String vowels
----------------METHODS----------------

public void <init>()

private boolean isLastChar(
int
int)

private boolean isNextChar(
java.lang.StringBuffer
int
char)

private boolean isPreviousChar(
java.lang.StringBuffer
int
char)

private boolean isVowel(
java.lang.StringBuffer
int)

private boolean regionMatch(
java.lang.StringBuffer
int
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.Object encode(
java.lang.Object)

public java.lang.String encode(
java.lang.String)

public int getMaxCodeLen()

public boolean isMetaphoneEqual(
java.lang.String
java.lang.String)

public java.lang.String metaphone(
java.lang.String)

public void setMaxCodeLen(
int)

________________CLASS________________


public class org.apache.commons.codec.language.RefinedSoundex extends java.lang.Object implements org.apache.commons.codec.StringEncoder

----------------FIELDS----------------

public static final org.apache.commons.codec.language.RefinedSoundex US_ENGLISH

public static final char[] US_ENGLISH_MAPPING

private char[] soundexMapping
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
char[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public int difference(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.Object encode(
java.lang.Object)

public java.lang.String encode(
java.lang.String)

 char getMappingCode(
char)

public java.lang.String soundex(
java.lang.String)

________________CLASS________________


public class org.apache.commons.codec.language.Soundex extends java.lang.Object implements org.apache.commons.codec.StringEncoder

----------------FIELDS----------------

public static final org.apache.commons.codec.language.Soundex US_ENGLISH

public static final char[] US_ENGLISH_MAPPING

public static final java.lang.String US_ENGLISH_MAPPING_STRING

private int maxLength

private char[] soundexMapping
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
char[])

private char getMappingCode(
java.lang.String
int)

private char[] getSoundexMapping()

private char map(
char)

private void setSoundexMapping(
char[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public int difference(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.Object encode(
java.lang.Object)

public java.lang.String encode(
java.lang.String)

public int getMaxLength()

public void setMaxLength(
int)

public java.lang.String soundex(
java.lang.String)

________________CLASS________________


final class org.apache.commons.codec.language.SoundexUtils extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

static java.lang.String clean(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
static int difference(
org.apache.commons.codec.StringEncoder
java.lang.String
java.lang.String)

static int differenceEncoded(
java.lang.String
java.lang.String)

________________CLASS________________


abstract class org.apache.commons.codec.net.RFC1522Codec extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException;Ljava/io/UnsupportedEncodingException; )
protected java.lang.String decodeText(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
protected abstract byte[] doDecoding(
byte[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
protected abstract byte[] doEncoding(
byte[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException;Ljava/io/UnsupportedEncodingException; )
protected java.lang.String encodeText(
java.lang.String
java.lang.String)

protected abstract java.lang.String getEncoding()

________________CLASS________________


public class org.apache.commons.codec.net.BCodec extends org.apache.commons.codec.net.RFC1522Codec implements org.apache.commons.codec.StringEncoder, org.apache.commons.codec.StringDecoder

----------------FIELDS----------------

private java.lang.String charset
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public java.lang.Object decode(
java.lang.Object)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public java.lang.String decode(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
protected byte[] doDecoding(
byte[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
protected byte[] doEncoding(
byte[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.Object encode(
java.lang.Object)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.String encode(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.String encode(
java.lang.String
java.lang.String)

public java.lang.String getDefaultCharset()

protected java.lang.String getEncoding()

________________CLASS________________


public class org.apache.commons.codec.net.QCodec extends org.apache.commons.codec.net.RFC1522Codec implements org.apache.commons.codec.StringEncoder, org.apache.commons.codec.StringDecoder

----------------FIELDS----------------

private static byte BLANK

private static final java.util.BitSet PRINTABLE_CHARS

private static byte UNDERSCORE

private java.lang.String charset

private boolean encodeBlanks
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public java.lang.Object decode(
java.lang.Object)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public java.lang.String decode(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
protected byte[] doDecoding(
byte[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
protected byte[] doEncoding(
byte[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.Object encode(
java.lang.Object)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.String encode(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.String encode(
java.lang.String
java.lang.String)

public java.lang.String getDefaultCharset()

protected java.lang.String getEncoding()

public boolean isEncodeBlanks()

public void setEncodeBlanks(
boolean)

________________CLASS________________


public class org.apache.commons.codec.net.QuotedPrintableCodec extends java.lang.Object implements org.apache.commons.codec.BinaryEncoder, org.apache.commons.codec.BinaryDecoder, org.apache.commons.codec.StringEncoder, org.apache.commons.codec.StringDecoder

----------------FIELDS----------------

private static byte ESCAPE_CHAR

private static final java.util.BitSet PRINTABLE_CHARS

private static byte SPACE

private static byte TAB

private java.lang.String charset
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public static final byte[] decodeQuotedPrintable(
byte[])

private static final void encodeQuotedPrintable(
int
java.io.ByteArrayOutputStream)

public static final byte[] encodeQuotedPrintable(
java.util.BitSet
byte[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public java.lang.Object decode(
java.lang.Object)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public java.lang.String decode(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException;Ljava/io/UnsupportedEncodingException; )
public java.lang.String decode(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public byte[] decode(
byte[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.Object encode(
java.lang.Object)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.String encode(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/UnsupportedEncodingException; )
public java.lang.String encode(
java.lang.String
java.lang.String)

public byte[] encode(
byte[])

public java.lang.String getDefaultCharset()

________________CLASS________________


abstract interface class org.apache.commons.codec.net.StringEncodings extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String US_ASCII

public static final java.lang.String UTF8
----------------METHODS----------------

________________CLASS________________


public class org.apache.commons.codec.net.URLCodec extends java.lang.Object implements org.apache.commons.codec.BinaryEncoder, org.apache.commons.codec.BinaryDecoder, org.apache.commons.codec.StringEncoder, org.apache.commons.codec.StringDecoder

----------------FIELDS----------------

protected static byte ESCAPE_CHAR

protected static final java.util.BitSet WWW_FORM_URL

protected java.lang.String charset
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public static final byte[] decodeUrl(
byte[])

public static final byte[] encodeUrl(
java.util.BitSet
byte[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public java.lang.Object decode(
java.lang.Object)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public java.lang.String decode(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException;Ljava/io/UnsupportedEncodingException; )
public java.lang.String decode(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/DecoderException; )
public byte[] decode(
byte[])
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.Object encode(
java.lang.Object)
@dalvik.annotation.Throws (value =Lorg/apache/commons/codec/EncoderException; )
public java.lang.String encode(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/UnsupportedEncodingException; )
public java.lang.String encode(
java.lang.String
java.lang.String)

public byte[] encode(
byte[])

public java.lang.String getDefaultCharset()

public java.lang.String getEncoding()

________________CLASS________________


public abstract interface class org.apache.commons.logging.Log extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void debug(
java.lang.Object)

public abstract void debug(
java.lang.Object
java.lang.Throwable)

public abstract void error(
java.lang.Object)

public abstract void error(
java.lang.Object
java.lang.Throwable)

public abstract void fatal(
java.lang.Object)

public abstract void fatal(
java.lang.Object
java.lang.Throwable)

public abstract void info(
java.lang.Object)

public abstract void info(
java.lang.Object
java.lang.Throwable)

public abstract boolean isDebugEnabled()

public abstract boolean isErrorEnabled()

public abstract boolean isFatalEnabled()

public abstract boolean isInfoEnabled()

public abstract boolean isTraceEnabled()

public abstract boolean isWarnEnabled()

public abstract void trace(
java.lang.Object)

public abstract void trace(
java.lang.Object
java.lang.Throwable)

public abstract void warn(
java.lang.Object)

public abstract void warn(
java.lang.Object
java.lang.Throwable)

________________CLASS________________


public class org.apache.commons.logging.LogConfigurationException extends java.lang.RuntimeException

----------------FIELDS----------------

protected java.lang.Throwable cause
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

public void <init>(
java.lang.Throwable)

public java.lang.Throwable getCause()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
final class org.apache.commons.logging.LogFactory$1 extends java.lang.Object implements java.security.PrivilegedAction

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public java.lang.Object run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
final class org.apache.commons.logging.LogFactory$2 extends java.lang.Object implements java.security.PrivilegedAction

----------------FIELDS----------------

final java.lang.ClassLoader val$classLoader

final java.lang.String val$factoryClass
----------------METHODS----------------

 void <init>(
java.lang.String
java.lang.ClassLoader)

public java.lang.Object run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
final class org.apache.commons.logging.LogFactory$3 extends java.lang.Object implements java.security.PrivilegedAction

----------------FIELDS----------------

final java.lang.ClassLoader val$loader

final java.lang.String val$name
----------------METHODS----------------

 void <init>(
java.lang.ClassLoader
java.lang.String)

public java.lang.Object run()

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class org.apache.commons.logging.LogFactory$4 extends java.lang.Object implements java.security.PrivilegedAction

----------------FIELDS----------------

final java.lang.ClassLoader val$loader

final java.lang.String val$name
----------------METHODS----------------

 void <init>(
java.lang.ClassLoader
java.lang.String)

public java.lang.Object run()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =8 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
final class org.apache.commons.logging.LogFactory$5 extends java.lang.Object implements java.security.PrivilegedAction

----------------FIELDS----------------

final java.net.URL val$url
----------------METHODS----------------

 void <init>(
java.net.URL)

public java.lang.Object run()

________________CLASS________________


public abstract class org.apache.commons.logging.LogFactory extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String DIAGNOSTICS_DEST_PROPERTY

public static final java.lang.String FACTORY_DEFAULT

public static final java.lang.String FACTORY_PROPERTIES

public static final java.lang.String FACTORY_PROPERTY

public static final java.lang.String HASHTABLE_IMPLEMENTATION_PROPERTY

public static final java.lang.String PRIORITY_KEY

protected static final java.lang.String SERVICE_ID

public static final java.lang.String TCCL_KEY

private static final java.lang.String WEAK_HASHTABLE_CLASSNAME

private static java.lang.String diagnosticPrefix

private static java.io.PrintStream diagnosticsStream

protected static java.util.Hashtable factories

protected static org.apache.commons.logging.LogFactory nullClassLoaderFactory

private static java.lang.ClassLoader thisClassLoader
----------------METHODS----------------

static void <clinit>()

protected void <init>()

static void access$000(
java.lang.String)

private static void cacheFactory(
java.lang.ClassLoader
org.apache.commons.logging.LogFactory)

protected static java.lang.Object createFactory(
java.lang.String
java.lang.ClassLoader)

private static final java.util.Hashtable createFactoryStore()
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
protected static java.lang.ClassLoader directGetContextClassLoader()

private static org.apache.commons.logging.LogFactory getCachedFactory(
java.lang.ClassLoader)

protected static java.lang.ClassLoader getClassLoader(
java.lang.Class)

private static final java.util.Properties getConfigurationFile(
java.lang.ClassLoader
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
protected static java.lang.ClassLoader getContextClassLoader()
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
public static org.apache.commons.logging.LogFactory getFactory()
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
public static org.apache.commons.logging.Log getLog(
java.lang.Class)
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
public static org.apache.commons.logging.Log getLog(
java.lang.String)

private static java.util.Properties getProperties(
java.net.URL)

private static java.io.InputStream getResourceAsStream(
java.lang.ClassLoader
java.lang.String)

private static java.util.Enumeration getResources(
java.lang.ClassLoader
java.lang.String)

private static boolean implementsLogFactory(
java.lang.Class)

private static void initDiagnostics()

protected static boolean isDiagnosticsEnabled()

private static void logClassLoaderEnvironment(
java.lang.Class)

private static final void logDiagnostic(
java.lang.String)

private static void logHierarchy(
java.lang.String
java.lang.ClassLoader)

protected static final void logRawDiagnostic(
java.lang.String)

protected static org.apache.commons.logging.LogFactory newFactory(
java.lang.String
java.lang.ClassLoader)
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
protected static org.apache.commons.logging.LogFactory newFactory(
java.lang.String
java.lang.ClassLoader
java.lang.ClassLoader)

public static java.lang.String objectId(
java.lang.Object)

public static void release(
java.lang.ClassLoader)

public static void releaseAll()

public abstract java.lang.Object getAttribute(
java.lang.String)

public abstract java.lang.String[] getAttributeNames()
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
public abstract org.apache.commons.logging.Log getInstance(
java.lang.Class)
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
public abstract org.apache.commons.logging.Log getInstance(
java.lang.String)

public abstract void release()

public abstract void removeAttribute(
java.lang.String)

public abstract void setAttribute(
java.lang.String
java.lang.Object)

________________CLASS________________


public class org.apache.commons.logging.LogSource extends java.lang.Object

----------------FIELDS----------------

protected static boolean jdk14IsAvailable

protected static boolean log4jIsAvailable

protected static java.lang.reflect.Constructor logImplctor

protected static java.util.Hashtable logs
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static org.apache.commons.logging.Log getInstance(
java.lang.Class)

public static org.apache.commons.logging.Log getInstance(
java.lang.String)

public static java.lang.String[] getLogNames()

public static org.apache.commons.logging.Log makeNewLogInstance(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/LinkageError;Ljava/lang/ExceptionInInitializerError;Ljava/lang/NoSuchMethodException;Ljava/lang/SecurityException; )
public static void setLogImplementation(
java.lang.Class)
@dalvik.annotation.Throws (value =Ljava/lang/LinkageError;Ljava/lang/ExceptionInInitializerError;Ljava/lang/NoSuchMethodException;Ljava/lang/SecurityException;Ljava/lang/ClassNotFoundException; )
public static void setLogImplementation(
java.lang.String)

________________CLASS________________


public class org.apache.commons.logging.impl.Jdk14Logger extends java.lang.Object implements org.apache.commons.logging.Log, java.io.Serializable

----------------FIELDS----------------

protected static final java.util.logging.Level dummyLevel

protected transient java.util.logging.Logger logger

protected java.lang.String name
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String)

private void log(
java.util.logging.Level
java.lang.String
java.lang.Throwable)

public void debug(
java.lang.Object)

public void debug(
java.lang.Object
java.lang.Throwable)

public void error(
java.lang.Object)

public void error(
java.lang.Object
java.lang.Throwable)

public void fatal(
java.lang.Object)

public void fatal(
java.lang.Object
java.lang.Throwable)

public java.util.logging.Logger getLogger()

public void info(
java.lang.Object)

public void info(
java.lang.Object
java.lang.Throwable)

public boolean isDebugEnabled()

public boolean isErrorEnabled()

public boolean isFatalEnabled()

public boolean isInfoEnabled()

public boolean isTraceEnabled()

public boolean isWarnEnabled()

public void trace(
java.lang.Object)

public void trace(
java.lang.Object
java.lang.Throwable)

public void warn(
java.lang.Object)

public void warn(
java.lang.Object
java.lang.Throwable)

________________CLASS________________


public class org.apache.commons.logging.impl.LogFactoryImpl extends org.apache.commons.logging.LogFactory

----------------FIELDS----------------

public static final java.lang.String ALLOW_FLAWED_CONTEXT_PROPERTY

public static final java.lang.String ALLOW_FLAWED_DISCOVERY_PROPERTY

public static final java.lang.String ALLOW_FLAWED_HIERARCHY_PROPERTY

private static final java.lang.String LOGGING_IMPL_JDK14_LOGGER

private static final java.lang.String LOGGING_IMPL_LOG4J_LOGGER

private static final java.lang.String LOGGING_IMPL_LUMBERJACK_LOGGER

private static final java.lang.String LOGGING_IMPL_SIMPLE_LOGGER

public static final java.lang.String LOG_PROPERTY

protected static final java.lang.String LOG_PROPERTY_OLD

private static final java.lang.String PKG_IMPL

private static final int PKG_LEN

private static final java.lang.String[] classesToDiscover

private boolean allowFlawedContext

private boolean allowFlawedDiscovery

private boolean allowFlawedHierarchy

protected java.util.Hashtable attributes

private java.lang.String diagnosticPrefix

protected java.util.Hashtable instances

private java.lang.String logClassName

protected java.lang.reflect.Constructor logConstructor

protected java.lang.Class[] logConstructorSignature

protected java.lang.reflect.Method logMethod

protected java.lang.Class[] logMethodSignature

private boolean useTCCL
----------------METHODS----------------

static void <clinit>()

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
private org.apache.commons.logging.Log createLogFromClass(
java.lang.String
java.lang.String
boolean)
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
private org.apache.commons.logging.Log discoverLogImplementation(
java.lang.String)

private java.lang.String findUserSpecifiedLogClassName()
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
private java.lang.ClassLoader getBaseClassLoader()

private boolean getBooleanConfiguration(
java.lang.String
boolean)

protected static java.lang.ClassLoader getClassLoader(
java.lang.Class)

private java.lang.String getConfigurationValue(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
protected static java.lang.ClassLoader getContextClassLoader()

private java.lang.ClassLoader getLowestClassLoader(
java.lang.ClassLoader
java.lang.ClassLoader)

private void handleFlawedDiscovery(
java.lang.String
java.lang.ClassLoader
java.lang.Throwable)
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
private void handleFlawedHierarchy(
java.lang.ClassLoader
java.lang.Class)

private void informUponSimilarName(
java.lang.StringBuffer
java.lang.String
java.lang.String)

private void initConfiguration()

private void initDiagnostics()

protected static boolean isDiagnosticsEnabled()

private boolean isLogLibraryAvailable(
java.lang.String
java.lang.String)

public java.lang.Object getAttribute(
java.lang.String)

public java.lang.String[] getAttributeNames()
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
public org.apache.commons.logging.Log getInstance(
java.lang.Class)
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
public org.apache.commons.logging.Log getInstance(
java.lang.String)

protected java.lang.String getLogClassName()
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
protected java.lang.reflect.Constructor getLogConstructor()

protected boolean isJdk13LumberjackAvailable()

protected boolean isJdk14Available()

protected boolean isLog4JAvailable()

protected void logDiagnostic(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/commons/logging/LogConfigurationException; )
protected org.apache.commons.logging.Log newInstance(
java.lang.String)

public void release()

public void removeAttribute(
java.lang.String)

public void setAttribute(
java.lang.String
java.lang.Object)

________________CLASS________________


public class org.apache.commons.logging.impl.NoOpLog extends java.lang.Object implements org.apache.commons.logging.Log, java.io.Serializable

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void debug(
java.lang.Object)

public void debug(
java.lang.Object
java.lang.Throwable)

public void error(
java.lang.Object)

public void error(
java.lang.Object
java.lang.Throwable)

public void fatal(
java.lang.Object)

public void fatal(
java.lang.Object
java.lang.Throwable)

public void info(
java.lang.Object)

public void info(
java.lang.Object
java.lang.Throwable)

public final boolean isDebugEnabled()

public final boolean isErrorEnabled()

public final boolean isFatalEnabled()

public final boolean isInfoEnabled()

public final boolean isTraceEnabled()

public final boolean isWarnEnabled()

public void trace(
java.lang.Object)

public void trace(
java.lang.Object
java.lang.Throwable)

public void warn(
java.lang.Object)

public void warn(
java.lang.Object
java.lang.Throwable)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class org.apache.commons.logging.impl.SimpleLog$1 extends java.lang.Object implements java.security.PrivilegedAction

----------------FIELDS----------------

final java.lang.String val$name
----------------METHODS----------------

 void <init>(
java.lang.String)

public java.lang.Object run()

________________CLASS________________


public class org.apache.commons.logging.impl.SimpleLog extends java.lang.Object implements org.apache.commons.logging.Log, java.io.Serializable

----------------FIELDS----------------

protected static final java.lang.String DEFAULT_DATE_TIME_FORMAT

public static final int LOG_LEVEL_ALL

public static final int LOG_LEVEL_DEBUG

public static final int LOG_LEVEL_ERROR

public static final int LOG_LEVEL_FATAL

public static final int LOG_LEVEL_INFO

public static final int LOG_LEVEL_OFF

public static final int LOG_LEVEL_TRACE

public static final int LOG_LEVEL_WARN

protected static java.text.DateFormat dateFormatter

protected static java.lang.String dateTimeFormat

protected static boolean showDateTime

protected static boolean showLogName

protected static boolean showShortName

protected static final java.util.Properties simpleLogProps

protected static final java.lang.String systemPrefix

protected int currentLogLevel

protected java.lang.String logName

private java.lang.String shortLogName
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String)

static java.lang.ClassLoader access$000()

private static boolean getBooleanProperty(
java.lang.String
boolean)

private static java.lang.ClassLoader getContextClassLoader()

private static java.io.InputStream getResourceAsStream(
java.lang.String)

private static java.lang.String getStringProperty(
java.lang.String)

private static java.lang.String getStringProperty(
java.lang.String
java.lang.String)

public final void debug(
java.lang.Object)

public final void debug(
java.lang.Object
java.lang.Throwable)

public final void error(
java.lang.Object)

public final void error(
java.lang.Object
java.lang.Throwable)

public final void fatal(
java.lang.Object)

public final void fatal(
java.lang.Object
java.lang.Throwable)

public int getLevel()

public final void info(
java.lang.Object)

public final void info(
java.lang.Object
java.lang.Throwable)

public final boolean isDebugEnabled()

public final boolean isErrorEnabled()

public final boolean isFatalEnabled()

public final boolean isInfoEnabled()

protected boolean isLevelEnabled(
int)

public final boolean isTraceEnabled()

public final boolean isWarnEnabled()

protected void log(
int
java.lang.Object
java.lang.Throwable)

public void setLevel(
int)

public final void trace(
java.lang.Object)

public final void trace(
java.lang.Object
java.lang.Throwable)

public final void warn(
java.lang.Object)

public final void warn(
java.lang.Object
java.lang.Throwable)

protected void write(
java.lang.StringBuffer)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class org.apache.commons.logging.impl.WeakHashtable$1 extends java.lang.Object implements java.util.Enumeration

----------------FIELDS----------------

final org.apache.commons.logging.impl.WeakHashtable this$0

final java.util.Enumeration val$enumer
----------------METHODS----------------

 void <init>(
org.apache.commons.logging.impl.WeakHashtable
java.util.Enumeration)

public boolean hasMoreElements()

public java.lang.Object nextElement()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =Entry )
@dalvik.annotation.EnclosingClass (value =Lorg/apache/commons/logging/impl/WeakHashtable; )
final class org.apache.commons.logging.impl.WeakHashtable$Entry extends java.lang.Object implements java.util.Map$Entry

----------------FIELDS----------------

private final java.lang.Object key

private final java.lang.Object value
----------------METHODS----------------

private void <init>(
java.lang.Object
java.lang.Object)

 void <init>(
java.lang.Object
java.lang.Object
org.apache.commons.logging.impl.WeakHashtable$1)

public boolean equals(
java.lang.Object)

public java.lang.Object getKey()

public java.lang.Object getValue()

public int hashCode()

public java.lang.Object setValue(
java.lang.Object)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =Referenced )
@dalvik.annotation.EnclosingClass (value =Lorg/apache/commons/logging/impl/WeakHashtable; )
final class org.apache.commons.logging.impl.WeakHashtable$Referenced extends java.lang.Object

----------------FIELDS----------------

private final int hashCode

private final java.lang.ref.WeakReference reference
----------------METHODS----------------

private void <init>(
java.lang.Object)

private void <init>(
java.lang.Object
java.lang.ref.ReferenceQueue)

 void <init>(
java.lang.Object
java.lang.ref.ReferenceQueue
org.apache.commons.logging.impl.WeakHashtable$1)

 void <init>(
java.lang.Object
org.apache.commons.logging.impl.WeakHashtable$1)

static java.lang.Object access$100(
org.apache.commons.logging.impl.WeakHashtable$Referenced)

private java.lang.Object getValue()

public boolean equals(
java.lang.Object)

public int hashCode()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =26 name =WeakKey )
@dalvik.annotation.EnclosingClass (value =Lorg/apache/commons/logging/impl/WeakHashtable; )
final class org.apache.commons.logging.impl.WeakHashtable$WeakKey extends java.lang.ref.WeakReference

----------------FIELDS----------------

private final org.apache.commons.logging.impl.WeakHashtable$Referenced referenced
----------------METHODS----------------

private void <init>(
java.lang.Object
java.lang.ref.ReferenceQueue
org.apache.commons.logging.impl.WeakHashtable$Referenced)

 void <init>(
java.lang.Object
java.lang.ref.ReferenceQueue
org.apache.commons.logging.impl.WeakHashtable$Referenced
org.apache.commons.logging.impl.WeakHashtable$1)

static org.apache.commons.logging.impl.WeakHashtable$Referenced access$400(
org.apache.commons.logging.impl.WeakHashtable$WeakKey)

private org.apache.commons.logging.impl.WeakHashtable$Referenced getReferenced()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lorg/apache/commons/logging/impl/WeakHashtable$WeakKey;Lorg/apache/commons/logging/impl/WeakHashtable$Referenced;Lorg/apache/commons/logging/impl/WeakHashtable$Entry; )
public final class org.apache.commons.logging.impl.WeakHashtable extends java.util.Hashtable

----------------FIELDS----------------

private static final int MAX_CHANGES_BEFORE_PURGE

private static final int PARTIAL_PURGE_COUNT

private int changeCount

private java.lang.ref.ReferenceQueue queue
----------------METHODS----------------

public void <init>()

private void purge()

private void purgeOne()

public boolean containsKey(
java.lang.Object)

public java.util.Enumeration elements()

public java.util.Set entrySet()

public java.lang.Object get(
java.lang.Object)

public boolean isEmpty()

public java.util.Set keySet()

public java.util.Enumeration keys()

public java.lang.Object put(
java.lang.Object
java.lang.Object)

public void putAll(
java.util.Map)

protected void rehash()

public java.lang.Object remove(
java.lang.Object)

public int size()

public java.lang.String toString()

public java.util.Collection values()

________________CLASS________________


public class org.apache.http.ConnectionClosedException extends java.io.IOException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________


public abstract interface class org.apache.http.ConnectionReuseStrategy extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean keepAlive(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public abstract interface class org.apache.http.Header extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public abstract org.apache.http.HeaderElement[] getElements()

public abstract java.lang.String getName()

public abstract java.lang.String getValue()

________________CLASS________________


public abstract interface class org.apache.http.FormattedHeader extends java.lang.Object implements org.apache.http.Header

----------------FIELDS----------------
----------------METHODS----------------

public abstract org.apache.http.util.CharArrayBuffer getBuffer()

public abstract int getValuePos()

________________CLASS________________


public abstract interface class org.apache.http.HeaderElement extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.lang.String getName()

public abstract org.apache.http.NameValuePair getParameter(
int)

public abstract org.apache.http.NameValuePair getParameterByName(
java.lang.String)

public abstract int getParameterCount()

public abstract org.apache.http.NameValuePair[] getParameters()

public abstract java.lang.String getValue()

________________CLASS________________


public abstract interface class org.apache.http.HeaderElementIterator extends java.lang.Object implements java.util.Iterator

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean hasNext()

public abstract org.apache.http.HeaderElement nextElement()

________________CLASS________________


public abstract interface class org.apache.http.HeaderIterator extends java.lang.Object implements java.util.Iterator

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean hasNext()

public abstract org.apache.http.Header nextHeader()

________________CLASS________________


public abstract interface class org.apache.http.HttpClientConnection extends java.lang.Object implements org.apache.http.HttpConnection

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void flush()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract boolean isResponseAvailable(
int)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public abstract void receiveResponseEntity(
org.apache.http.HttpResponse)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public abstract org.apache.http.HttpResponse receiveResponseHeader()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public abstract void sendRequestEntity(
org.apache.http.HttpEntityEnclosingRequest)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public abstract void sendRequestHeader(
org.apache.http.HttpRequest)

________________CLASS________________


public abstract interface class org.apache.http.HttpConnectionMetrics extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.lang.Object getMetric(
java.lang.String)

public abstract long getReceivedBytesCount()

public abstract long getRequestCount()

public abstract long getResponseCount()

public abstract long getSentBytesCount()

public abstract void reset()

________________CLASS________________


public abstract interface class org.apache.http.HttpMessage extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void addHeader(
java.lang.String
java.lang.String)

public abstract void addHeader(
org.apache.http.Header)

public abstract boolean containsHeader(
java.lang.String)

public abstract org.apache.http.Header[] getAllHeaders()

public abstract org.apache.http.Header getFirstHeader(
java.lang.String)

public abstract org.apache.http.Header[] getHeaders(
java.lang.String)

public abstract org.apache.http.Header getLastHeader(
java.lang.String)

public abstract org.apache.http.params.HttpParams getParams()

public abstract org.apache.http.ProtocolVersion getProtocolVersion()

public abstract org.apache.http.HeaderIterator headerIterator()

public abstract org.apache.http.HeaderIterator headerIterator(
java.lang.String)

public abstract void removeHeader(
org.apache.http.Header)

public abstract void removeHeaders(
java.lang.String)

public abstract void setHeader(
java.lang.String
java.lang.String)

public abstract void setHeader(
org.apache.http.Header)

public abstract void setHeaders(
org.apache.http.Header[])

public abstract void setParams(
org.apache.http.params.HttpParams)

________________CLASS________________


public abstract interface class org.apache.http.HttpRequest extends java.lang.Object implements org.apache.http.HttpMessage

----------------FIELDS----------------
----------------METHODS----------------

public abstract org.apache.http.RequestLine getRequestLine()

________________CLASS________________


public abstract interface class org.apache.http.HttpEntityEnclosingRequest extends java.lang.Object implements org.apache.http.HttpRequest

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean expectContinue()

public abstract org.apache.http.HttpEntity getEntity()

public abstract void setEntity(
org.apache.http.HttpEntity)

________________CLASS________________


public class org.apache.http.HttpException extends java.lang.Exception

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

________________CLASS________________


public final class org.apache.http.HttpHost extends java.lang.Object implements java.lang.Cloneable

----------------FIELDS----------------

public static final java.lang.String DEFAULT_SCHEME_NAME

protected final java.lang.String hostname

protected final java.lang.String lcHostname

protected final int port

protected final java.lang.String schemeName
----------------METHODS----------------

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
int)

public void <init>(
java.lang.String
int
java.lang.String)

public void <init>(
org.apache.http.HttpHost)
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public boolean equals(
java.lang.Object)

public java.lang.String getHostName()

public int getPort()

public java.lang.String getSchemeName()

public int hashCode()

public java.lang.String toHostString()

public java.lang.String toString()

public java.lang.String toURI()

________________CLASS________________


public abstract interface class org.apache.http.HttpRequestFactory extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/MethodNotSupportedException; )
public abstract org.apache.http.HttpRequest newHttpRequest(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/MethodNotSupportedException; )
public abstract org.apache.http.HttpRequest newHttpRequest(
org.apache.http.RequestLine)

________________CLASS________________


public abstract interface class org.apache.http.HttpResponse extends java.lang.Object implements org.apache.http.HttpMessage

----------------FIELDS----------------
----------------METHODS----------------

public abstract org.apache.http.HttpEntity getEntity()

public abstract java.util.Locale getLocale()

public abstract org.apache.http.StatusLine getStatusLine()

public abstract void setEntity(
org.apache.http.HttpEntity)

public abstract void setLocale(
java.util.Locale)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public abstract void setReasonPhrase(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public abstract void setStatusCode(
int)

public abstract void setStatusLine(
org.apache.http.ProtocolVersion
int)

public abstract void setStatusLine(
org.apache.http.ProtocolVersion
int
java.lang.String)

public abstract void setStatusLine(
org.apache.http.StatusLine)

________________CLASS________________


public abstract interface class org.apache.http.HttpResponseFactory extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract org.apache.http.HttpResponse newHttpResponse(
org.apache.http.ProtocolVersion
int
org.apache.http.protocol.HttpContext)

public abstract org.apache.http.HttpResponse newHttpResponse(
org.apache.http.StatusLine
org.apache.http.protocol.HttpContext)

________________CLASS________________


public abstract interface class org.apache.http.HttpResponseInterceptor extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public abstract void process(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public abstract interface class org.apache.http.HttpServerConnection extends java.lang.Object implements org.apache.http.HttpConnection

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void flush()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public abstract void receiveRequestEntity(
org.apache.http.HttpEntityEnclosingRequest)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public abstract org.apache.http.HttpRequest receiveRequestHeader()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public abstract void sendResponseEntity(
org.apache.http.HttpResponse)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public abstract void sendResponseHeader(
org.apache.http.HttpResponse)

________________CLASS________________


public abstract interface class org.apache.http.HttpStatus extends java.lang.Object

----------------FIELDS----------------

public static final int SC_ACCEPTED

public static final int SC_BAD_GATEWAY

public static final int SC_BAD_REQUEST

public static final int SC_CONFLICT

public static final int SC_CONTINUE

public static final int SC_CREATED

public static final int SC_EXPECTATION_FAILED

public static final int SC_FAILED_DEPENDENCY

public static final int SC_FORBIDDEN

public static final int SC_GATEWAY_TIMEOUT

public static final int SC_GONE

public static final int SC_HTTP_VERSION_NOT_SUPPORTED

public static final int SC_INSUFFICIENT_SPACE_ON_RESOURCE

public static final int SC_INSUFFICIENT_STORAGE

public static final int SC_INTERNAL_SERVER_ERROR

public static final int SC_LENGTH_REQUIRED

public static final int SC_LOCKED

public static final int SC_METHOD_FAILURE

public static final int SC_METHOD_NOT_ALLOWED

public static final int SC_MOVED_PERMANENTLY

public static final int SC_MOVED_TEMPORARILY

public static final int SC_MULTIPLE_CHOICES

public static final int SC_MULTI_STATUS

public static final int SC_NON_AUTHORITATIVE_INFORMATION

public static final int SC_NOT_ACCEPTABLE

public static final int SC_NOT_FOUND

public static final int SC_NOT_IMPLEMENTED

public static final int SC_NOT_MODIFIED

public static final int SC_NO_CONTENT

public static final int SC_OK

public static final int SC_PARTIAL_CONTENT

public static final int SC_PAYMENT_REQUIRED

public static final int SC_PRECONDITION_FAILED

public static final int SC_PROCESSING

public static final int SC_PROXY_AUTHENTICATION_REQUIRED

public static final int SC_REQUESTED_RANGE_NOT_SATISFIABLE

public static final int SC_REQUEST_TIMEOUT

public static final int SC_REQUEST_TOO_LONG

public static final int SC_REQUEST_URI_TOO_LONG

public static final int SC_RESET_CONTENT

public static final int SC_SEE_OTHER

public static final int SC_SERVICE_UNAVAILABLE

public static final int SC_SWITCHING_PROTOCOLS

public static final int SC_TEMPORARY_REDIRECT

public static final int SC_UNAUTHORIZED

public static final int SC_UNPROCESSABLE_ENTITY

public static final int SC_UNSUPPORTED_MEDIA_TYPE

public static final int SC_USE_PROXY
----------------METHODS----------------

________________CLASS________________


public class org.apache.http.ProtocolVersion extends java.lang.Object implements java.io.Serializable, java.lang.Cloneable

----------------FIELDS----------------

private static final long serialVersionUID

protected final int major

protected final int minor

protected final java.lang.String protocol
----------------METHODS----------------

public void <init>(
java.lang.String
int
int)
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public int compareToVersion(
org.apache.http.ProtocolVersion)

public final boolean equals(
java.lang.Object)

public org.apache.http.ProtocolVersion forVersion(
int
int)

public final int getMajor()

public final int getMinor()

public final java.lang.String getProtocol()

public final boolean greaterEquals(
org.apache.http.ProtocolVersion)

public final int hashCode()

public boolean isComparable(
org.apache.http.ProtocolVersion)

public final boolean lessEquals(
org.apache.http.ProtocolVersion)

public java.lang.String toString()

________________CLASS________________


public final class org.apache.http.HttpVersion extends org.apache.http.ProtocolVersion implements java.io.Serializable

----------------FIELDS----------------

public static final java.lang.String HTTP

public static final org.apache.http.HttpVersion HTTP_0_9

public static final org.apache.http.HttpVersion HTTP_1_0

public static final org.apache.http.HttpVersion HTTP_1_1

private static final long serialVersionUID
----------------METHODS----------------

static void <clinit>()

public void <init>(
int
int)

public org.apache.http.ProtocolVersion forVersion(
int
int)

________________CLASS________________


public class org.apache.http.MalformedChunkCodingException extends java.io.IOException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public class org.apache.http.MethodNotSupportedException extends org.apache.http.HttpException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

________________CLASS________________


public abstract interface class org.apache.http.NameValuePair extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.lang.String getName()

public abstract java.lang.String getValue()

________________CLASS________________


public class org.apache.http.NoHttpResponseException extends java.io.IOException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>(
java.lang.String)

________________CLASS________________


public class org.apache.http.ParseException extends java.lang.RuntimeException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public class org.apache.http.ProtocolException extends org.apache.http.HttpException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

________________CLASS________________


public abstract interface class org.apache.http.ReasonPhraseCatalog extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.lang.String getReason(
int
java.util.Locale)

________________CLASS________________


public abstract interface class org.apache.http.RequestLine extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.lang.String getMethod()

public abstract org.apache.http.ProtocolVersion getProtocolVersion()

public abstract java.lang.String getUri()

________________CLASS________________


public abstract interface class org.apache.http.StatusLine extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract org.apache.http.ProtocolVersion getProtocolVersion()

public abstract java.lang.String getReasonPhrase()

public abstract int getStatusCode()

________________CLASS________________


public abstract interface class org.apache.http.TokenIterator extends java.lang.Object implements java.util.Iterator

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean hasNext()

public abstract java.lang.String nextToken()

________________CLASS________________


public class org.apache.http.UnsupportedHttpVersionException extends org.apache.http.ProtocolException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public final class org.apache.http.auth.AUTH extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String PROXY_AUTH

public static final java.lang.String PROXY_AUTH_RESP

public static final java.lang.String WWW_AUTH

public static final java.lang.String WWW_AUTH_RESP
----------------METHODS----------------

private void <init>()

________________CLASS________________


public abstract interface class org.apache.http.auth.AuthScheme extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/AuthenticationException; )
public abstract org.apache.http.Header authenticate(
org.apache.http.auth.Credentials
org.apache.http.HttpRequest)

public abstract java.lang.String getParameter(
java.lang.String)

public abstract java.lang.String getRealm()

public abstract java.lang.String getSchemeName()

public abstract boolean isComplete()

public abstract boolean isConnectionBased()
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/MalformedChallengeException; )
public abstract void processChallenge(
org.apache.http.Header)

________________CLASS________________


public abstract interface class org.apache.http.auth.AuthSchemeFactory extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract org.apache.http.auth.AuthScheme newInstance(
org.apache.http.params.HttpParams)

________________CLASS________________


public final class org.apache.http.auth.AuthSchemeRegistry extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Lorg/apache/http/auth/AuthSchemeFactory;>; )
private final java.util.Map registeredSchemes
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public org.apache.http.auth.AuthScheme getAuthScheme(
java.lang.String
org.apache.http.params.HttpParams)
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getSchemeNames()

public void register(
java.lang.String
org.apache.http.auth.AuthSchemeFactory)
@dalvik.annotation.Signature (value =(Ljava/util/Map<Ljava/lang/String;Lorg/apache/http/auth/AuthSchemeFactory;>;)V )
public void setItems(
java.util.Map)

public void unregister(
java.lang.String)

________________CLASS________________


public class org.apache.http.auth.AuthScope extends java.lang.Object

----------------FIELDS----------------

public static final org.apache.http.auth.AuthScope ANY

public static final java.lang.String ANY_HOST

public static final int ANY_PORT

public static final java.lang.String ANY_REALM

public static final java.lang.String ANY_SCHEME

private final java.lang.String host

private final int port

private final java.lang.String realm

private final java.lang.String scheme
----------------METHODS----------------

static void <clinit>()

public void <init>(
java.lang.String
int)

public void <init>(
java.lang.String
int
java.lang.String)

public void <init>(
java.lang.String
int
java.lang.String
java.lang.String)

public void <init>(
org.apache.http.auth.AuthScope)

public boolean equals(
java.lang.Object)

public java.lang.String getHost()

public int getPort()

public java.lang.String getRealm()

public java.lang.String getScheme()

public int hashCode()

public int match(
org.apache.http.auth.AuthScope)

public java.lang.String toString()

________________CLASS________________


public class org.apache.http.auth.AuthState extends java.lang.Object

----------------FIELDS----------------

private org.apache.http.auth.AuthScheme authScheme

private org.apache.http.auth.AuthScope authScope

private org.apache.http.auth.Credentials credentials
----------------METHODS----------------

public void <init>()

public org.apache.http.auth.AuthScheme getAuthScheme()

public org.apache.http.auth.AuthScope getAuthScope()

public org.apache.http.auth.Credentials getCredentials()

public void invalidate()

public boolean isValid()

public void setAuthScheme(
org.apache.http.auth.AuthScheme)

public void setAuthScope(
org.apache.http.auth.AuthScope)

public void setCredentials(
org.apache.http.auth.Credentials)

public java.lang.String toString()

________________CLASS________________


public class org.apache.http.auth.AuthenticationException extends org.apache.http.ProtocolException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

________________CLASS________________


public final class org.apache.http.auth.BasicUserPrincipal extends java.lang.Object implements java.security.Principal

----------------FIELDS----------------

private final java.lang.String username
----------------METHODS----------------

public void <init>(
java.lang.String)

public boolean equals(
java.lang.Object)

public java.lang.String getName()

public int hashCode()

public java.lang.String toString()

________________CLASS________________


public abstract interface class org.apache.http.auth.Credentials extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.lang.String getPassword()

public abstract java.security.Principal getUserPrincipal()

________________CLASS________________


public class org.apache.http.auth.InvalidCredentialsException extends org.apache.http.auth.AuthenticationException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

________________CLASS________________


public class org.apache.http.auth.MalformedChallengeException extends org.apache.http.ProtocolException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

________________CLASS________________


public class org.apache.http.auth.NTCredentials extends java.lang.Object implements org.apache.http.auth.Credentials

----------------FIELDS----------------

private final java.lang.String password

private final org.apache.http.auth.NTUserPrincipal principal

private final java.lang.String workstation
----------------METHODS----------------

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

public boolean equals(
java.lang.Object)

public java.lang.String getDomain()

public java.lang.String getPassword()

public java.lang.String getUserName()

public java.security.Principal getUserPrincipal()

public java.lang.String getWorkstation()

public int hashCode()

public java.lang.String toString()

________________CLASS________________


public class org.apache.http.auth.NTUserPrincipal extends java.lang.Object implements java.security.Principal

----------------FIELDS----------------

private final java.lang.String domain

private final java.lang.String ntname

private final java.lang.String username
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String)

public boolean equals(
java.lang.Object)

public java.lang.String getDomain()

public java.lang.String getName()

public java.lang.String getUsername()

public int hashCode()

public java.lang.String toString()

________________CLASS________________


public class org.apache.http.auth.UsernamePasswordCredentials extends java.lang.Object implements org.apache.http.auth.Credentials

----------------FIELDS----------------

private final java.lang.String password

private final org.apache.http.auth.BasicUserPrincipal principal
----------------METHODS----------------

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.String)

public boolean equals(
java.lang.Object)

public java.lang.String getPassword()

public java.lang.String getUserName()

public java.security.Principal getUserPrincipal()

public int hashCode()

public java.lang.String toString()

________________CLASS________________


public abstract interface class org.apache.http.auth.params.AuthPNames extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String CREDENTIAL_CHARSET
----------------METHODS----------------

________________CLASS________________


public abstract class org.apache.http.params.HttpAbstractParamBean extends java.lang.Object

----------------FIELDS----------------

protected final org.apache.http.params.HttpParams params
----------------METHODS----------------

public void <init>(
org.apache.http.params.HttpParams)

________________CLASS________________


public class org.apache.http.auth.params.AuthParamBean extends org.apache.http.params.HttpAbstractParamBean

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
org.apache.http.params.HttpParams)

public void setCredentialCharset(
java.lang.String)

________________CLASS________________


public final class org.apache.http.auth.params.AuthParams extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

public static java.lang.String getCredentialCharset(
org.apache.http.params.HttpParams)

public static void setCredentialCharset(
org.apache.http.params.HttpParams
java.lang.String)

________________CLASS________________


public abstract interface class org.apache.http.client.AuthenticationHandler extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/MalformedChallengeException; )
@dalvik.annotation.Signature (value =(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Ljava/util/Map<Ljava/lang/String;Lorg/apache/http/Header;>; )
public abstract java.util.Map getChallenges(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

public abstract boolean isAuthenticationRequested(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/AuthenticationException; )
@dalvik.annotation.Signature (value =(Ljava/util/Map<Ljava/lang/String;Lorg/apache/http/Header;>;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/auth/AuthScheme; )
public abstract org.apache.http.auth.AuthScheme selectScheme(
java.util.Map
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.client.RedirectException extends org.apache.http.ProtocolException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

________________CLASS________________


public class org.apache.http.client.CircularRedirectException extends org.apache.http.client.RedirectException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

________________CLASS________________


public class org.apache.http.client.ClientProtocolException extends java.io.IOException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

public void <init>(
java.lang.Throwable)

________________CLASS________________


public abstract interface class org.apache.http.client.CookieStore extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void addCookie(
org.apache.http.cookie.Cookie)

public abstract void clear()

public abstract boolean clearExpired(
java.util.Date)
@dalvik.annotation.Signature (value =()Ljava/util/List<Lorg/apache/http/cookie/Cookie;>; )
public abstract java.util.List getCookies()

________________CLASS________________


public abstract interface class org.apache.http.client.CredentialsProvider extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void clear()

public abstract org.apache.http.auth.Credentials getCredentials(
org.apache.http.auth.AuthScope)

public abstract void setCredentials(
org.apache.http.auth.AuthScope
org.apache.http.auth.Credentials)

________________CLASS________________


public abstract interface class org.apache.http.client.HttpRequestRetryHandler extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean retryRequest(
java.io.IOException
int
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.client.HttpResponseException extends org.apache.http.client.ClientProtocolException

----------------FIELDS----------------

private static final long serialVersionUID

private final int statusCode
----------------METHODS----------------

public void <init>(
int
java.lang.String)

public int getStatusCode()

________________CLASS________________


public class org.apache.http.client.NonRepeatableRequestException extends org.apache.http.ProtocolException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public abstract interface class org.apache.http.client.RedirectHandler extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/ProtocolException; )
public abstract java.net.URI getLocationURI(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

public abstract boolean isRedirectRequested(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public abstract interface class org.apache.http.client.RequestDirector extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public abstract org.apache.http.HttpResponse execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

________________CLASS________________

@dalvik.annotation.Signature (value =<T:Ljava/lang/Object;>Ljava/lang/Object; )
public abstract interface class org.apache.http.client.ResponseHandler extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Lorg/apache/http/HttpResponse;)TT; )
@dalvik.annotation.Throws (value =Lorg/apache/http/client/ClientProtocolException;Ljava/io/IOException; )
public abstract java.lang.Object handleResponse(
org.apache.http.HttpResponse)

________________CLASS________________


public abstract interface class org.apache.http.client.UserTokenHandler extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.lang.Object getUserToken(
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.entity.StringEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable

----------------FIELDS----------------

protected final byte[] content
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/UnsupportedEncodingException; )
public void <init>(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/UnsupportedEncodingException; )
public void <init>(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.io.InputStream getContent()

public long getContentLength()

public boolean isRepeatable()

public boolean isStreaming()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeTo(
java.io.OutputStream)

________________CLASS________________


public class org.apache.http.client.entity.UrlEncodedFormEntity extends org.apache.http.entity.StringEntity

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/UnsupportedEncodingException; )
@dalvik.annotation.Signature (value =(Ljava/util/List<+Lorg/apache/http/NameValuePair;>;)V )
public void <init>(
java.util.List)
@dalvik.annotation.Signature (value =(Ljava/util/List<+Lorg/apache/http/NameValuePair;>;Ljava/lang/String;)V )
@dalvik.annotation.Throws (value =Ljava/io/UnsupportedEncodingException; )
public void <init>(
java.util.List
java.lang.String)

________________CLASS________________


public abstract interface class org.apache.http.client.methods.AbortableHttpRequest extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void abort()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void setConnectionRequest(
org.apache.http.conn.ClientConnectionRequest)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void setReleaseTrigger(
org.apache.http.conn.ConnectionReleaseTrigger)

________________CLASS________________


public abstract class org.apache.http.message.AbstractHttpMessage extends java.lang.Object implements org.apache.http.HttpMessage

----------------FIELDS----------------

protected org.apache.http.message.HeaderGroup headergroup

protected org.apache.http.params.HttpParams params
----------------METHODS----------------

protected void <init>()

protected void <init>(
org.apache.http.params.HttpParams)

public void addHeader(
java.lang.String
java.lang.String)

public void addHeader(
org.apache.http.Header)

public boolean containsHeader(
java.lang.String)

public org.apache.http.Header[] getAllHeaders()

public org.apache.http.Header getFirstHeader(
java.lang.String)

public org.apache.http.Header[] getHeaders(
java.lang.String)

public org.apache.http.Header getLastHeader(
java.lang.String)

public org.apache.http.params.HttpParams getParams()

public org.apache.http.HeaderIterator headerIterator()

public org.apache.http.HeaderIterator headerIterator(
java.lang.String)

public void removeHeader(
org.apache.http.Header)

public void removeHeaders(
java.lang.String)

public void setHeader(
java.lang.String
java.lang.String)

public void setHeader(
org.apache.http.Header)

public void setHeaders(
org.apache.http.Header[])

public void setParams(
org.apache.http.params.HttpParams)

________________CLASS________________


public abstract interface class org.apache.http.client.methods.HttpUriRequest extends java.lang.Object implements org.apache.http.HttpRequest

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/lang/UnsupportedOperationException; )
public abstract void abort()

public abstract java.lang.String getMethod()

public abstract java.net.URI getURI()

public abstract boolean isAborted()

________________CLASS________________


public abstract class org.apache.http.client.methods.HttpRequestBase extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.client.methods.HttpUriRequest, org.apache.http.client.methods.AbortableHttpRequest, java.lang.Cloneable

----------------FIELDS----------------

private java.util.concurrent.locks.Lock abortLock

private boolean aborted

private org.apache.http.conn.ClientConnectionRequest connRequest

private org.apache.http.conn.ConnectionReleaseTrigger releaseTrigger

private java.net.URI uri
----------------METHODS----------------

public void <init>()

public void abort()
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public abstract java.lang.String getMethod()

public org.apache.http.ProtocolVersion getProtocolVersion()

public org.apache.http.RequestLine getRequestLine()

public java.net.URI getURI()

public boolean isAborted()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void setConnectionRequest(
org.apache.http.conn.ClientConnectionRequest)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void setReleaseTrigger(
org.apache.http.conn.ConnectionReleaseTrigger)

public void setURI(
java.net.URI)

________________CLASS________________


public class org.apache.http.client.methods.HttpDelete extends org.apache.http.client.methods.HttpRequestBase

----------------FIELDS----------------

public static final java.lang.String METHOD_NAME
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.net.URI)

public java.lang.String getMethod()

________________CLASS________________


public abstract class org.apache.http.client.methods.HttpEntityEnclosingRequestBase extends org.apache.http.client.methods.HttpRequestBase implements org.apache.http.HttpEntityEnclosingRequest

----------------FIELDS----------------

private org.apache.http.HttpEntity entity
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public boolean expectContinue()

public org.apache.http.HttpEntity getEntity()

public void setEntity(
org.apache.http.HttpEntity)

________________CLASS________________


public class org.apache.http.client.methods.HttpGet extends org.apache.http.client.methods.HttpRequestBase

----------------FIELDS----------------

public static final java.lang.String METHOD_NAME
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.net.URI)

public java.lang.String getMethod()

________________CLASS________________


public class org.apache.http.client.methods.HttpHead extends org.apache.http.client.methods.HttpRequestBase

----------------FIELDS----------------

public static final java.lang.String METHOD_NAME
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.net.URI)

public java.lang.String getMethod()

________________CLASS________________


public class org.apache.http.client.methods.HttpOptions extends org.apache.http.client.methods.HttpRequestBase

----------------FIELDS----------------

public static final java.lang.String METHOD_NAME
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.net.URI)
@dalvik.annotation.Signature (value =(Lorg/apache/http/HttpResponse;)Ljava/util/Set<Ljava/lang/String;>; )
public java.util.Set getAllowedMethods(
org.apache.http.HttpResponse)

public java.lang.String getMethod()

________________CLASS________________


public class org.apache.http.client.methods.HttpPost extends org.apache.http.client.methods.HttpEntityEnclosingRequestBase

----------------FIELDS----------------

public static final java.lang.String METHOD_NAME
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.net.URI)

public java.lang.String getMethod()

________________CLASS________________


public class org.apache.http.client.methods.HttpPut extends org.apache.http.client.methods.HttpEntityEnclosingRequestBase

----------------FIELDS----------------

public static final java.lang.String METHOD_NAME
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.net.URI)

public java.lang.String getMethod()

________________CLASS________________


public class org.apache.http.client.methods.HttpTrace extends org.apache.http.client.methods.HttpRequestBase

----------------FIELDS----------------

public static final java.lang.String METHOD_NAME
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.net.URI)

public java.lang.String getMethod()

________________CLASS________________


public abstract interface class org.apache.http.params.CoreConnectionPNames extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String CONNECTION_TIMEOUT

public static final java.lang.String MAX_HEADER_COUNT

public static final java.lang.String MAX_LINE_LENGTH

public static final java.lang.String SOCKET_BUFFER_SIZE

public static final java.lang.String SO_LINGER

public static final java.lang.String SO_TIMEOUT

public static final java.lang.String STALE_CONNECTION_CHECK

public static final java.lang.String TCP_NODELAY
----------------METHODS----------------

________________CLASS________________


public abstract interface class org.apache.http.params.CoreProtocolPNames extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String HTTP_CONTENT_CHARSET

public static final java.lang.String HTTP_ELEMENT_CHARSET

public static final java.lang.String ORIGIN_SERVER

public static final java.lang.String PROTOCOL_VERSION

public static final java.lang.String STRICT_TRANSFER_ENCODING

public static final java.lang.String USER_AGENT

public static final java.lang.String USE_EXPECT_CONTINUE

public static final java.lang.String WAIT_FOR_CONTINUE
----------------METHODS----------------

________________CLASS________________


public abstract interface class org.apache.http.client.params.ClientPNames extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ALLOW_CIRCULAR_REDIRECTS

public static final java.lang.String CONNECTION_MANAGER_FACTORY

public static final java.lang.String CONNECTION_MANAGER_FACTORY_CLASS_NAME

public static final java.lang.String COOKIE_POLICY

public static final java.lang.String DEFAULT_HEADERS

public static final java.lang.String DEFAULT_HOST

public static final java.lang.String HANDLE_AUTHENTICATION

public static final java.lang.String HANDLE_REDIRECTS

public static final java.lang.String MAX_REDIRECTS

public static final java.lang.String REJECT_RELATIVE_REDIRECT

public static final java.lang.String VIRTUAL_HOST
----------------METHODS----------------

________________CLASS________________


public abstract interface class org.apache.http.cookie.params.CookieSpecPNames extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String DATE_PATTERNS

public static final java.lang.String SINGLE_COOKIE_HEADER
----------------METHODS----------------

________________CLASS________________


public abstract interface class org.apache.http.conn.params.ConnConnectionPNames extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String MAX_STATUS_LINE_GARBAGE
----------------METHODS----------------

________________CLASS________________


public abstract interface class org.apache.http.conn.params.ConnManagerPNames extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String MAX_CONNECTIONS_PER_ROUTE

public static final java.lang.String MAX_TOTAL_CONNECTIONS

public static final java.lang.String TIMEOUT
----------------METHODS----------------

________________CLASS________________


public abstract interface class org.apache.http.conn.params.ConnRoutePNames extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String DEFAULT_PROXY

public static final java.lang.String FORCED_ROUTE

public static final java.lang.String LOCAL_ADDRESS
----------------METHODS----------------

________________CLASS________________


public abstract interface class org.apache.http.client.params.AllClientPNames extends java.lang.Object implements org.apache.http.params.CoreConnectionPNames, org.apache.http.params.CoreProtocolPNames, org.apache.http.client.params.ClientPNames, org.apache.http.auth.params.AuthPNames, org.apache.http.cookie.params.CookieSpecPNames, org.apache.http.conn.params.ConnConnectionPNames, org.apache.http.conn.params.ConnManagerPNames, org.apache.http.conn.params.ConnRoutePNames

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________


public final class org.apache.http.client.params.AuthPolicy extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String BASIC

public static final java.lang.String DIGEST

public static final java.lang.String NTLM
----------------METHODS----------------

private void <init>()

________________CLASS________________


public class org.apache.http.client.params.ClientParamBean extends org.apache.http.params.HttpAbstractParamBean

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
org.apache.http.params.HttpParams)

public void setAllowCircularRedirects(
boolean)

public void setConnectionManagerFactory(
org.apache.http.conn.ClientConnectionManagerFactory)

public void setConnectionManagerFactoryClassName(
java.lang.String)

public void setCookiePolicy(
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/util/Collection<Lorg/apache/http/Header;>;)V )
public void setDefaultHeaders(
java.util.Collection)

public void setDefaultHost(
org.apache.http.HttpHost)

public void setHandleAuthentication(
boolean)

public void setHandleRedirects(
boolean)

public void setMaxRedirects(
int)

public void setRejectRelativeRedirect(
boolean)

public void setVirtualHost(
org.apache.http.HttpHost)

________________CLASS________________


public final class org.apache.http.client.params.CookiePolicy extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String BEST_MATCH

public static final java.lang.String BROWSER_COMPATIBILITY

public static final java.lang.String NETSCAPE

public static final java.lang.String RFC_2109

public static final java.lang.String RFC_2965
----------------METHODS----------------

private void <init>()

________________CLASS________________


public class org.apache.http.client.params.HttpClientParams extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

public static java.lang.String getCookiePolicy(
org.apache.http.params.HttpParams)

public static boolean isAuthenticating(
org.apache.http.params.HttpParams)

public static boolean isRedirecting(
org.apache.http.params.HttpParams)

public static void setAuthenticating(
org.apache.http.params.HttpParams
boolean)

public static void setCookiePolicy(
org.apache.http.params.HttpParams
java.lang.String)

public static void setRedirecting(
org.apache.http.params.HttpParams
boolean)

________________CLASS________________


public abstract interface class org.apache.http.client.protocol.ClientContext extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String AUTHSCHEME_REGISTRY

public static final java.lang.String AUTH_SCHEME_PREF

public static final java.lang.String COOKIESPEC_REGISTRY

public static final java.lang.String COOKIE_ORIGIN

public static final java.lang.String COOKIE_SPEC

public static final java.lang.String COOKIE_STORE

public static final java.lang.String CREDS_PROVIDER

public static final java.lang.String PROXY_AUTH_STATE

public static final java.lang.String TARGET_AUTH_STATE

public static final java.lang.String USER_TOKEN
----------------METHODS----------------

________________CLASS________________


public class org.apache.http.client.protocol.ClientContextConfigurer extends java.lang.Object implements org.apache.http.client.protocol.ClientContext

----------------FIELDS----------------

private final org.apache.http.protocol.HttpContext context
----------------METHODS----------------

public void <init>(
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Signature (value =(Ljava/util/List<Ljava/lang/String;>;)V )
public void setAuthSchemePref(
java.util.List)

public void setAuthSchemeRegistry(
org.apache.http.auth.AuthSchemeRegistry)

public void setCookieSpecRegistry(
org.apache.http.cookie.CookieSpecRegistry)

public void setCookieStore(
org.apache.http.client.CookieStore)

public void setCredentialsProvider(
org.apache.http.client.CredentialsProvider)

________________CLASS________________


public class org.apache.http.client.protocol.RequestAddCookies extends java.lang.Object implements org.apache.http.HttpRequestInterceptor

----------------FIELDS----------------

private final org.apache.commons.logging.Log log
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void process(
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.client.protocol.RequestDefaultHeaders extends java.lang.Object implements org.apache.http.HttpRequestInterceptor

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void process(
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.client.protocol.RequestProxyAuthentication extends java.lang.Object implements org.apache.http.HttpRequestInterceptor

----------------FIELDS----------------

private final org.apache.commons.logging.Log log
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void process(
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.client.protocol.RequestTargetAuthentication extends java.lang.Object implements org.apache.http.HttpRequestInterceptor

----------------FIELDS----------------

private final org.apache.commons.logging.Log log
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void process(
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.client.protocol.ResponseProcessCookies extends java.lang.Object implements org.apache.http.HttpResponseInterceptor

----------------FIELDS----------------

private final org.apache.commons.logging.Log log
----------------METHODS----------------

public void <init>()

private void processCookies(
org.apache.http.HeaderIterator
org.apache.http.cookie.CookieSpec
org.apache.http.cookie.CookieOrigin
org.apache.http.client.CookieStore)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void process(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.client.utils.CloneUtils extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public static java.lang.Object clone(
java.lang.Object)

________________CLASS________________


public class org.apache.http.client.utils.URIUtils extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()
@dalvik.annotation.Throws (value =Ljava/net/URISyntaxException; )
public static java.net.URI createURI(
java.lang.String
java.lang.String
int
java.lang.String
java.lang.String
java.lang.String)

public static java.net.URI resolve(
java.net.URI
java.lang.String)

public static java.net.URI resolve(
java.net.URI
java.net.URI)
@dalvik.annotation.Throws (value =Ljava/net/URISyntaxException; )
public static java.net.URI rewriteURI(
java.net.URI
org.apache.http.HttpHost)
@dalvik.annotation.Throws (value =Ljava/net/URISyntaxException; )
public static java.net.URI rewriteURI(
java.net.URI
org.apache.http.HttpHost
boolean)

________________CLASS________________


public class org.apache.http.client.utils.URLEncodedUtils extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String CONTENT_TYPE

private static final java.lang.String NAME_VALUE_SEPARATOR

private static final java.lang.String PARAMETER_SEPARATOR
----------------METHODS----------------

public void <init>()

private static java.lang.String decode(
java.lang.String
java.lang.String)

private static java.lang.String encode(
java.lang.String
java.lang.String)
@dalvik.annotation.Signature (value =(Ljava/util/List<+Lorg/apache/http/NameValuePair;>;Ljava/lang/String;)Ljava/lang/String; )
public static java.lang.String format(
java.util.List
java.lang.String)

public static boolean isEncoded(
org.apache.http.HttpEntity)
@dalvik.annotation.Signature (value =(Ljava/net/URI;Ljava/lang/String;)Ljava/util/List<Lorg/apache/http/NameValuePair;>; )
public static java.util.List parse(
java.net.URI
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
@dalvik.annotation.Signature (value =(Lorg/apache/http/HttpEntity;)Ljava/util/List<Lorg/apache/http/NameValuePair;>; )
public static java.util.List parse(
org.apache.http.HttpEntity)
@dalvik.annotation.Signature (value =(Ljava/util/List<Lorg/apache/http/NameValuePair;>;Ljava/util/Scanner;Ljava/lang/String;)V )
public static void parse(
java.util.List
java.util.Scanner
java.lang.String)

________________CLASS________________


public abstract interface class org.apache.http.conn.EofSensorWatcher extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract boolean eofDetected(
java.io.InputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract boolean streamAbort(
java.io.InputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract boolean streamClosed(
java.io.InputStream)

________________CLASS________________


public class org.apache.http.conn.BasicEofSensorWatcher extends java.lang.Object implements org.apache.http.conn.EofSensorWatcher

----------------FIELDS----------------

protected boolean attemptReuse

protected org.apache.http.conn.ManagedClientConnection managedConn
----------------METHODS----------------

public void <init>(
org.apache.http.conn.ManagedClientConnection
boolean)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean eofDetected(
java.io.InputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean streamAbort(
java.io.InputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean streamClosed(
java.io.InputStream)

________________CLASS________________


public class org.apache.http.entity.HttpEntityWrapper extends java.lang.Object implements org.apache.http.HttpEntity

----------------FIELDS----------------

protected org.apache.http.HttpEntity wrappedEntity
----------------METHODS----------------

public void <init>(
org.apache.http.HttpEntity)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void consumeContent()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.io.InputStream getContent()

public org.apache.http.Header getContentEncoding()

public long getContentLength()

public org.apache.http.Header getContentType()

public boolean isChunked()

public boolean isRepeatable()

public boolean isStreaming()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeTo(
java.io.OutputStream)

________________CLASS________________


public abstract interface class org.apache.http.conn.ConnectionReleaseTrigger extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void abortConnection()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void releaseConnection()

________________CLASS________________


public class org.apache.http.conn.BasicManagedEntity extends org.apache.http.entity.HttpEntityWrapper implements org.apache.http.conn.ConnectionReleaseTrigger, org.apache.http.conn.EofSensorWatcher

----------------FIELDS----------------

protected final boolean attemptReuse

protected org.apache.http.conn.ManagedClientConnection managedConn
----------------METHODS----------------

public void <init>(
org.apache.http.HttpEntity
org.apache.http.conn.ManagedClientConnection
boolean)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void abortConnection()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void consumeContent()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean eofDetected(
java.io.InputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.io.InputStream getContent()

public boolean isRepeatable()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void releaseConnection()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void releaseManagedConnection()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean streamAbort(
java.io.InputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean streamClosed(
java.io.InputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeTo(
java.io.OutputStream)

________________CLASS________________


public abstract interface class org.apache.http.conn.ClientConnectionManager extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void closeExpiredConnections()

public abstract void closeIdleConnections(
long
java.util.concurrent.TimeUnit)

public abstract org.apache.http.conn.scheme.SchemeRegistry getSchemeRegistry()

public abstract void releaseConnection(
org.apache.http.conn.ManagedClientConnection
long
java.util.concurrent.TimeUnit)

public abstract org.apache.http.conn.ClientConnectionRequest requestConnection(
org.apache.http.conn.routing.HttpRoute
java.lang.Object)

public abstract void shutdown()

________________CLASS________________


public abstract interface class org.apache.http.conn.ClientConnectionManagerFactory extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract org.apache.http.conn.ClientConnectionManager newInstance(
org.apache.http.params.HttpParams
org.apache.http.conn.scheme.SchemeRegistry)

________________CLASS________________


public abstract interface class org.apache.http.conn.ClientConnectionOperator extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract org.apache.http.conn.OperatedClientConnection createConnection()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
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)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void updateSecureConnection(
org.apache.http.conn.OperatedClientConnection
org.apache.http.HttpHost
org.apache.http.protocol.HttpContext
org.apache.http.params.HttpParams)

________________CLASS________________


public abstract interface class org.apache.http.conn.ClientConnectionRequest extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void abortRequest()
@dalvik.annotation.Throws (value =Ljava/lang/InterruptedException;Lorg/apache/http/conn/ConnectionPoolTimeoutException; )
public abstract org.apache.http.conn.ManagedClientConnection getConnection(
long
java.util.concurrent.TimeUnit)

________________CLASS________________


public class org.apache.http.conn.ConnectTimeoutException extends java.io.InterruptedIOException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public abstract interface class org.apache.http.conn.ConnectionKeepAliveStrategy extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract long getKeepAliveDuration(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.conn.ConnectionPoolTimeoutException extends org.apache.http.conn.ConnectTimeoutException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________


public class org.apache.http.conn.EofSensorInputStream extends java.io.InputStream implements org.apache.http.conn.ConnectionReleaseTrigger

----------------FIELDS----------------

private org.apache.http.conn.EofSensorWatcher eofWatcher

private boolean selfClosed

protected java.io.InputStream wrappedStream
----------------METHODS----------------

public void <init>(
java.io.InputStream
org.apache.http.conn.EofSensorWatcher)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void abortConnection()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int available()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void checkAbort()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void checkClose()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void checkEOF(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected boolean isReadAllowed()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read(
byte[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void releaseConnection()

________________CLASS________________


public class org.apache.http.conn.HttpHostConnectException extends java.net.ConnectException

----------------FIELDS----------------

private static final long serialVersionUID

private final org.apache.http.HttpHost host
----------------METHODS----------------

public void <init>(
org.apache.http.HttpHost
java.net.ConnectException)

public org.apache.http.HttpHost getHost()

________________CLASS________________


public abstract interface class org.apache.http.conn.ManagedClientConnection extends java.lang.Object implements org.apache.http.HttpClientConnection, org.apache.http.HttpInetConnection, org.apache.http.conn.ConnectionReleaseTrigger

----------------FIELDS----------------
----------------METHODS----------------

public abstract org.apache.http.conn.routing.HttpRoute getRoute()

public abstract javax.net.ssl.SSLSession getSSLSession()

public abstract java.lang.Object getState()

public abstract boolean isMarkedReusable()

public abstract boolean isSecure()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void layerProtocol(
org.apache.http.protocol.HttpContext
org.apache.http.params.HttpParams)

public abstract void markReusable()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void open(
org.apache.http.conn.routing.HttpRoute
org.apache.http.protocol.HttpContext
org.apache.http.params.HttpParams)

public abstract void setIdleDuration(
long
java.util.concurrent.TimeUnit)

public abstract void setState(
java.lang.Object)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void tunnelProxy(
org.apache.http.HttpHost
boolean
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void tunnelTarget(
boolean
org.apache.http.params.HttpParams)

public abstract void unmarkReusable()

________________CLASS________________


public abstract interface class org.apache.http.conn.scheme.SocketFactory extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/net/UnknownHostException;Lorg/apache/http/conn/ConnectTimeoutException; )
public abstract java.net.Socket connectSocket(
java.net.Socket
java.lang.String
int
java.net.InetAddress
int
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract java.net.Socket createSocket()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public abstract boolean isSecure(
java.net.Socket)

________________CLASS________________


public final class org.apache.http.conn.MultihomePlainSocketFactory extends java.lang.Object implements org.apache.http.conn.scheme.SocketFactory

----------------FIELDS----------------

private static final org.apache.http.conn.MultihomePlainSocketFactory DEFAULT_FACTORY
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static org.apache.http.conn.MultihomePlainSocketFactory getSocketFactory()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.net.Socket connectSocket(
java.net.Socket
java.lang.String
int
java.net.InetAddress
int
org.apache.http.params.HttpParams)

public java.net.Socket createSocket()

public boolean equals(
java.lang.Object)

public int hashCode()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public final boolean isSecure(
java.net.Socket)

________________CLASS________________


public abstract interface class org.apache.http.conn.OperatedClientConnection extends java.lang.Object implements org.apache.http.HttpClientConnection, org.apache.http.HttpInetConnection

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.net.Socket getSocket()

public abstract org.apache.http.HttpHost getTargetHost()

public abstract boolean isSecure()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void openCompleted(
boolean
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void opening(
java.net.Socket
org.apache.http.HttpHost)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void update(
java.net.Socket
org.apache.http.HttpHost
boolean
org.apache.http.params.HttpParams)

________________CLASS________________


public class org.apache.http.conn.params.ConnConnectionParamBean extends org.apache.http.params.HttpAbstractParamBean

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
org.apache.http.params.HttpParams)

public void setMaxStatusLineGarbage(
int)

________________CLASS________________


public class org.apache.http.conn.params.ConnManagerParamBean extends org.apache.http.params.HttpAbstractParamBean

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
org.apache.http.params.HttpParams)

public void setConnectionsPerRoute(
org.apache.http.conn.params.ConnPerRouteBean)

public void setMaxTotalConnections(
int)

public void setTimeout(
long)

________________CLASS________________


public abstract interface class org.apache.http.conn.params.ConnPerRoute extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract int getMaxForRoute(
org.apache.http.conn.routing.HttpRoute)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lorg/apache/http/conn/params/ConnManagerParams; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class org.apache.http.conn.params.ConnManagerParams$1 extends java.lang.Object implements org.apache.http.conn.params.ConnPerRoute

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

public int getMaxForRoute(
org.apache.http.conn.routing.HttpRoute)

________________CLASS________________


public final class org.apache.http.conn.params.ConnManagerParams extends java.lang.Object implements org.apache.http.conn.params.ConnManagerPNames

----------------FIELDS----------------

private static final org.apache.http.conn.params.ConnPerRoute DEFAULT_CONN_PER_ROUTE

public static final int DEFAULT_MAX_TOTAL_CONNECTIONS
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static org.apache.http.conn.params.ConnPerRoute getMaxConnectionsPerRoute(
org.apache.http.params.HttpParams)

public static int getMaxTotalConnections(
org.apache.http.params.HttpParams)

public static long getTimeout(
org.apache.http.params.HttpParams)

public static void setMaxConnectionsPerRoute(
org.apache.http.params.HttpParams
org.apache.http.conn.params.ConnPerRoute)

public static void setMaxTotalConnections(
org.apache.http.params.HttpParams
int)

public static void setTimeout(
org.apache.http.params.HttpParams
long)

________________CLASS________________


public final class org.apache.http.conn.params.ConnPerRouteBean extends java.lang.Object implements org.apache.http.conn.params.ConnPerRoute

----------------FIELDS----------------

public static final int DEFAULT_MAX_CONNECTIONS_PER_ROUTE

private int defaultMax
@dalvik.annotation.Signature (value =Ljava/util/Map<Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Integer;>; )
private final java.util.Map maxPerHostMap
----------------METHODS----------------

public void <init>()

public void <init>(
int)

public int getDefaultMax()

public int getMaxForRoute(
org.apache.http.conn.routing.HttpRoute)

public void setDefaultMaxPerRoute(
int)

public void setMaxForRoute(
org.apache.http.conn.routing.HttpRoute
int)
@dalvik.annotation.Signature (value =(Ljava/util/Map<Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Integer;>;)V )
public void setMaxForRoutes(
java.util.Map)

________________CLASS________________


public class org.apache.http.conn.params.ConnRouteParamBean extends org.apache.http.params.HttpAbstractParamBean

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
org.apache.http.params.HttpParams)

public void setDefaultProxy(
org.apache.http.HttpHost)

public void setForcedRoute(
org.apache.http.conn.routing.HttpRoute)

public void setLocalAddress(
java.net.InetAddress)

________________CLASS________________


public class org.apache.http.conn.params.ConnRouteParams extends java.lang.Object implements org.apache.http.conn.params.ConnRoutePNames

----------------FIELDS----------------

public static final org.apache.http.HttpHost NO_HOST

public static final org.apache.http.conn.routing.HttpRoute NO_ROUTE
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static org.apache.http.HttpHost getDefaultProxy(
org.apache.http.params.HttpParams)

public static org.apache.http.conn.routing.HttpRoute getForcedRoute(
org.apache.http.params.HttpParams)

public static java.net.InetAddress getLocalAddress(
org.apache.http.params.HttpParams)

public static void setDefaultProxy(
org.apache.http.params.HttpParams
org.apache.http.HttpHost)

public static void setForcedRoute(
org.apache.http.params.HttpParams
org.apache.http.conn.routing.HttpRoute)

public static void setLocalAddress(
org.apache.http.params.HttpParams
java.net.InetAddress)

________________CLASS________________


public abstract interface class org.apache.http.conn.routing.HttpRouteDirector extends java.lang.Object

----------------FIELDS----------------

public static final int COMPLETE

public static final int CONNECT_PROXY

public static final int CONNECT_TARGET

public static final int LAYER_PROTOCOL

public static final int TUNNEL_PROXY

public static final int TUNNEL_TARGET

public static final int UNREACHABLE
----------------METHODS----------------

public abstract int nextStep(
org.apache.http.conn.routing.RouteInfo
org.apache.http.conn.routing.RouteInfo)

________________CLASS________________


public class org.apache.http.conn.routing.BasicRouteDirector extends java.lang.Object implements org.apache.http.conn.routing.HttpRouteDirector

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

protected int directStep(
org.apache.http.conn.routing.RouteInfo
org.apache.http.conn.routing.RouteInfo)

protected int firstStep(
org.apache.http.conn.routing.RouteInfo)

public int nextStep(
org.apache.http.conn.routing.RouteInfo
org.apache.http.conn.routing.RouteInfo)

protected int proxiedStep(
org.apache.http.conn.routing.RouteInfo
org.apache.http.conn.routing.RouteInfo)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lorg/apache/http/conn/routing/RouteInfo$LayerType;Lorg/apache/http/conn/routing/RouteInfo$TunnelType; )
public abstract interface class org.apache.http.conn.routing.RouteInfo extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract int getHopCount()

public abstract org.apache.http.HttpHost getHopTarget(
int)

public abstract org.apache.http.conn.routing.RouteInfo$LayerType getLayerType()

public abstract java.net.InetAddress getLocalAddress()

public abstract org.apache.http.HttpHost getProxyHost()

public abstract org.apache.http.HttpHost getTargetHost()

public abstract org.apache.http.conn.routing.RouteInfo$TunnelType getTunnelType()

public abstract boolean isLayered()

public abstract boolean isSecure()

public abstract boolean isTunnelled()

________________CLASS________________


public final class org.apache.http.conn.routing.HttpRoute extends java.lang.Object implements org.apache.http.conn.routing.RouteInfo, java.lang.Cloneable

----------------FIELDS----------------

private final org.apache.http.conn.routing.RouteInfo$LayerType layered

private final java.net.InetAddress localAddress

private final org.apache.http.HttpHost[] proxyChain

private final boolean secure

private final org.apache.http.HttpHost targetHost

private final org.apache.http.conn.routing.RouteInfo$TunnelType tunnelled
----------------METHODS----------------

private void <init>(
java.net.InetAddress
org.apache.http.HttpHost
org.apache.http.HttpHost[]
boolean
org.apache.http.conn.routing.RouteInfo$TunnelType
org.apache.http.conn.routing.RouteInfo$LayerType)

public void <init>(
org.apache.http.HttpHost)

public void <init>(
org.apache.http.HttpHost
java.net.InetAddress
org.apache.http.HttpHost
boolean)

public void <init>(
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)

public void <init>(
org.apache.http.HttpHost
java.net.InetAddress
boolean)

public void <init>(
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)

private static org.apache.http.HttpHost[] toChain(
org.apache.http.HttpHost)

private static org.apache.http.HttpHost[] toChain(
org.apache.http.HttpHost[])
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public final boolean equals(
java.lang.Object)

public final int getHopCount()

public final org.apache.http.HttpHost getHopTarget(
int)

public final org.apache.http.conn.routing.RouteInfo$LayerType getLayerType()

public final java.net.InetAddress getLocalAddress()

public final org.apache.http.HttpHost getProxyHost()

public final org.apache.http.HttpHost getTargetHost()

public final org.apache.http.conn.routing.RouteInfo$TunnelType getTunnelType()

public final int hashCode()

public final boolean isLayered()

public final boolean isSecure()

public final boolean isTunnelled()

public final java.lang.String toString()

________________CLASS________________


public abstract interface class org.apache.http.conn.routing.HttpRoutePlanner extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException; )
public abstract org.apache.http.conn.routing.HttpRoute determineRoute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16409 name =LayerType )
@dalvik.annotation.EnclosingClass (value =Lorg/apache/http/conn/routing/RouteInfo; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lorg/apache/http/conn/routing/RouteInfo$LayerType;>; )
public final class org.apache.http.conn.routing.RouteInfo$LayerType extends java.lang.Enum

----------------FIELDS----------------

private static final org.apache.http.conn.routing.RouteInfo$LayerType[] $VALUES

public static final org.apache.http.conn.routing.RouteInfo$LayerType LAYERED

public static final org.apache.http.conn.routing.RouteInfo$LayerType PLAIN
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static org.apache.http.conn.routing.RouteInfo$LayerType valueOf(
java.lang.String)

public static org.apache.http.conn.routing.RouteInfo$LayerType[] values()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =16409 name =TunnelType )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lorg/apache/http/conn/routing/RouteInfo$TunnelType;>; )
@dalvik.annotation.EnclosingClass (value =Lorg/apache/http/conn/routing/RouteInfo; )
public final class org.apache.http.conn.routing.RouteInfo$TunnelType extends java.lang.Enum

----------------FIELDS----------------

private static final org.apache.http.conn.routing.RouteInfo$TunnelType[] $VALUES

public static final org.apache.http.conn.routing.RouteInfo$TunnelType PLAIN

public static final org.apache.http.conn.routing.RouteInfo$TunnelType TUNNELLED
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static org.apache.http.conn.routing.RouteInfo$TunnelType valueOf(
java.lang.String)

public static org.apache.http.conn.routing.RouteInfo$TunnelType[] values()

________________CLASS________________


public final class org.apache.http.conn.routing.RouteTracker extends java.lang.Object implements org.apache.http.conn.routing.RouteInfo, java.lang.Cloneable

----------------FIELDS----------------

private boolean connected

private org.apache.http.conn.routing.RouteInfo$LayerType layered

private final java.net.InetAddress localAddress

private org.apache.http.HttpHost[] proxyChain

private boolean secure

private final org.apache.http.HttpHost targetHost

private org.apache.http.conn.routing.RouteInfo$TunnelType tunnelled
----------------METHODS----------------

public void <init>(
org.apache.http.HttpHost
java.net.InetAddress)

public void <init>(
org.apache.http.conn.routing.HttpRoute)
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public final void connectProxy(
org.apache.http.HttpHost
boolean)

public final void connectTarget(
boolean)

public final boolean equals(
java.lang.Object)

public final int getHopCount()

public final org.apache.http.HttpHost getHopTarget(
int)

public final org.apache.http.conn.routing.RouteInfo$LayerType getLayerType()

public final java.net.InetAddress getLocalAddress()

public final org.apache.http.HttpHost getProxyHost()

public final org.apache.http.HttpHost getTargetHost()

public final org.apache.http.conn.routing.RouteInfo$TunnelType getTunnelType()

public final int hashCode()

public final boolean isConnected()

public final boolean isLayered()

public final boolean isSecure()

public final boolean isTunnelled()

public final void layerProtocol(
boolean)

public final org.apache.http.conn.routing.HttpRoute toRoute()

public final java.lang.String toString()

public final void tunnelProxy(
org.apache.http.HttpHost
boolean)

public final void tunnelTarget(
boolean)

________________CLASS________________


public abstract interface class org.apache.http.conn.scheme.HostNameResolver extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract java.net.InetAddress resolve(
java.lang.String)

________________CLASS________________


public abstract interface class org.apache.http.conn.scheme.LayeredSocketFactory extends java.lang.Object implements org.apache.http.conn.scheme.SocketFactory

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/net/UnknownHostException; )
public abstract java.net.Socket createSocket(
java.net.Socket
java.lang.String
int
boolean)

________________CLASS________________


public final class org.apache.http.conn.scheme.PlainSocketFactory extends java.lang.Object implements org.apache.http.conn.scheme.SocketFactory

----------------FIELDS----------------

private static final org.apache.http.conn.scheme.PlainSocketFactory DEFAULT_FACTORY

private final org.apache.http.conn.scheme.HostNameResolver nameResolver
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
org.apache.http.conn.scheme.HostNameResolver)

public static org.apache.http.conn.scheme.PlainSocketFactory getSocketFactory()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.net.Socket connectSocket(
java.net.Socket
java.lang.String
int
java.net.InetAddress
int
org.apache.http.params.HttpParams)

public java.net.Socket createSocket()

public boolean equals(
java.lang.Object)

public int hashCode()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public final boolean isSecure(
java.net.Socket)

________________CLASS________________


public final class org.apache.http.conn.scheme.Scheme extends java.lang.Object

----------------FIELDS----------------

private final int defaultPort

private final boolean layered

private final java.lang.String name

private final org.apache.http.conn.scheme.SocketFactory socketFactory

private java.lang.String stringRep
----------------METHODS----------------

public void <init>(
java.lang.String
org.apache.http.conn.scheme.SocketFactory
int)

public final boolean equals(
java.lang.Object)

public final int getDefaultPort()

public final java.lang.String getName()

public final org.apache.http.conn.scheme.SocketFactory getSocketFactory()

public int hashCode()

public final boolean isLayered()

public final int resolvePort(
int)

public final java.lang.String toString()

________________CLASS________________


public final class org.apache.http.conn.scheme.SchemeRegistry extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Lorg/apache/http/conn/scheme/Scheme;>; )
private final java.util.Map registeredSchemes
----------------METHODS----------------

public void <init>()

public final org.apache.http.conn.scheme.Scheme get(
java.lang.String)

public final org.apache.http.conn.scheme.Scheme getScheme(
java.lang.String)

public final org.apache.http.conn.scheme.Scheme getScheme(
org.apache.http.HttpHost)
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public final java.util.List getSchemeNames()

public final org.apache.http.conn.scheme.Scheme register(
org.apache.http.conn.scheme.Scheme)
@dalvik.annotation.Signature (value =(Ljava/util/Map<Ljava/lang/String;Lorg/apache/http/conn/scheme/Scheme;>;)V )
public void setItems(
java.util.Map)

public final org.apache.http.conn.scheme.Scheme unregister(
java.lang.String)

________________CLASS________________


public abstract interface class org.apache.http.conn.ssl.X509HostnameVerifier extends java.lang.Object implements javax.net.ssl.HostnameVerifier

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljavax/net/ssl/SSLException; )
public abstract void verify(
java.lang.String
java.security.cert.X509Certificate)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void verify(
java.lang.String
javax.net.ssl.SSLSocket)
@dalvik.annotation.Throws (value =Ljavax/net/ssl/SSLException; )
public abstract void verify(
java.lang.String
java.lang.String[]
java.lang.String[])

public abstract boolean verify(
java.lang.String
javax.net.ssl.SSLSession)

________________CLASS________________


public abstract class org.apache.http.conn.ssl.AbstractVerifier extends java.lang.Object implements org.apache.http.conn.ssl.X509HostnameVerifier

----------------FIELDS----------------

private static final java.lang.String[] BAD_COUNTRY_2LDS
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static boolean acceptableCountryWildcard(
java.lang.String)

public static int countDots(
java.lang.String)

public static java.lang.String[] getCNs(
java.security.cert.X509Certificate)

public static java.lang.String[] getDNSSubjectAlts(
java.security.cert.X509Certificate)
@dalvik.annotation.Throws (value =Ljavax/net/ssl/SSLException; )
public final void verify(
java.lang.String
java.security.cert.X509Certificate)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public final void verify(
java.lang.String
javax.net.ssl.SSLSocket)
@dalvik.annotation.Throws (value =Ljavax/net/ssl/SSLException; )
public final void verify(
java.lang.String
java.lang.String[]
java.lang.String[]
boolean)

public final boolean verify(
java.lang.String
javax.net.ssl.SSLSession)

________________CLASS________________


public class org.apache.http.conn.ssl.AllowAllHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public final java.lang.String toString()

public final void verify(
java.lang.String
java.lang.String[]
java.lang.String[])

________________CLASS________________


public class org.apache.http.conn.ssl.BrowserCompatHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public final java.lang.String toString()
@dalvik.annotation.Throws (value =Ljavax/net/ssl/SSLException; )
public final void verify(
java.lang.String
java.lang.String[]
java.lang.String[])

________________CLASS________________


public class org.apache.http.conn.ssl.SSLSocketFactory extends java.lang.Object implements org.apache.http.conn.scheme.LayeredSocketFactory

----------------FIELDS----------------

public static final org.apache.http.conn.ssl.X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER

public static final org.apache.http.conn.ssl.X509HostnameVerifier BROWSER_COMPATIBLE_HOSTNAME_VERIFIER

private static final org.apache.http.conn.ssl.SSLSocketFactory DEFAULT_FACTORY

public static final java.lang.String SSL

public static final java.lang.String SSLV2

public static final org.apache.http.conn.ssl.X509HostnameVerifier STRICT_HOSTNAME_VERIFIER

public static final java.lang.String TLS

private org.apache.http.conn.ssl.X509HostnameVerifier hostnameVerifier

private final org.apache.http.conn.scheme.HostNameResolver nameResolver

private final javax.net.ssl.SSLSocketFactory socketfactory

private final javax.net.ssl.SSLContext sslcontext
----------------METHODS----------------

static void <clinit>()

private void <init>()
@dalvik.annotation.Throws (value =Ljava/security/NoSuchAlgorithmException;Ljava/security/KeyManagementException;Ljava/security/KeyStoreException;Ljava/security/UnrecoverableKeyException; )
public void <init>(
java.lang.String
java.security.KeyStore
java.lang.String
java.security.KeyStore
java.security.SecureRandom
org.apache.http.conn.scheme.HostNameResolver)
@dalvik.annotation.Throws (value =Ljava/security/NoSuchAlgorithmException;Ljava/security/KeyManagementException;Ljava/security/KeyStoreException;Ljava/security/UnrecoverableKeyException; )
public void <init>(
java.security.KeyStore)
@dalvik.annotation.Throws (value =Ljava/security/NoSuchAlgorithmException;Ljava/security/KeyManagementException;Ljava/security/KeyStoreException;Ljava/security/UnrecoverableKeyException; )
public void <init>(
java.security.KeyStore
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/security/NoSuchAlgorithmException;Ljava/security/KeyManagementException;Ljava/security/KeyStoreException;Ljava/security/UnrecoverableKeyException; )
public void <init>(
java.security.KeyStore
java.lang.String
java.security.KeyStore)
@dalvik.annotation.Throws (value =Ljava/security/KeyStoreException;Ljava/security/NoSuchAlgorithmException;Ljava/security/UnrecoverableKeyException; )
private static javax.net.ssl.KeyManager[] createKeyManagers(
java.security.KeyStore
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/security/KeyStoreException;Ljava/security/NoSuchAlgorithmException; )
private static javax.net.ssl.TrustManager[] createTrustManagers(
java.security.KeyStore)

public static org.apache.http.conn.ssl.SSLSocketFactory getSocketFactory()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.net.Socket connectSocket(
java.net.Socket
java.lang.String
int
java.net.InetAddress
int
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.net.Socket createSocket()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/net/UnknownHostException; )
public java.net.Socket createSocket(
java.net.Socket
java.lang.String
int
boolean)

public org.apache.http.conn.ssl.X509HostnameVerifier getHostnameVerifier()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalArgumentException; )
public boolean isSecure(
java.net.Socket)

public void setHostnameVerifier(
org.apache.http.conn.ssl.X509HostnameVerifier)

________________CLASS________________


public class org.apache.http.conn.ssl.StrictHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public final java.lang.String toString()
@dalvik.annotation.Throws (value =Ljavax/net/ssl/SSLException; )
public final void verify(
java.lang.String
java.lang.String[]
java.lang.String[])

________________CLASS________________


public class org.apache.http.conn.util.InetAddressUtils extends java.lang.Object

----------------FIELDS----------------

private static final java.util.regex.Pattern IPV4_PATTERN

private static final java.util.regex.Pattern IPV6_HEX_COMPRESSED_PATTERN

private static final java.util.regex.Pattern IPV6_STD_PATTERN
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static boolean isIPv4Address(
java.lang.String)

public static boolean isIPv6Address(
java.lang.String)

public static boolean isIPv6HexCompressedAddress(
java.lang.String)

public static boolean isIPv6StdAddress(
java.lang.String)

________________CLASS________________


public abstract interface class org.apache.http.cookie.Cookie extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract java.lang.String getComment()

public abstract java.lang.String getCommentURL()

public abstract java.lang.String getDomain()

public abstract java.util.Date getExpiryDate()

public abstract java.lang.String getName()

public abstract java.lang.String getPath()

public abstract int[] getPorts()

public abstract java.lang.String getValue()

public abstract int getVersion()

public abstract boolean isExpired(
java.util.Date)

public abstract boolean isPersistent()

public abstract boolean isSecure()

________________CLASS________________


public abstract interface class org.apache.http.cookie.ClientCookie extends java.lang.Object implements org.apache.http.cookie.Cookie

----------------FIELDS----------------

public static final java.lang.String COMMENTURL_ATTR

public static final java.lang.String COMMENT_ATTR

public static final java.lang.String DISCARD_ATTR

public static final java.lang.String DOMAIN_ATTR

public static final java.lang.String EXPIRES_ATTR

public static final java.lang.String MAX_AGE_ATTR

public static final java.lang.String PATH_ATTR

public static final java.lang.String PORT_ATTR

public static final java.lang.String SECURE_ATTR

public static final java.lang.String VERSION_ATTR
----------------METHODS----------------

public abstract boolean containsAttribute(
java.lang.String)

public abstract java.lang.String getAttribute(
java.lang.String)

________________CLASS________________


public abstract interface class org.apache.http.cookie.CookieAttributeHandler extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean match(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public abstract void parse(
org.apache.http.cookie.SetCookie
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public abstract void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Ljava/io/Serializable;Ljava/util/Comparator<Lorg/apache/http/cookie/Cookie;>; )
public class org.apache.http.cookie.CookieIdentityComparator extends java.lang.Object implements java.io.Serializable, java.util.Comparator

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public volatile int compare(
java.lang.Object
java.lang.Object)

public int compare(
org.apache.http.cookie.Cookie
org.apache.http.cookie.Cookie)

________________CLASS________________


public final class org.apache.http.cookie.CookieOrigin extends java.lang.Object

----------------FIELDS----------------

private final java.lang.String host

private final java.lang.String path

private final int port

private final boolean secure
----------------METHODS----------------

public void <init>(
java.lang.String
int
java.lang.String
boolean)

public java.lang.String getHost()

public java.lang.String getPath()

public int getPort()

public boolean isSecure()

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Ljava/io/Serializable;Ljava/util/Comparator<Lorg/apache/http/cookie/Cookie;>; )
public class org.apache.http.cookie.CookiePathComparator extends java.lang.Object implements java.io.Serializable, java.util.Comparator

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

private java.lang.String normalizePath(
org.apache.http.cookie.Cookie)

public volatile int compare(
java.lang.Object
java.lang.Object)

public int compare(
org.apache.http.cookie.Cookie
org.apache.http.cookie.Cookie)

________________CLASS________________


public abstract interface class org.apache.http.cookie.CookieSpec extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Ljava/util/List<Lorg/apache/http/cookie/Cookie;>;)Ljava/util/List<Lorg/apache/http/Header;>; )
public abstract java.util.List formatCookies(
java.util.List)

public abstract int getVersion()

public abstract org.apache.http.Header getVersionHeader()

public abstract boolean match(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Signature (value =(Lorg/apache/http/Header;Lorg/apache/http/cookie/CookieOrigin;)Ljava/util/List<Lorg/apache/http/cookie/Cookie;>; )
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public abstract java.util.List parse(
org.apache.http.Header
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public abstract void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public abstract interface class org.apache.http.cookie.CookieSpecFactory extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract org.apache.http.cookie.CookieSpec newInstance(
org.apache.http.params.HttpParams)

________________CLASS________________


public final class org.apache.http.cookie.CookieSpecRegistry extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Lorg/apache/http/cookie/CookieSpecFactory;>; )
private final java.util.Map registeredSpecs
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public org.apache.http.cookie.CookieSpec getCookieSpec(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public org.apache.http.cookie.CookieSpec getCookieSpec(
java.lang.String
org.apache.http.params.HttpParams)
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
public java.util.List getSpecNames()

public void register(
java.lang.String
org.apache.http.cookie.CookieSpecFactory)
@dalvik.annotation.Signature (value =(Ljava/util/Map<Ljava/lang/String;Lorg/apache/http/cookie/CookieSpecFactory;>;)V )
public void setItems(
java.util.Map)

public void unregister(
java.lang.String)

________________CLASS________________


public class org.apache.http.cookie.MalformedCookieException extends org.apache.http.ProtocolException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

________________CLASS________________


public abstract interface class org.apache.http.cookie.SM extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String COOKIE

public static final java.lang.String COOKIE2

public static final java.lang.String SET_COOKIE

public static final java.lang.String SET_COOKIE2
----------------METHODS----------------

________________CLASS________________


public abstract interface class org.apache.http.cookie.SetCookie extends java.lang.Object implements org.apache.http.cookie.Cookie

----------------FIELDS----------------
----------------METHODS----------------

public abstract void setComment(
java.lang.String)

public abstract void setDomain(
java.lang.String)

public abstract void setExpiryDate(
java.util.Date)

public abstract void setPath(
java.lang.String)

public abstract void setSecure(
boolean)

public abstract void setValue(
java.lang.String)

public abstract void setVersion(
int)

________________CLASS________________


public abstract interface class org.apache.http.cookie.SetCookie2 extends java.lang.Object implements org.apache.http.cookie.SetCookie

----------------FIELDS----------------
----------------METHODS----------------

public abstract void setCommentURL(
java.lang.String)

public abstract void setDiscard(
boolean)

public abstract void setPorts(
int[])

________________CLASS________________


public class org.apache.http.cookie.params.CookieSpecParamBean extends org.apache.http.params.HttpAbstractParamBean

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
org.apache.http.params.HttpParams)
@dalvik.annotation.Signature (value =(Ljava/util/Collection<Ljava/lang/String;>;)V )
public void setDatePatterns(
java.util.Collection)

public void setSingleHeader(
boolean)

________________CLASS________________


public class org.apache.http.entity.BasicHttpEntity extends org.apache.http.entity.AbstractHttpEntity

----------------FIELDS----------------

private java.io.InputStream content

private boolean contentObtained

private long length
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void consumeContent()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public java.io.InputStream getContent()

public long getContentLength()

public boolean isRepeatable()

public boolean isStreaming()

public void setContent(
java.io.InputStream)

public void setContentLength(
long)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeTo(
java.io.OutputStream)

________________CLASS________________


public class org.apache.http.entity.BufferedHttpEntity extends org.apache.http.entity.HttpEntityWrapper

----------------FIELDS----------------

private final byte[] buffer
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void <init>(
org.apache.http.HttpEntity)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.io.InputStream getContent()

public long getContentLength()

public boolean isChunked()

public boolean isRepeatable()

public boolean isStreaming()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeTo(
java.io.OutputStream)

________________CLASS________________


public class org.apache.http.entity.ByteArrayEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable

----------------FIELDS----------------

protected final byte[] content
----------------METHODS----------------

public void <init>(
byte[])
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public java.io.InputStream getContent()

public long getContentLength()

public boolean isRepeatable()

public boolean isStreaming()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeTo(
java.io.OutputStream)

________________CLASS________________


public abstract interface class org.apache.http.entity.ContentLengthStrategy extends java.lang.Object

----------------FIELDS----------------

public static final int CHUNKED

public static final int IDENTITY
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException; )
public abstract long determineLength(
org.apache.http.HttpMessage)

________________CLASS________________


public abstract interface class org.apache.http.entity.ContentProducer extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void writeTo(
java.io.OutputStream)

________________CLASS________________


public class org.apache.http.entity.EntityTemplate extends org.apache.http.entity.AbstractHttpEntity

----------------FIELDS----------------

private final org.apache.http.entity.ContentProducer contentproducer
----------------METHODS----------------

public void <init>(
org.apache.http.entity.ContentProducer)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void consumeContent()

public java.io.InputStream getContent()

public long getContentLength()

public boolean isRepeatable()

public boolean isStreaming()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeTo(
java.io.OutputStream)

________________CLASS________________


public class org.apache.http.entity.FileEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable

----------------FIELDS----------------

protected final java.io.File file
----------------METHODS----------------

public void <init>(
java.io.File
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.io.InputStream getContent()

public long getContentLength()

public boolean isRepeatable()

public boolean isStreaming()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeTo(
java.io.OutputStream)

________________CLASS________________


public class org.apache.http.entity.InputStreamEntity extends org.apache.http.entity.AbstractHttpEntity

----------------FIELDS----------------

private static final int BUFFER_SIZE

private boolean consumed

private final java.io.InputStream content

private final long length
----------------METHODS----------------

public void <init>(
java.io.InputStream
long)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void consumeContent()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.io.InputStream getContent()

public long getContentLength()

public boolean isRepeatable()

public boolean isStreaming()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeTo(
java.io.OutputStream)

________________CLASS________________


public class org.apache.http.entity.SerializableEntity extends org.apache.http.entity.AbstractHttpEntity

----------------FIELDS----------------

private java.io.Serializable objRef

private byte[] objSer
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void <init>(
java.io.Serializable
boolean)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private void createBytes(
java.io.Serializable)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Ljava/lang/IllegalStateException; )
public java.io.InputStream getContent()

public long getContentLength()

public boolean isRepeatable()

public boolean isStreaming()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeTo(
java.io.OutputStream)

________________CLASS________________


public abstract class org.apache.http.impl.AbstractHttpClientConnection extends java.lang.Object implements org.apache.http.HttpClientConnection

----------------FIELDS----------------

private final org.apache.http.impl.entity.EntityDeserializer entitydeserializer

private final org.apache.http.impl.entity.EntitySerializer entityserializer

private org.apache.http.io.SessionInputBuffer inbuffer

private org.apache.http.impl.HttpConnectionMetricsImpl metrics

private org.apache.http.io.SessionOutputBuffer outbuffer

private org.apache.http.io.HttpMessageWriter requestWriter

private org.apache.http.io.HttpMessageParser responseParser
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
protected abstract void assertOpen()

protected org.apache.http.impl.entity.EntityDeserializer createEntityDeserializer()

protected org.apache.http.impl.entity.EntitySerializer createEntitySerializer()

protected org.apache.http.HttpResponseFactory createHttpResponseFactory()

protected org.apache.http.io.HttpMessageWriter createRequestWriter(
org.apache.http.io.SessionOutputBuffer
org.apache.http.params.HttpParams)

protected org.apache.http.io.HttpMessageParser createResponseParser(
org.apache.http.io.SessionInputBuffer
org.apache.http.HttpResponseFactory
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void doFlush()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void flush()

public org.apache.http.HttpConnectionMetrics getMetrics()

protected void init(
org.apache.http.io.SessionInputBuffer
org.apache.http.io.SessionOutputBuffer
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean isResponseAvailable(
int)

public boolean isStale()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void receiveResponseEntity(
org.apache.http.HttpResponse)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public org.apache.http.HttpResponse receiveResponseHeader()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void sendRequestEntity(
org.apache.http.HttpEntityEnclosingRequest)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void sendRequestHeader(
org.apache.http.HttpRequest)

________________CLASS________________


public abstract class org.apache.http.impl.AbstractHttpServerConnection extends java.lang.Object implements org.apache.http.HttpServerConnection

----------------FIELDS----------------

private final org.apache.http.impl.entity.EntityDeserializer entitydeserializer

private final org.apache.http.impl.entity.EntitySerializer entityserializer

private org.apache.http.io.SessionInputBuffer inbuffer

private org.apache.http.impl.HttpConnectionMetricsImpl metrics

private org.apache.http.io.SessionOutputBuffer outbuffer

private org.apache.http.io.HttpMessageParser requestParser

private org.apache.http.io.HttpMessageWriter responseWriter
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
protected abstract void assertOpen()

protected org.apache.http.impl.entity.EntityDeserializer createEntityDeserializer()

protected org.apache.http.impl.entity.EntitySerializer createEntitySerializer()

protected org.apache.http.HttpRequestFactory createHttpRequestFactory()

protected org.apache.http.io.HttpMessageParser createRequestParser(
org.apache.http.io.SessionInputBuffer
org.apache.http.HttpRequestFactory
org.apache.http.params.HttpParams)

protected org.apache.http.io.HttpMessageWriter createResponseWriter(
org.apache.http.io.SessionOutputBuffer
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void doFlush()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void flush()

public org.apache.http.HttpConnectionMetrics getMetrics()

protected void init(
org.apache.http.io.SessionInputBuffer
org.apache.http.io.SessionOutputBuffer
org.apache.http.params.HttpParams)

public boolean isStale()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void receiveRequestEntity(
org.apache.http.HttpEntityEnclosingRequest)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public org.apache.http.HttpRequest receiveRequestHeader()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void sendResponseEntity(
org.apache.http.HttpResponse)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void sendResponseHeader(
org.apache.http.HttpResponse)

________________CLASS________________


public class org.apache.http.impl.DefaultConnectionReuseStrategy extends java.lang.Object implements org.apache.http.ConnectionReuseStrategy

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

protected org.apache.http.TokenIterator createTokenIterator(
org.apache.http.HeaderIterator)

public boolean keepAlive(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.impl.SocketHttpClientConnection extends org.apache.http.impl.AbstractHttpClientConnection implements org.apache.http.HttpInetConnection

----------------FIELDS----------------

private volatile boolean open

private java.net.Socket socket
----------------METHODS----------------

public void <init>()

protected void assertNotOpen()

protected void assertOpen()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void bind(
java.net.Socket
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected org.apache.http.io.SessionInputBuffer createSessionInputBuffer(
java.net.Socket
int
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected org.apache.http.io.SessionOutputBuffer createSessionOutputBuffer(
java.net.Socket
int
org.apache.http.params.HttpParams)

public java.net.InetAddress getLocalAddress()

public int getLocalPort()

public java.net.InetAddress getRemoteAddress()

public int getRemotePort()

protected java.net.Socket getSocket()

public int getSocketTimeout()

public boolean isOpen()

public void setSocketTimeout(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void shutdown()

________________CLASS________________


public class org.apache.http.impl.DefaultHttpClientConnection extends org.apache.http.impl.SocketHttpClientConnection

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void bind(
java.net.Socket
org.apache.http.params.HttpParams)

public java.lang.String toString()

________________CLASS________________


public class org.apache.http.impl.DefaultHttpRequestFactory extends java.lang.Object implements org.apache.http.HttpRequestFactory

----------------FIELDS----------------

private static final java.lang.String[] RFC2616_COMMON_METHODS

private static final java.lang.String[] RFC2616_ENTITY_ENC_METHODS

private static final java.lang.String[] RFC2616_SPECIAL_METHODS
----------------METHODS----------------

static void <clinit>()

public void <init>()

private static boolean isOneOf(
java.lang.String[]
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/MethodNotSupportedException; )
public org.apache.http.HttpRequest newHttpRequest(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/MethodNotSupportedException; )
public org.apache.http.HttpRequest newHttpRequest(
org.apache.http.RequestLine)

________________CLASS________________


public class org.apache.http.impl.DefaultHttpResponseFactory extends java.lang.Object implements org.apache.http.HttpResponseFactory

----------------FIELDS----------------

protected final org.apache.http.ReasonPhraseCatalog reasonCatalog
----------------METHODS----------------

public void <init>()

public void <init>(
org.apache.http.ReasonPhraseCatalog)

protected java.util.Locale determineLocale(
org.apache.http.protocol.HttpContext)

public org.apache.http.HttpResponse newHttpResponse(
org.apache.http.ProtocolVersion
int
org.apache.http.protocol.HttpContext)

public org.apache.http.HttpResponse newHttpResponse(
org.apache.http.StatusLine
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.impl.SocketHttpServerConnection extends org.apache.http.impl.AbstractHttpServerConnection implements org.apache.http.HttpInetConnection

----------------FIELDS----------------

private volatile boolean open

private java.net.Socket socket
----------------METHODS----------------

public void <init>()

protected void assertNotOpen()

protected void assertOpen()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void bind(
java.net.Socket
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected org.apache.http.io.SessionInputBuffer createHttpDataReceiver(
java.net.Socket
int
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected org.apache.http.io.SessionOutputBuffer createHttpDataTransmitter(
java.net.Socket
int
org.apache.http.params.HttpParams)

public java.net.InetAddress getLocalAddress()

public int getLocalPort()

public java.net.InetAddress getRemoteAddress()

public int getRemotePort()

protected java.net.Socket getSocket()

public int getSocketTimeout()

public boolean isOpen()

public void setSocketTimeout(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void shutdown()

________________CLASS________________


public class org.apache.http.impl.DefaultHttpServerConnection extends org.apache.http.impl.SocketHttpServerConnection

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void bind(
java.net.Socket
org.apache.http.params.HttpParams)

public java.lang.String toString()

________________CLASS________________


public class org.apache.http.impl.EnglishReasonPhraseCatalog extends java.lang.Object implements org.apache.http.ReasonPhraseCatalog

----------------FIELDS----------------

public static final org.apache.http.impl.EnglishReasonPhraseCatalog INSTANCE

private static final java.lang.String[][] REASON_PHRASES
----------------METHODS----------------

static void <clinit>()

protected void <init>()

private static void setReason(
int
java.lang.String)

public java.lang.String getReason(
int
java.util.Locale)

________________CLASS________________


public class org.apache.http.impl.HttpConnectionMetricsImpl extends java.lang.Object implements org.apache.http.HttpConnectionMetrics

----------------FIELDS----------------

public static final java.lang.String RECEIVED_BYTES_COUNT

public static final java.lang.String REQUEST_COUNT

public static final java.lang.String RESPONSE_COUNT

public static final java.lang.String SENT_BYTES_COUNT

private final org.apache.http.io.HttpTransportMetrics inTransportMetric

private java.util.HashMap metricsCache

private final org.apache.http.io.HttpTransportMetrics outTransportMetric

private long requestCount

private long responseCount
----------------METHODS----------------

public void <init>(
org.apache.http.io.HttpTransportMetrics
org.apache.http.io.HttpTransportMetrics)

public java.lang.Object getMetric(
java.lang.String)

public long getReceivedBytesCount()

public long getRequestCount()

public long getResponseCount()

public long getSentBytesCount()

public void incrementRequestCount()

public void incrementResponseCount()

public void reset()

public void setMetric(
java.lang.String
java.lang.Object)

________________CLASS________________


public class org.apache.http.impl.NoConnectionReuseStrategy extends java.lang.Object implements org.apache.http.ConnectionReuseStrategy

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public boolean keepAlive(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public abstract class org.apache.http.impl.auth.AuthSchemeBase extends java.lang.Object implements org.apache.http.auth.AuthScheme

----------------FIELDS----------------

private boolean proxy
----------------METHODS----------------

public void <init>()

public boolean isProxy()
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/MalformedChallengeException; )
protected abstract void parseChallenge(
org.apache.http.util.CharArrayBuffer
int
int)
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/MalformedChallengeException; )
public void processChallenge(
org.apache.http.Header)

________________CLASS________________


public abstract class org.apache.http.impl.auth.RFC2617Scheme extends org.apache.http.impl.auth.AuthSchemeBase

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>; )
private java.util.Map params
----------------METHODS----------------

public void <init>()

public java.lang.String getParameter(
java.lang.String)
@dalvik.annotation.Signature (value =()Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>; )
protected java.util.Map getParameters()

public java.lang.String getRealm()
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/MalformedChallengeException; )
protected void parseChallenge(
org.apache.http.util.CharArrayBuffer
int
int)

________________CLASS________________


public class org.apache.http.impl.auth.BasicScheme extends org.apache.http.impl.auth.RFC2617Scheme

----------------FIELDS----------------

private boolean complete
----------------METHODS----------------

public void <init>()

public static org.apache.http.Header authenticate(
org.apache.http.auth.Credentials
java.lang.String
boolean)
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/AuthenticationException; )
public org.apache.http.Header authenticate(
org.apache.http.auth.Credentials
org.apache.http.HttpRequest)

public java.lang.String getSchemeName()

public boolean isComplete()

public boolean isConnectionBased()
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/MalformedChallengeException; )
public void processChallenge(
org.apache.http.Header)

________________CLASS________________


public class org.apache.http.impl.auth.BasicSchemeFactory extends java.lang.Object implements org.apache.http.auth.AuthSchemeFactory

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public org.apache.http.auth.AuthScheme newInstance(
org.apache.http.params.HttpParams)

________________CLASS________________


public class org.apache.http.impl.auth.DigestScheme extends org.apache.http.impl.auth.RFC2617Scheme

----------------FIELDS----------------

private static final char[] HEXADECIMAL

private static final java.lang.String NC

private static final int QOP_AUTH

private static final int QOP_AUTH_INT

private static final int QOP_MISSING

private java.lang.String cnonce

private boolean complete

private int qopVariant
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static java.lang.String createCnonce()
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/AuthenticationException; )
private java.lang.String createDigest(
org.apache.http.auth.Credentials)
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/AuthenticationException; )
private org.apache.http.Header createDigestHeader(
org.apache.http.auth.Credentials
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/impl/auth/UnsupportedDigestAlgorithmException; )
private static java.security.MessageDigest createMessageDigest(
java.lang.String)

private static java.lang.String encode(
byte[])

private java.lang.String getCnonce()

private java.lang.String getQopVariantString()
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/AuthenticationException; )
public org.apache.http.Header authenticate(
org.apache.http.auth.Credentials
org.apache.http.HttpRequest)

public java.lang.String getSchemeName()

public boolean isComplete()

public boolean isConnectionBased()

public void overrideParamter(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/MalformedChallengeException; )
public void processChallenge(
org.apache.http.Header)

________________CLASS________________


public class org.apache.http.impl.auth.DigestSchemeFactory extends java.lang.Object implements org.apache.http.auth.AuthSchemeFactory

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public org.apache.http.auth.AuthScheme newInstance(
org.apache.http.params.HttpParams)

________________CLASS________________


public abstract interface class org.apache.http.impl.auth.NTLMEngine extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/impl/auth/NTLMEngineException; )
public abstract java.lang.String generateType1Msg(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/impl/auth/NTLMEngineException; )
public abstract java.lang.String generateType3Msg(
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

________________CLASS________________


public class org.apache.http.impl.auth.NTLMEngineException extends org.apache.http.auth.AuthenticationException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lorg/apache/http/impl/auth/NTLMScheme; )
@dalvik.annotation.Signature (value =Ljava/lang/Enum<Lorg/apache/http/impl/auth/NTLMScheme$State;>; )
@dalvik.annotation.InnerClass (accessFlags =16408 name =State )
final class org.apache.http.impl.auth.NTLMScheme$State extends java.lang.Enum

----------------FIELDS----------------

private static final org.apache.http.impl.auth.NTLMScheme$State[] $VALUES

public static final org.apache.http.impl.auth.NTLMScheme$State CHALLENGE_RECEIVED

public static final org.apache.http.impl.auth.NTLMScheme$State FAILED

public static final org.apache.http.impl.auth.NTLMScheme$State MSG_TYPE1_GENERATED

public static final org.apache.http.impl.auth.NTLMScheme$State MSG_TYPE2_RECEVIED

public static final org.apache.http.impl.auth.NTLMScheme$State MSG_TYPE3_GENERATED

public static final org.apache.http.impl.auth.NTLMScheme$State UNINITIATED
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Signature (value =()V )
private void <init>(
java.lang.String
int)

public static org.apache.http.impl.auth.NTLMScheme$State valueOf(
java.lang.String)

public static org.apache.http.impl.auth.NTLMScheme$State[] values()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lorg/apache/http/impl/auth/NTLMScheme$State; )
public class org.apache.http.impl.auth.NTLMScheme extends org.apache.http.impl.auth.AuthSchemeBase

----------------FIELDS----------------

private java.lang.String challenge

private final org.apache.http.impl.auth.NTLMEngine engine

private org.apache.http.impl.auth.NTLMScheme$State state
----------------METHODS----------------

public void <init>(
org.apache.http.impl.auth.NTLMEngine)
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/AuthenticationException; )
public org.apache.http.Header authenticate(
org.apache.http.auth.Credentials
org.apache.http.HttpRequest)

public java.lang.String getParameter(
java.lang.String)

public java.lang.String getRealm()

public java.lang.String getSchemeName()

public boolean isComplete()

public boolean isConnectionBased()
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/MalformedChallengeException; )
protected void parseChallenge(
org.apache.http.util.CharArrayBuffer
int
int)

________________CLASS________________


public class org.apache.http.impl.auth.UnsupportedDigestAlgorithmException extends java.lang.RuntimeException

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

public void <init>(
java.lang.String
java.lang.Throwable)

________________CLASS________________


public abstract class org.apache.http.impl.client.AbstractAuthenticationHandler extends java.lang.Object implements org.apache.http.client.AuthenticationHandler

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/List<Ljava/lang/String;>; )
private static final java.util.List DEFAULT_SCHEME_PRIORITY

private final org.apache.commons.logging.Log log
----------------METHODS----------------

static void <clinit>()

public void <init>()
@dalvik.annotation.Signature (value =()Ljava/util/List<Ljava/lang/String;>; )
protected java.util.List getAuthPreferences()
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/MalformedChallengeException; )
@dalvik.annotation.Signature (value =([Lorg/apache/http/Header;)Ljava/util/Map<Ljava/lang/String;Lorg/apache/http/Header;>; )
protected java.util.Map parseChallenges(
org.apache.http.Header[])
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/AuthenticationException; )
@dalvik.annotation.Signature (value =(Ljava/util/Map<Ljava/lang/String;Lorg/apache/http/Header;>;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/auth/AuthScheme; )
public org.apache.http.auth.AuthScheme selectScheme(
java.util.Map
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.impl.client.BasicCookieStore extends java.lang.Object implements org.apache.http.client.CookieStore

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/Comparator<Lorg/apache/http/cookie/Cookie;>; )
private final java.util.Comparator cookieComparator
@dalvik.annotation.Signature (value =Ljava/util/ArrayList<Lorg/apache/http/cookie/Cookie;>; )
private final java.util.ArrayList cookies
----------------METHODS----------------

public void <init>()

public void addCookie(
org.apache.http.cookie.Cookie)

public void addCookies(
org.apache.http.cookie.Cookie[])

public void clear()

public boolean clearExpired(
java.util.Date)
@dalvik.annotation.Signature (value =()Ljava/util/List<Lorg/apache/http/cookie/Cookie;>; )
public java.util.List getCookies()

public java.lang.String toString()

________________CLASS________________


public class org.apache.http.impl.client.BasicCredentialsProvider extends java.lang.Object implements org.apache.http.client.CredentialsProvider

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/HashMap<Lorg/apache/http/auth/AuthScope;Lorg/apache/http/auth/Credentials;>; )
private final java.util.HashMap credMap
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Signature (value =(Ljava/util/HashMap<Lorg/apache/http/auth/AuthScope;Lorg/apache/http/auth/Credentials;>;Lorg/apache/http/auth/AuthScope;)Lorg/apache/http/auth/Credentials; )
private static org.apache.http.auth.Credentials matchCredentials(
java.util.HashMap
org.apache.http.auth.AuthScope)

public void clear()

public org.apache.http.auth.Credentials getCredentials(
org.apache.http.auth.AuthScope)

public void setCredentials(
org.apache.http.auth.AuthScope
org.apache.http.auth.Credentials)

public java.lang.String toString()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/Object;Lorg/apache/http/client/ResponseHandler<Ljava/lang/String;>; )
public class org.apache.http.impl.client.BasicResponseHandler extends java.lang.Object implements org.apache.http.client.ResponseHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/client/ClientProtocolException;Ljava/io/IOException; )
public volatile java.lang.Object handleResponse(
org.apache.http.HttpResponse)
@dalvik.annotation.Throws (value =Lorg/apache/http/client/HttpResponseException;Ljava/io/IOException; )
public java.lang.String handleResponse(
org.apache.http.HttpResponse)

________________CLASS________________


public abstract interface class org.apache.http.params.HttpParams extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract org.apache.http.params.HttpParams copy()

public abstract boolean getBooleanParameter(
java.lang.String
boolean)

public abstract double getDoubleParameter(
java.lang.String
double)

public abstract int getIntParameter(
java.lang.String
int)

public abstract long getLongParameter(
java.lang.String
long)

public abstract java.lang.Object getParameter(
java.lang.String)

public abstract boolean isParameterFalse(
java.lang.String)

public abstract boolean isParameterTrue(
java.lang.String)

public abstract boolean removeParameter(
java.lang.String)

public abstract org.apache.http.params.HttpParams setBooleanParameter(
java.lang.String
boolean)

public abstract org.apache.http.params.HttpParams setDoubleParameter(
java.lang.String
double)

public abstract org.apache.http.params.HttpParams setIntParameter(
java.lang.String
int)

public abstract org.apache.http.params.HttpParams setLongParameter(
java.lang.String
long)

public abstract org.apache.http.params.HttpParams setParameter(
java.lang.String
java.lang.Object)

________________CLASS________________


public abstract class org.apache.http.params.AbstractHttpParams extends java.lang.Object implements org.apache.http.params.HttpParams

----------------FIELDS----------------
----------------METHODS----------------

protected void <init>()

public boolean getBooleanParameter(
java.lang.String
boolean)

public double getDoubleParameter(
java.lang.String
double)

public int getIntParameter(
java.lang.String
int)

public long getLongParameter(
java.lang.String
long)

public boolean isParameterFalse(
java.lang.String)

public boolean isParameterTrue(
java.lang.String)

public org.apache.http.params.HttpParams setBooleanParameter(
java.lang.String
boolean)

public org.apache.http.params.HttpParams setDoubleParameter(
java.lang.String
double)

public org.apache.http.params.HttpParams setIntParameter(
java.lang.String
int)

public org.apache.http.params.HttpParams setLongParameter(
java.lang.String
long)

________________CLASS________________


public class org.apache.http.impl.client.ClientParamsStack extends org.apache.http.params.AbstractHttpParams

----------------FIELDS----------------

protected final org.apache.http.params.HttpParams applicationParams

protected final org.apache.http.params.HttpParams clientParams

private final org.apache.commons.logging.Log log

protected final org.apache.http.params.HttpParams overrideParams

protected final org.apache.http.params.HttpParams requestParams
----------------METHODS----------------

public void <init>(
org.apache.http.impl.client.ClientParamsStack)

public void <init>(
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)

public void <init>(
org.apache.http.params.HttpParams
org.apache.http.params.HttpParams
org.apache.http.params.HttpParams
org.apache.http.params.HttpParams)

public org.apache.http.params.HttpParams copy()

public final org.apache.http.params.HttpParams getApplicationParams()

public final org.apache.http.params.HttpParams getClientParams()

public final org.apache.http.params.HttpParams getOverrideParams()

public java.lang.Object getParameter(
java.lang.String)

public final org.apache.http.params.HttpParams getRequestParams()

public boolean removeParameter(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/UnsupportedOperationException; )
public org.apache.http.params.HttpParams setParameter(
java.lang.String
java.lang.Object)

________________CLASS________________


public class org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy extends java.lang.Object implements org.apache.http.conn.ConnectionKeepAliveStrategy

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public long getKeepAliveDuration(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.impl.client.DefaultHttpRequestRetryHandler extends java.lang.Object implements org.apache.http.client.HttpRequestRetryHandler

----------------FIELDS----------------

private final boolean requestSentRetryEnabled

private final int retryCount
----------------METHODS----------------

public void <init>()

public void <init>(
int
boolean)

public int getRetryCount()

public boolean isRequestSentRetryEnabled()

public boolean retryRequest(
java.io.IOException
int
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.impl.client.DefaultProxyAuthenticationHandler extends org.apache.http.impl.client.AbstractAuthenticationHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/MalformedChallengeException; )
@dalvik.annotation.Signature (value =(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Ljava/util/Map<Ljava/lang/String;Lorg/apache/http/Header;>; )
public java.util.Map getChallenges(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

public boolean isAuthenticationRequested(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.impl.client.DefaultRedirectHandler extends java.lang.Object implements org.apache.http.client.RedirectHandler

----------------FIELDS----------------

private static final java.lang.String REDIRECT_LOCATIONS

private final org.apache.commons.logging.Log log
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/ProtocolException; )
public java.net.URI getLocationURI(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

public boolean isRedirectRequested(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.impl.client.DefaultRequestDirector extends java.lang.Object implements org.apache.http.client.RequestDirector

----------------FIELDS----------------

protected final org.apache.http.conn.ClientConnectionManager connManager

protected final org.apache.http.protocol.HttpProcessor httpProcessor

protected final org.apache.http.conn.ConnectionKeepAliveStrategy keepAliveStrategy

private final org.apache.commons.logging.Log log

protected org.apache.http.conn.ManagedClientConnection managedConn

private int maxRedirects

protected final org.apache.http.params.HttpParams params

private final org.apache.http.client.AuthenticationHandler proxyAuthHandler

private final org.apache.http.auth.AuthState proxyAuthState

private int redirectCount

protected final org.apache.http.client.RedirectHandler redirectHandler

protected final org.apache.http.protocol.HttpRequestExecutor requestExec

protected final org.apache.http.client.HttpRequestRetryHandler retryHandler

protected final org.apache.http.ConnectionReuseStrategy reuseStrategy

protected final org.apache.http.conn.routing.HttpRoutePlanner routePlanner

private final org.apache.http.client.AuthenticationHandler targetAuthHandler

private final org.apache.http.auth.AuthState targetAuthState

private final org.apache.http.client.UserTokenHandler userTokenHandler
----------------METHODS----------------

public void <init>(
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)

private void abortConnection()
@dalvik.annotation.Signature (value =(Ljava/util/Map<Ljava/lang/String;Lorg/apache/http/Header;>;Lorg/apache/http/auth/AuthState;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V )
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/MalformedChallengeException;Lorg/apache/http/auth/AuthenticationException; )
private void processChallenges(
java.util.Map
org.apache.http.auth.AuthState
org.apache.http.client.AuthenticationHandler
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

private void updateAuthState(
org.apache.http.auth.AuthState
org.apache.http.HttpHost
org.apache.http.client.CredentialsProvider)
@dalvik.annotation.Throws (value =Lorg/apache/http/ProtocolException; )
private org.apache.http.impl.client.RequestWrapper wrapRequest(
org.apache.http.HttpRequest)

protected org.apache.http.HttpRequest createConnectRequest(
org.apache.http.conn.routing.HttpRoute
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
protected boolean createTunnelToProxy(
org.apache.http.conn.routing.HttpRoute
int
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
protected boolean createTunnelToTarget(
org.apache.http.conn.routing.HttpRoute
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException; )
protected org.apache.http.conn.routing.HttpRoute determineRoute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
protected void establishRoute(
org.apache.http.conn.routing.HttpRoute
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public org.apache.http.HttpResponse execute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
protected org.apache.http.impl.client.RoutedRequest handleResponse(
org.apache.http.impl.client.RoutedRequest
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

protected void releaseConnection()
@dalvik.annotation.Throws (value =Lorg/apache/http/ProtocolException; )
protected void rewriteRequestURI(
org.apache.http.impl.client.RequestWrapper
org.apache.http.conn.routing.HttpRoute)

________________CLASS________________


public class org.apache.http.impl.client.DefaultTargetAuthenticationHandler extends org.apache.http.impl.client.AbstractAuthenticationHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Signature (value =(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Ljava/util/Map<Ljava/lang/String;Lorg/apache/http/Header;>; )
@dalvik.annotation.Throws (value =Lorg/apache/http/auth/MalformedChallengeException; )
public java.util.Map getChallenges(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

public boolean isAuthenticationRequested(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.impl.client.DefaultUserTokenHandler extends java.lang.Object implements org.apache.http.client.UserTokenHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

private static java.security.Principal getAuthPrincipal(
org.apache.http.auth.AuthState)

public java.lang.Object getUserToken(
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.impl.client.RequestWrapper extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.client.methods.HttpUriRequest

----------------FIELDS----------------

private int execCount

private java.lang.String method

private final org.apache.http.HttpRequest original

private java.net.URI uri

private org.apache.http.ProtocolVersion version
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/ProtocolException; )
public void <init>(
org.apache.http.HttpRequest)
@dalvik.annotation.Throws (value =Ljava/lang/UnsupportedOperationException; )
public void abort()

public int getExecCount()

public java.lang.String getMethod()

public org.apache.http.HttpRequest getOriginal()

public org.apache.http.ProtocolVersion getProtocolVersion()

public org.apache.http.RequestLine getRequestLine()

public java.net.URI getURI()

public void incrementExecCount()

public boolean isAborted()

public boolean isRepeatable()

public void resetHeaders()

public void setMethod(
java.lang.String)

public void setProtocolVersion(
org.apache.http.ProtocolVersion)

public void setURI(
java.net.URI)

________________CLASS________________


public class org.apache.http.impl.client.EntityEnclosingRequestWrapper extends org.apache.http.impl.client.RequestWrapper implements org.apache.http.HttpEntityEnclosingRequest

----------------FIELDS----------------

private org.apache.http.HttpEntity entity
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/ProtocolException; )
public void <init>(
org.apache.http.HttpEntityEnclosingRequest)

public boolean expectContinue()

public org.apache.http.HttpEntity getEntity()

public boolean isRepeatable()

public void setEntity(
org.apache.http.HttpEntity)

________________CLASS________________


public class org.apache.http.impl.client.RedirectLocations extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/Set<Ljava/net/URI;>; )
private final java.util.Set uris
----------------METHODS----------------

public void <init>()

public void add(
java.net.URI)

public boolean contains(
java.net.URI)

public boolean remove(
java.net.URI)

________________CLASS________________


public class org.apache.http.impl.client.RoutedRequest extends java.lang.Object

----------------FIELDS----------------

protected final org.apache.http.impl.client.RequestWrapper request

protected final org.apache.http.conn.routing.HttpRoute route
----------------METHODS----------------

public void <init>(
org.apache.http.impl.client.RequestWrapper
org.apache.http.conn.routing.HttpRoute)

public final org.apache.http.impl.client.RequestWrapper getRequest()

public final org.apache.http.conn.routing.HttpRoute getRoute()

________________CLASS________________


public class org.apache.http.impl.client.TunnelRefusedException extends org.apache.http.HttpException

----------------FIELDS----------------

private static final long serialVersionUID

private final org.apache.http.HttpResponse response
----------------METHODS----------------

public void <init>(
java.lang.String
org.apache.http.HttpResponse)

public org.apache.http.HttpResponse getResponse()

________________CLASS________________


public abstract class org.apache.http.impl.conn.AbstractClientConnAdapter extends java.lang.Object implements org.apache.http.conn.ManagedClientConnection

----------------FIELDS----------------

private volatile boolean aborted

private volatile org.apache.http.conn.ClientConnectionManager connManager

private volatile long duration

private final java.lang.Thread executionThread

private volatile boolean markedReusable

private volatile org.apache.http.conn.OperatedClientConnection wrappedConnection
----------------METHODS----------------

protected void <init>(
org.apache.http.conn.ClientConnectionManager
org.apache.http.conn.OperatedClientConnection)

public void abortConnection()
@dalvik.annotation.Throws (value =Ljava/io/InterruptedIOException; )
protected final void assertNotAborted()

protected final void assertValid(
org.apache.http.conn.OperatedClientConnection)

protected void detach()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void flush()

public java.net.InetAddress getLocalAddress()

public int getLocalPort()

protected org.apache.http.conn.ClientConnectionManager getManager()

public org.apache.http.HttpConnectionMetrics getMetrics()

public java.net.InetAddress getRemoteAddress()

public int getRemotePort()

public javax.net.ssl.SSLSession getSSLSession()

public int getSocketTimeout()

protected org.apache.http.conn.OperatedClientConnection getWrappedConnection()

public boolean isMarkedReusable()

public boolean isOpen()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean isResponseAvailable(
int)

public boolean isSecure()

public boolean isStale()

public void markReusable()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void receiveResponseEntity(
org.apache.http.HttpResponse)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public org.apache.http.HttpResponse receiveResponseHeader()

public void releaseConnection()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void sendRequestEntity(
org.apache.http.HttpEntityEnclosingRequest)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void sendRequestHeader(
org.apache.http.HttpRequest)

public void setIdleDuration(
long
java.util.concurrent.TimeUnit)

public void setSocketTimeout(
int)

public void unmarkReusable()

________________CLASS________________


public abstract class org.apache.http.impl.conn.AbstractPoolEntry extends java.lang.Object

----------------FIELDS----------------

protected final org.apache.http.conn.ClientConnectionOperator connOperator

protected final org.apache.http.conn.OperatedClientConnection connection

protected volatile org.apache.http.conn.routing.HttpRoute route

protected volatile java.lang.Object state

protected volatile org.apache.http.conn.routing.RouteTracker tracker
----------------METHODS----------------

protected void <init>(
org.apache.http.conn.ClientConnectionOperator
org.apache.http.conn.routing.HttpRoute)

public java.lang.Object getState()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void layerProtocol(
org.apache.http.protocol.HttpContext
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void open(
org.apache.http.conn.routing.HttpRoute
org.apache.http.protocol.HttpContext
org.apache.http.params.HttpParams)

public void setState(
java.lang.Object)

protected void shutdownEntry()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void tunnelProxy(
org.apache.http.HttpHost
boolean
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void tunnelTarget(
boolean
org.apache.http.params.HttpParams)

________________CLASS________________


public abstract class org.apache.http.impl.conn.AbstractPooledConnAdapter extends org.apache.http.impl.conn.AbstractClientConnAdapter

----------------FIELDS----------------

protected volatile org.apache.http.impl.conn.AbstractPoolEntry poolEntry
----------------METHODS----------------

protected void <init>(
org.apache.http.conn.ClientConnectionManager
org.apache.http.impl.conn.AbstractPoolEntry)

protected final void assertAttached()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()

protected void detach()

public org.apache.http.conn.routing.HttpRoute getRoute()

public java.lang.Object getState()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void layerProtocol(
org.apache.http.protocol.HttpContext
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void open(
org.apache.http.conn.routing.HttpRoute
org.apache.http.protocol.HttpContext
org.apache.http.params.HttpParams)

public void setState(
java.lang.Object)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void shutdown()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void tunnelProxy(
org.apache.http.HttpHost
boolean
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void tunnelTarget(
boolean
org.apache.http.params.HttpParams)

________________CLASS________________


public class org.apache.http.impl.conn.DefaultClientConnection extends org.apache.http.impl.SocketHttpClientConnection implements org.apache.http.conn.OperatedClientConnection

----------------FIELDS----------------

private boolean connSecure

private final org.apache.commons.logging.Log headerLog

private final org.apache.commons.logging.Log log

private volatile boolean shutdown

private volatile java.net.Socket socket

private org.apache.http.HttpHost targetHost

private final org.apache.commons.logging.Log wireLog
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()

protected org.apache.http.io.HttpMessageParser createResponseParser(
org.apache.http.io.SessionInputBuffer
org.apache.http.HttpResponseFactory
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected org.apache.http.io.SessionInputBuffer createSessionInputBuffer(
java.net.Socket
int
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected org.apache.http.io.SessionOutputBuffer createSessionOutputBuffer(
java.net.Socket
int
org.apache.http.params.HttpParams)

public final java.net.Socket getSocket()

public final org.apache.http.HttpHost getTargetHost()

public final boolean isSecure()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void openCompleted(
boolean
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void opening(
java.net.Socket
org.apache.http.HttpHost)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public org.apache.http.HttpResponse receiveResponseHeader()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void sendRequestHeader(
org.apache.http.HttpRequest)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void shutdown()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void update(
java.net.Socket
org.apache.http.HttpHost
boolean
org.apache.http.params.HttpParams)

________________CLASS________________


public class org.apache.http.impl.conn.DefaultClientConnectionOperator extends java.lang.Object implements org.apache.http.conn.ClientConnectionOperator

----------------FIELDS----------------

protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry
----------------METHODS----------------

public void <init>(
org.apache.http.conn.scheme.SchemeRegistry)

public org.apache.http.conn.OperatedClientConnection createConnection()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
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)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void prepareSocket(
java.net.Socket
org.apache.http.protocol.HttpContext
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void updateSecureConnection(
org.apache.http.conn.OperatedClientConnection
org.apache.http.HttpHost
org.apache.http.protocol.HttpContext
org.apache.http.params.HttpParams)

________________CLASS________________


public class org.apache.http.impl.conn.DefaultHttpRoutePlanner extends java.lang.Object implements org.apache.http.conn.routing.HttpRoutePlanner

----------------FIELDS----------------

protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry
----------------METHODS----------------

public void <init>(
org.apache.http.conn.scheme.SchemeRegistry)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException; )
public org.apache.http.conn.routing.HttpRoute determineRoute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

________________CLASS________________


public abstract interface class org.apache.http.io.HttpMessageParser extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/HttpException; )
public abstract org.apache.http.HttpMessage parse()

________________CLASS________________


public abstract class org.apache.http.impl.io.AbstractMessageParser extends java.lang.Object implements org.apache.http.io.HttpMessageParser

----------------FIELDS----------------

protected final org.apache.http.message.LineParser lineParser

private final int maxHeaderCount

private final int maxLineLen

private final org.apache.http.io.SessionInputBuffer sessionBuffer
----------------METHODS----------------

public void <init>(
org.apache.http.io.SessionInputBuffer
org.apache.http.message.LineParser
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public static org.apache.http.Header[] parseHeaders(
org.apache.http.io.SessionInputBuffer
int
int
org.apache.http.message.LineParser)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/HttpException; )
public org.apache.http.HttpMessage parse()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/HttpException;Lorg/apache/http/ParseException; )
protected abstract org.apache.http.HttpMessage parseHead(
org.apache.http.io.SessionInputBuffer)

________________CLASS________________


public class org.apache.http.impl.conn.DefaultResponseParser extends org.apache.http.impl.io.AbstractMessageParser

----------------FIELDS----------------

private final org.apache.http.util.CharArrayBuffer lineBuf

private final int maxGarbageLines

private final org.apache.http.HttpResponseFactory responseFactory
----------------METHODS----------------

public void <init>(
org.apache.http.io.SessionInputBuffer
org.apache.http.message.LineParser
org.apache.http.HttpResponseFactory
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/HttpException; )
protected org.apache.http.HttpMessage parseHead(
org.apache.http.io.SessionInputBuffer)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lorg/apache/http/impl/conn/IdleConnectionHandler; )
@dalvik.annotation.InnerClass (accessFlags =10 name =TimeValues )
 class org.apache.http.impl.conn.IdleConnectionHandler$TimeValues extends java.lang.Object

----------------FIELDS----------------

private final long timeAdded

private final long timeExpires
----------------METHODS----------------

 void <init>(
long
long
java.util.concurrent.TimeUnit)

static long access$000(
org.apache.http.impl.conn.IdleConnectionHandler$TimeValues)

static long access$100(
org.apache.http.impl.conn.IdleConnectionHandler$TimeValues)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lorg/apache/http/impl/conn/IdleConnectionHandler$TimeValues; )
public class org.apache.http.impl.conn.IdleConnectionHandler extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/Map<Lorg/apache/http/HttpConnection;Lorg/apache/http/impl/conn/IdleConnectionHandler$TimeValues;>; )
private final java.util.Map connectionToTimes

private final org.apache.commons.logging.Log log
----------------METHODS----------------

public void <init>()

public void add(
org.apache.http.HttpConnection
long
java.util.concurrent.TimeUnit)

public void closeExpiredConnections()

public void closeIdleConnections(
long)

public boolean remove(
org.apache.http.HttpConnection)

public void removeAll()

________________CLASS________________


public abstract interface class org.apache.http.io.SessionInputBuffer extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract org.apache.http.io.HttpTransportMetrics getMetrics()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract boolean isDataAvailable(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract int read()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract int read(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract int read(
byte[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract int readLine(
org.apache.http.util.CharArrayBuffer)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract java.lang.String readLine()

________________CLASS________________


public class org.apache.http.impl.conn.LoggingSessionInputBuffer extends java.lang.Object implements org.apache.http.io.SessionInputBuffer

----------------FIELDS----------------

private final org.apache.http.io.SessionInputBuffer in

private final org.apache.http.impl.conn.Wire wire
----------------METHODS----------------

public void <init>(
org.apache.http.io.SessionInputBuffer
org.apache.http.impl.conn.Wire)

public org.apache.http.io.HttpTransportMetrics getMetrics()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean isDataAvailable(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read(
byte[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int readLine(
org.apache.http.util.CharArrayBuffer)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.lang.String readLine()

________________CLASS________________


public abstract interface class org.apache.http.io.SessionOutputBuffer extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void flush()

public abstract org.apache.http.io.HttpTransportMetrics getMetrics()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void write(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void write(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void write(
byte[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void writeLine(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public abstract void writeLine(
org.apache.http.util.CharArrayBuffer)

________________CLASS________________


public class org.apache.http.impl.conn.LoggingSessionOutputBuffer extends java.lang.Object implements org.apache.http.io.SessionOutputBuffer

----------------FIELDS----------------

private final org.apache.http.io.SessionOutputBuffer out

private final org.apache.http.impl.conn.Wire wire
----------------METHODS----------------

public void <init>(
org.apache.http.io.SessionOutputBuffer
org.apache.http.impl.conn.Wire)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void flush()

public org.apache.http.io.HttpTransportMetrics getMetrics()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
byte[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeLine(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeLine(
org.apache.http.util.CharArrayBuffer)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4104 name =null )
@dalvik.annotation.EnclosingClass (value =Lorg/apache/http/impl/conn/ProxySelectorRoutePlanner; )
 class org.apache.http.impl.conn.ProxySelectorRoutePlanner$1 extends java.lang.Object

----------------FIELDS----------------

static final int[] $SwitchMap$java$net$Proxy$Type
----------------METHODS----------------

static void <clinit>()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lorg/apache/http/impl/conn/ProxySelectorRoutePlanner$1; )
public class org.apache.http.impl.conn.ProxySelectorRoutePlanner extends java.lang.Object implements org.apache.http.conn.routing.HttpRoutePlanner

----------------FIELDS----------------

protected java.net.ProxySelector proxySelector

protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry
----------------METHODS----------------

public void <init>(
org.apache.http.conn.scheme.SchemeRegistry
java.net.ProxySelector)
@dalvik.annotation.Signature (value =(Ljava/util/List<Ljava/net/Proxy;>;Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Ljava/net/Proxy; )
protected java.net.Proxy chooseProxy(
java.util.List
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException; )
protected org.apache.http.HttpHost determineProxy(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException; )
public org.apache.http.conn.routing.HttpRoute determineRoute(
org.apache.http.HttpHost
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

protected java.lang.String getHost(
java.net.InetSocketAddress)

public java.net.ProxySelector getProxySelector()

public void setProxySelector(
java.net.ProxySelector)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class org.apache.http.impl.conn.SingleClientConnManager$1 extends java.lang.Object implements org.apache.http.conn.ClientConnectionRequest

----------------FIELDS----------------

final org.apache.http.impl.conn.SingleClientConnManager this$0

final org.apache.http.conn.routing.HttpRoute val$route

final java.lang.Object val$state
----------------METHODS----------------

 void <init>(
org.apache.http.impl.conn.SingleClientConnManager
org.apache.http.conn.routing.HttpRoute
java.lang.Object)

public void abortRequest()

public org.apache.http.conn.ManagedClientConnection getConnection(
long
java.util.concurrent.TimeUnit)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =4 name =ConnAdapter )
@dalvik.annotation.EnclosingClass (value =Lorg/apache/http/impl/conn/SingleClientConnManager; )
public class org.apache.http.impl.conn.SingleClientConnManager$ConnAdapter extends org.apache.http.impl.conn.AbstractPooledConnAdapter

----------------FIELDS----------------

final org.apache.http.impl.conn.SingleClientConnManager this$0
----------------METHODS----------------

protected void <init>(
org.apache.http.impl.conn.SingleClientConnManager
org.apache.http.impl.conn.SingleClientConnManager$PoolEntry
org.apache.http.conn.routing.HttpRoute)

________________CLASS________________

@dalvik.annotation.EnclosingClass (value =Lorg/apache/http/impl/conn/SingleClientConnManager; )
@dalvik.annotation.InnerClass (accessFlags =4 name =PoolEntry )
public class org.apache.http.impl.conn.SingleClientConnManager$PoolEntry extends org.apache.http.impl.conn.AbstractPoolEntry

----------------FIELDS----------------

final org.apache.http.impl.conn.SingleClientConnManager this$0
----------------METHODS----------------

protected void <init>(
org.apache.http.impl.conn.SingleClientConnManager)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void close()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void shutdown()

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lorg/apache/http/impl/conn/SingleClientConnManager$ConnAdapter;Lorg/apache/http/impl/conn/SingleClientConnManager$PoolEntry; )
public class org.apache.http.impl.conn.SingleClientConnManager extends java.lang.Object implements org.apache.http.conn.ClientConnectionManager

----------------FIELDS----------------

public static final java.lang.String MISUSE_MESSAGE

protected boolean alwaysShutDown

protected org.apache.http.conn.ClientConnectionOperator connOperator

protected long connectionExpiresTime

protected volatile boolean isShutDown

protected long lastReleaseTime

private final org.apache.commons.logging.Log log

protected org.apache.http.impl.conn.SingleClientConnManager$ConnAdapter managedConn

protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry

protected org.apache.http.impl.conn.SingleClientConnManager$PoolEntry uniquePoolEntry
----------------METHODS----------------

public void <init>(
org.apache.http.params.HttpParams
org.apache.http.conn.scheme.SchemeRegistry)
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
protected final void assertStillUp()

public void closeExpiredConnections()

public void closeIdleConnections(
long
java.util.concurrent.TimeUnit)

protected org.apache.http.conn.ClientConnectionOperator createConnectionOperator(
org.apache.http.conn.scheme.SchemeRegistry)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public org.apache.http.conn.ManagedClientConnection getConnection(
org.apache.http.conn.routing.HttpRoute
java.lang.Object)

public org.apache.http.conn.scheme.SchemeRegistry getSchemeRegistry()

public void releaseConnection(
org.apache.http.conn.ManagedClientConnection
long
java.util.concurrent.TimeUnit)

public final org.apache.http.conn.ClientConnectionRequest requestConnection(
org.apache.http.conn.routing.HttpRoute
java.lang.Object)

protected void revokeConnection()

public void shutdown()

________________CLASS________________


public class org.apache.http.impl.conn.Wire extends java.lang.Object

----------------FIELDS----------------

private final org.apache.commons.logging.Log log
----------------METHODS----------------

public void <init>(
org.apache.commons.logging.Log)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private void wire(
java.lang.String
java.io.InputStream)

public boolean enabled()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void input(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void input(
java.io.InputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void input(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void input(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void input(
byte[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void output(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void output(
java.io.InputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void output(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void output(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void output(
byte[]
int
int)

________________CLASS________________


public abstract interface class org.apache.http.impl.conn.tsccm.RefQueueHandler extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Ljava/lang/ref/Reference<*>;)V )
public abstract void handleReference(
java.lang.ref.Reference)

________________CLASS________________


public abstract class org.apache.http.impl.conn.tsccm.AbstractConnPool extends java.lang.Object implements org.apache.http.impl.conn.tsccm.RefQueueHandler

----------------FIELDS----------------

protected org.apache.http.impl.conn.IdleConnectionHandler idleConnHandler

protected volatile boolean isShutDown
@dalvik.annotation.Signature (value =Ljava/util/Set<Lorg/apache/http/impl/conn/tsccm/BasicPoolEntryRef;>; )
protected java.util.Set issuedConnections

private final org.apache.commons.logging.Log log

protected int numConnections

protected final java.util.concurrent.locks.Lock poolLock
@dalvik.annotation.Signature (value =Ljava/lang/ref/ReferenceQueue<Ljava/lang/Object;>; )
protected java.lang.ref.ReferenceQueue refQueue

private org.apache.http.impl.conn.tsccm.RefQueueWorker refWorker
----------------METHODS----------------

protected void <init>()

protected void closeConnection(
org.apache.http.conn.OperatedClientConnection)

public void closeExpiredConnections()

public void closeIdleConnections(
long
java.util.concurrent.TimeUnit)

public abstract void deleteClosedConnections()
@dalvik.annotation.Throws (value =Ljava/lang/IllegalStateException; )
public void enableConnectionGC()

public abstract void freeEntry(
org.apache.http.impl.conn.tsccm.BasicPoolEntry
boolean
long
java.util.concurrent.TimeUnit)
@dalvik.annotation.Throws (value =Lorg/apache/http/conn/ConnectionPoolTimeoutException;Ljava/lang/InterruptedException; )
public final org.apache.http.impl.conn.tsccm.BasicPoolEntry getEntry(
org.apache.http.conn.routing.HttpRoute
java.lang.Object
long
java.util.concurrent.TimeUnit)

protected abstract void handleLostEntry(
org.apache.http.conn.routing.HttpRoute)

public void handleReference(
java.lang.ref.Reference)

public abstract org.apache.http.impl.conn.tsccm.PoolEntryRequest requestPoolEntry(
org.apache.http.conn.routing.HttpRoute
java.lang.Object)

public void shutdown()

________________CLASS________________


public class org.apache.http.impl.conn.tsccm.BasicPoolEntry extends org.apache.http.impl.conn.AbstractPoolEntry

----------------FIELDS----------------

private final org.apache.http.impl.conn.tsccm.BasicPoolEntryRef reference
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/ref/ReferenceQueue<Ljava/lang/Object;>;)V )
public void <init>(
org.apache.http.conn.ClientConnectionOperator
org.apache.http.conn.routing.HttpRoute
java.lang.ref.ReferenceQueue)

protected final org.apache.http.conn.OperatedClientConnection getConnection()

protected final org.apache.http.conn.routing.HttpRoute getPlannedRoute()

protected final org.apache.http.impl.conn.tsccm.BasicPoolEntryRef getWeakRef()

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/ref/WeakReference<Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;>; )
public class org.apache.http.impl.conn.tsccm.BasicPoolEntryRef extends java.lang.ref.WeakReference

----------------FIELDS----------------

private final org.apache.http.conn.routing.HttpRoute route
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;Ljava/lang/ref/ReferenceQueue<Ljava/lang/Object;>;)V )
public void <init>(
org.apache.http.impl.conn.tsccm.BasicPoolEntry
java.lang.ref.ReferenceQueue)

public final org.apache.http.conn.routing.HttpRoute getRoute()

________________CLASS________________


public class org.apache.http.impl.conn.tsccm.BasicPooledConnAdapter extends org.apache.http.impl.conn.AbstractPooledConnAdapter

----------------FIELDS----------------
----------------METHODS----------------

protected void <init>(
org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager
org.apache.http.impl.conn.AbstractPoolEntry)

protected void detach()

protected org.apache.http.conn.ClientConnectionManager getManager()

protected org.apache.http.impl.conn.AbstractPoolEntry getPoolEntry()

________________CLASS________________


public abstract interface class org.apache.http.impl.conn.tsccm.PoolEntryRequest extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void abortRequest()
@dalvik.annotation.Throws (value =Ljava/lang/InterruptedException;Lorg/apache/http/conn/ConnectionPoolTimeoutException; )
public abstract org.apache.http.impl.conn.tsccm.BasicPoolEntry getPoolEntry(
long
java.util.concurrent.TimeUnit)

________________CLASS________________

@dalvik.annotation.EnclosingMethod (value =null )
@dalvik.annotation.InnerClass (accessFlags =0 name =null )
 class org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1 extends java.lang.Object implements org.apache.http.impl.conn.tsccm.PoolEntryRequest

----------------FIELDS----------------

final org.apache.http.impl.conn.tsccm.ConnPoolByRoute this$0

final org.apache.http.impl.conn.tsccm.WaitingThreadAborter val$aborter

final org.apache.http.conn.routing.HttpRoute val$route

final java.lang.Object val$state
----------------METHODS----------------

 void <init>(
org.apache.http.impl.conn.tsccm.ConnPoolByRoute
org.apache.http.impl.conn.tsccm.WaitingThreadAborter
org.apache.http.conn.routing.HttpRoute
java.lang.Object)

public void abortRequest()
@dalvik.annotation.Throws (value =Ljava/lang/InterruptedException;Lorg/apache/http/conn/ConnectionPoolTimeoutException; )
public org.apache.http.impl.conn.tsccm.BasicPoolEntry getPoolEntry(
long
java.util.concurrent.TimeUnit)

________________CLASS________________


public class org.apache.http.impl.conn.tsccm.ConnPoolByRoute extends org.apache.http.impl.conn.tsccm.AbstractConnPool

----------------FIELDS----------------

private final org.apache.http.conn.params.ConnPerRoute connPerRoute
@dalvik.annotation.Signature (value =Ljava/util/Queue<Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;>; )
protected java.util.Queue freeConnections

private final org.apache.commons.logging.Log log

protected final int maxTotalConnections

protected final org.apache.http.conn.ClientConnectionOperator operator
@dalvik.annotation.Signature (value =Ljava/util/Map<Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;>; )
protected final java.util.Map routeToPool
@dalvik.annotation.Signature (value =Ljava/util/Queue<Lorg/apache/http/impl/conn/tsccm/WaitingThread;>; )
protected java.util.Queue waitingThreads
----------------METHODS----------------

public void <init>(
org.apache.http.conn.ClientConnectionOperator
org.apache.http.params.HttpParams)

protected org.apache.http.impl.conn.tsccm.BasicPoolEntry createEntry(
org.apache.http.impl.conn.tsccm.RouteSpecificPool
org.apache.http.conn.ClientConnectionOperator)
@dalvik.annotation.Signature (value =()Ljava/util/Queue<Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;>; )
protected java.util.Queue createFreeConnQueue()
@dalvik.annotation.Signature (value =()Ljava/util/Map<Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;>; )
protected java.util.Map createRouteToPoolMap()
@dalvik.annotation.Signature (value =()Ljava/util/Queue<Lorg/apache/http/impl/conn/tsccm/WaitingThread;>; )
protected java.util.Queue createWaitingThreadQueue()

public void deleteClosedConnections()

protected void deleteEntry(
org.apache.http.impl.conn.tsccm.BasicPoolEntry)

protected void deleteLeastUsedEntry()

public void freeEntry(
org.apache.http.impl.conn.tsccm.BasicPoolEntry
boolean
long
java.util.concurrent.TimeUnit)

public int getConnectionsInPool(
org.apache.http.conn.routing.HttpRoute)
@dalvik.annotation.Throws (value =Lorg/apache/http/conn/ConnectionPoolTimeoutException;Ljava/lang/InterruptedException; )
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)

protected org.apache.http.impl.conn.tsccm.BasicPoolEntry getFreeEntry(
org.apache.http.impl.conn.tsccm.RouteSpecificPool
java.lang.Object)

protected org.apache.http.impl.conn.tsccm.RouteSpecificPool getRoutePool(
org.apache.http.conn.routing.HttpRoute
boolean)

protected void handleLostEntry(
org.apache.http.conn.routing.HttpRoute)

protected org.apache.http.impl.conn.tsccm.RouteSpecificPool newRouteSpecificPool(
org.apache.http.conn.routing.HttpRoute)

protected org.apache.http.impl.conn.tsccm.WaitingThread newWaitingThread(
java.util.concurrent.locks.Condition
org.apache.http.impl.conn.tsccm.RouteSpecificPool)

protected void notifyWaitingThread(
org.apache.http.impl.conn.tsccm.RouteSpecificPool)

public org.apache.http.impl.conn.tsccm.PoolEntryRequest requestPoolEntry(
org.apache.http.conn.routing.HttpRoute
java.lang.Object)

public void shutdown()

________________CLASS________________


public class org.apache.http.impl.conn.tsccm.RefQueueWorker extends java.lang.Object implements java.lang.Runnable

----------------FIELDS----------------

private final org.apache.commons.logging.Log log

protected final org.apache.http.impl.conn.tsccm.RefQueueHandler refHandler
@dalvik.annotation.Signature (value =Ljava/lang/ref/ReferenceQueue<*>; )
protected final java.lang.ref.ReferenceQueue refQueue

protected volatile java.lang.Thread workerThread
----------------METHODS----------------
@dalvik.annotation.Signature (value =(Ljava/lang/ref/ReferenceQueue<*>;Lorg/apache/http/impl/conn/tsccm/RefQueueHandler;)V )
public void <init>(
java.lang.ref.ReferenceQueue
org.apache.http.impl.conn.tsccm.RefQueueHandler)

public void run()

public void shutdown()

public java.lang.String toString()

________________CLASS________________


public class org.apache.http.impl.conn.tsccm.RouteSpecificPool extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/LinkedList<Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;>; )
protected final java.util.LinkedList freeEntries

private final org.apache.commons.logging.Log log

protected final int maxEntries

protected int numEntries

protected final org.apache.http.conn.routing.HttpRoute route
@dalvik.annotation.Signature (value =Ljava/util/Queue<Lorg/apache/http/impl/conn/tsccm/WaitingThread;>; )
protected final java.util.Queue waitingThreads
----------------METHODS----------------

public void <init>(
org.apache.http.conn.routing.HttpRoute
int)

public org.apache.http.impl.conn.tsccm.BasicPoolEntry allocEntry(
java.lang.Object)

public void createdEntry(
org.apache.http.impl.conn.tsccm.BasicPoolEntry)

public boolean deleteEntry(
org.apache.http.impl.conn.tsccm.BasicPoolEntry)

public void dropEntry()

public void freeEntry(
org.apache.http.impl.conn.tsccm.BasicPoolEntry)

public int getCapacity()

public final int getEntryCount()

public final int getMaxEntries()

public final org.apache.http.conn.routing.HttpRoute getRoute()

public boolean hasThread()

public boolean isUnused()

public org.apache.http.impl.conn.tsccm.WaitingThread nextThread()

public void queueThread(
org.apache.http.impl.conn.tsccm.WaitingThread)

public void removeThread(
org.apache.http.impl.conn.tsccm.WaitingThread)

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =0 name =null )
@dalvik.annotation.EnclosingMethod (value =null )
 class org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1 extends java.lang.Object implements org.apache.http.conn.ClientConnectionRequest

----------------FIELDS----------------

final org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager this$0

final org.apache.http.impl.conn.tsccm.PoolEntryRequest val$poolRequest

final org.apache.http.conn.routing.HttpRoute val$route
----------------METHODS----------------

 void <init>(
org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager
org.apache.http.impl.conn.tsccm.PoolEntryRequest
org.apache.http.conn.routing.HttpRoute)

public void abortRequest()
@dalvik.annotation.Throws (value =Ljava/lang/InterruptedException;Lorg/apache/http/conn/ConnectionPoolTimeoutException; )
public org.apache.http.conn.ManagedClientConnection getConnection(
long
java.util.concurrent.TimeUnit)

________________CLASS________________


public class org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager extends java.lang.Object implements org.apache.http.conn.ClientConnectionManager

----------------FIELDS----------------

protected org.apache.http.conn.ClientConnectionOperator connOperator

protected final org.apache.http.impl.conn.tsccm.AbstractConnPool connectionPool

private final org.apache.commons.logging.Log log

protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry
----------------METHODS----------------

public void <init>(
org.apache.http.params.HttpParams
org.apache.http.conn.scheme.SchemeRegistry)

static org.apache.commons.logging.Log access$000(
org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager)

public void closeExpiredConnections()

public void closeIdleConnections(
long
java.util.concurrent.TimeUnit)

protected org.apache.http.conn.ClientConnectionOperator createConnectionOperator(
org.apache.http.conn.scheme.SchemeRegistry)

protected org.apache.http.impl.conn.tsccm.AbstractConnPool createConnectionPool(
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/lang/Throwable; )
protected void finalize()

public int getConnectionsInPool()

public int getConnectionsInPool(
org.apache.http.conn.routing.HttpRoute)

public org.apache.http.conn.scheme.SchemeRegistry getSchemeRegistry()

public void releaseConnection(
org.apache.http.conn.ManagedClientConnection
long
java.util.concurrent.TimeUnit)

public org.apache.http.conn.ClientConnectionRequest requestConnection(
org.apache.http.conn.routing.HttpRoute
java.lang.Object)

public void shutdown()

________________CLASS________________


public class org.apache.http.impl.conn.tsccm.WaitingThread extends java.lang.Object

----------------FIELDS----------------

private boolean aborted

private final java.util.concurrent.locks.Condition cond

private final org.apache.http.impl.conn.tsccm.RouteSpecificPool pool

private java.lang.Thread waiter
----------------METHODS----------------

public void <init>(
java.util.concurrent.locks.Condition
org.apache.http.impl.conn.tsccm.RouteSpecificPool)
@dalvik.annotation.Throws (value =Ljava/lang/InterruptedException; )
public boolean await(
java.util.Date)

public final java.util.concurrent.locks.Condition getCondition()

public final org.apache.http.impl.conn.tsccm.RouteSpecificPool getPool()

public final java.lang.Thread getThread()

public void interrupt()

public void wakeup()

________________CLASS________________


public class org.apache.http.impl.conn.tsccm.WaitingThreadAborter extends java.lang.Object

----------------FIELDS----------------

private boolean aborted

private org.apache.http.impl.conn.tsccm.WaitingThread waitingThread
----------------METHODS----------------

public void <init>()

public void abort()

public void setWaitingThread(
org.apache.http.impl.conn.tsccm.WaitingThread)

________________CLASS________________


public abstract class org.apache.http.impl.cookie.AbstractCookieAttributeHandler extends java.lang.Object implements org.apache.http.cookie.CookieAttributeHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public boolean match(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public abstract class org.apache.http.impl.cookie.AbstractCookieSpec extends java.lang.Object implements org.apache.http.cookie.CookieSpec

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Lorg/apache/http/cookie/CookieAttributeHandler;>; )
private final java.util.Map attribHandlerMap
----------------METHODS----------------

public void <init>()

protected org.apache.http.cookie.CookieAttributeHandler findAttribHandler(
java.lang.String)

protected org.apache.http.cookie.CookieAttributeHandler getAttribHandler(
java.lang.String)
@dalvik.annotation.Signature (value =()Ljava/util/Collection<Lorg/apache/http/cookie/CookieAttributeHandler;>; )
protected java.util.Collection getAttribHandlers()

public void registerAttribHandler(
java.lang.String
org.apache.http.cookie.CookieAttributeHandler)

________________CLASS________________


public class org.apache.http.impl.cookie.BasicClientCookie extends java.lang.Object implements org.apache.http.cookie.SetCookie, org.apache.http.cookie.ClientCookie, java.lang.Cloneable

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>; )
private java.util.Map attribs

private java.lang.String cookieComment

private java.lang.String cookieDomain

private java.util.Date cookieExpiryDate

private java.lang.String cookiePath

private int cookieVersion

private boolean isSecure

private final java.lang.String name

private java.lang.String value
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public boolean containsAttribute(
java.lang.String)

public java.lang.String getAttribute(
java.lang.String)

public java.lang.String getComment()

public java.lang.String getCommentURL()

public java.lang.String getDomain()

public java.util.Date getExpiryDate()

public java.lang.String getName()

public java.lang.String getPath()

public int[] getPorts()

public java.lang.String getValue()

public int getVersion()

public boolean isExpired(
java.util.Date)

public boolean isPersistent()

public boolean isSecure()

public void setAttribute(
java.lang.String
java.lang.String)

public void setComment(
java.lang.String)

public void setDomain(
java.lang.String)

public void setExpiryDate(
java.util.Date)

public void setPath(
java.lang.String)

public void setSecure(
boolean)

public void setValue(
java.lang.String)

public void setVersion(
int)

public java.lang.String toString()

________________CLASS________________


public class org.apache.http.impl.cookie.BasicClientCookie2 extends org.apache.http.impl.cookie.BasicClientCookie implements org.apache.http.cookie.SetCookie2

----------------FIELDS----------------

private java.lang.String commentURL

private boolean discard

private int[] ports
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public java.lang.String getCommentURL()

public int[] getPorts()

public boolean isExpired(
java.util.Date)

public boolean isPersistent()

public void setCommentURL(
java.lang.String)

public void setDiscard(
boolean)

public void setPorts(
int[])

________________CLASS________________


public class org.apache.http.impl.cookie.BasicCommentHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void parse(
org.apache.http.cookie.SetCookie
java.lang.String)

________________CLASS________________


public class org.apache.http.impl.cookie.BasicDomainHandler extends java.lang.Object implements org.apache.http.cookie.CookieAttributeHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public boolean match(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void parse(
org.apache.http.cookie.SetCookie
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public class org.apache.http.impl.cookie.BasicExpiresHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler

----------------FIELDS----------------

private final java.lang.String[] datepatterns
----------------METHODS----------------

public void <init>(
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void parse(
org.apache.http.cookie.SetCookie
java.lang.String)

________________CLASS________________


public class org.apache.http.impl.cookie.BasicMaxAgeHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void parse(
org.apache.http.cookie.SetCookie
java.lang.String)

________________CLASS________________


public class org.apache.http.impl.cookie.BasicPathHandler extends java.lang.Object implements org.apache.http.cookie.CookieAttributeHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public boolean match(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void parse(
org.apache.http.cookie.SetCookie
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public class org.apache.http.impl.cookie.BasicSecureHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public boolean match(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void parse(
org.apache.http.cookie.SetCookie
java.lang.String)

________________CLASS________________


public class org.apache.http.impl.cookie.BestMatchSpec extends java.lang.Object implements org.apache.http.cookie.CookieSpec

----------------FIELDS----------------

private org.apache.http.impl.cookie.BrowserCompatSpec compat

private final java.lang.String[] datepatterns

private org.apache.http.impl.cookie.NetscapeDraftSpec netscape

private final boolean oneHeader

private org.apache.http.impl.cookie.RFC2965Spec strict
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String[]
boolean)

private org.apache.http.impl.cookie.BrowserCompatSpec getCompat()

private org.apache.http.impl.cookie.NetscapeDraftSpec getNetscape()

private org.apache.http.impl.cookie.RFC2965Spec getStrict()
@dalvik.annotation.Signature (value =(Ljava/util/List<Lorg/apache/http/cookie/Cookie;>;)Ljava/util/List<Lorg/apache/http/Header;>; )
public java.util.List formatCookies(
java.util.List)

public int getVersion()

public org.apache.http.Header getVersionHeader()

public boolean match(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
@dalvik.annotation.Signature (value =(Lorg/apache/http/Header;Lorg/apache/http/cookie/CookieOrigin;)Ljava/util/List<Lorg/apache/http/cookie/Cookie;>; )
public java.util.List parse(
org.apache.http.Header
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public class org.apache.http.impl.cookie.BestMatchSpecFactory extends java.lang.Object implements org.apache.http.cookie.CookieSpecFactory

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public org.apache.http.cookie.CookieSpec newInstance(
org.apache.http.params.HttpParams)

________________CLASS________________


public abstract class org.apache.http.impl.cookie.CookieSpecBase extends org.apache.http.impl.cookie.AbstractCookieSpec

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

protected static java.lang.String getDefaultDomain(
org.apache.http.cookie.CookieOrigin)

protected static java.lang.String getDefaultPath(
org.apache.http.cookie.CookieOrigin)

public boolean match(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Signature (value =([Lorg/apache/http/HeaderElement;Lorg/apache/http/cookie/CookieOrigin;)Ljava/util/List<Lorg/apache/http/cookie/Cookie;>; )
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
protected java.util.List parse(
org.apache.http.HeaderElement[]
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public class org.apache.http.impl.cookie.BrowserCompatSpec extends org.apache.http.impl.cookie.CookieSpecBase

----------------FIELDS----------------

protected static final java.lang.String[] DATE_PATTERNS

private final java.lang.String[] datepatterns
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
java.lang.String[])
@dalvik.annotation.Signature (value =(Ljava/util/List<Lorg/apache/http/cookie/Cookie;>;)Ljava/util/List<Lorg/apache/http/Header;>; )
public java.util.List formatCookies(
java.util.List)

public int getVersion()

public org.apache.http.Header getVersionHeader()
@dalvik.annotation.Signature (value =(Lorg/apache/http/Header;Lorg/apache/http/cookie/CookieOrigin;)Ljava/util/List<Lorg/apache/http/cookie/Cookie;>; )
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public java.util.List parse(
org.apache.http.Header
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public class org.apache.http.impl.cookie.BrowserCompatSpecFactory extends java.lang.Object implements org.apache.http.cookie.CookieSpecFactory

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public org.apache.http.cookie.CookieSpec newInstance(
org.apache.http.params.HttpParams)

________________CLASS________________


public class org.apache.http.impl.cookie.DateParseException extends java.lang.Exception

----------------FIELDS----------------

private static final long serialVersionUID
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String)

________________CLASS________________

@dalvik.annotation.Signature (value =Ljava/lang/ThreadLocal<Ljava/lang/ref/SoftReference<Ljava/util/Map<Ljava/lang/String;Ljava/text/SimpleDateFormat;>;>;>; )
@dalvik.annotation.EnclosingClass (value =Lorg/apache/http/impl/cookie/DateUtils$DateFormatHolder; )
@dalvik.annotation.InnerClass (accessFlags =8 name =null )
final class org.apache.http.impl.cookie.DateUtils$DateFormatHolder$1 extends java.lang.ThreadLocal

----------------FIELDS----------------
----------------METHODS----------------

 void <init>()

protected volatile java.lang.Object initialValue()
@dalvik.annotation.Signature (value =()Ljava/lang/ref/SoftReference<Ljava/util/Map<Ljava/lang/String;Ljava/text/SimpleDateFormat;>;>; )
protected java.lang.ref.SoftReference initialValue()

________________CLASS________________

@dalvik.annotation.InnerClass (accessFlags =24 name =DateFormatHolder )
@dalvik.annotation.EnclosingClass (value =Lorg/apache/http/impl/cookie/DateUtils; )
final class org.apache.http.impl.cookie.DateUtils$DateFormatHolder extends java.lang.Object

----------------FIELDS----------------
@dalvik.annotation.Signature (value =Ljava/lang/ThreadLocal<Ljava/lang/ref/SoftReference<Ljava/util/Map<Ljava/lang/String;Ljava/text/SimpleDateFormat;>;>;>; )
private static final java.lang.ThreadLocal THREADLOCAL_FORMATS
----------------METHODS----------------

static void <clinit>()

 void <init>()

public static java.text.SimpleDateFormat formatFor(
java.lang.String)

________________CLASS________________

@dalvik.annotation.MemberClasses (value =Lorg/apache/http/impl/cookie/DateUtils$DateFormatHolder; )
public final class org.apache.http.impl.cookie.DateUtils extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.String[] DEFAULT_PATTERNS

private static final java.util.Date DEFAULT_TWO_DIGIT_YEAR_START

public static final java.util.TimeZone GMT

public static final java.lang.String PATTERN_ASCTIME

public static final java.lang.String PATTERN_RFC1036

public static final java.lang.String PATTERN_RFC1123
----------------METHODS----------------

static void <clinit>()

private void <init>()

public static java.lang.String formatDate(
java.util.Date)

public static java.lang.String formatDate(
java.util.Date
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/impl/cookie/DateParseException; )
public static java.util.Date parseDate(
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/impl/cookie/DateParseException; )
public static java.util.Date parseDate(
java.lang.String
java.lang.String[])
@dalvik.annotation.Throws (value =Lorg/apache/http/impl/cookie/DateParseException; )
public static java.util.Date parseDate(
java.lang.String
java.lang.String[]
java.util.Date)

________________CLASS________________


public class org.apache.http.impl.cookie.NetscapeDomainHandler extends org.apache.http.impl.cookie.BasicDomainHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

private static boolean isSpecialDomain(
java.lang.String)

public boolean match(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public class org.apache.http.impl.cookie.NetscapeDraftHeaderParser extends java.lang.Object

----------------FIELDS----------------

public static final org.apache.http.impl.cookie.NetscapeDraftHeaderParser DEFAULT

private static final char[] DELIMITERS

private final org.apache.http.message.BasicHeaderValueParser nvpParser
----------------METHODS----------------

static void <clinit>()

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public org.apache.http.HeaderElement parseHeader(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)

________________CLASS________________


public class org.apache.http.impl.cookie.NetscapeDraftSpec extends org.apache.http.impl.cookie.CookieSpecBase

----------------FIELDS----------------

protected static final java.lang.String EXPIRES_PATTERN

private final java.lang.String[] datepatterns
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String[])
@dalvik.annotation.Signature (value =(Ljava/util/List<Lorg/apache/http/cookie/Cookie;>;)Ljava/util/List<Lorg/apache/http/Header;>; )
public java.util.List formatCookies(
java.util.List)

public int getVersion()

public org.apache.http.Header getVersionHeader()
@dalvik.annotation.Signature (value =(Lorg/apache/http/Header;Lorg/apache/http/cookie/CookieOrigin;)Ljava/util/List<Lorg/apache/http/cookie/Cookie;>; )
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public java.util.List parse(
org.apache.http.Header
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public class org.apache.http.impl.cookie.NetscapeDraftSpecFactory extends java.lang.Object implements org.apache.http.cookie.CookieSpecFactory

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public org.apache.http.cookie.CookieSpec newInstance(
org.apache.http.params.HttpParams)

________________CLASS________________


public class org.apache.http.impl.cookie.RFC2109DomainHandler extends java.lang.Object implements org.apache.http.cookie.CookieAttributeHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public boolean match(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void parse(
org.apache.http.cookie.SetCookie
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public class org.apache.http.impl.cookie.RFC2109Spec extends org.apache.http.impl.cookie.CookieSpecBase

----------------FIELDS----------------

private static final java.lang.String[] DATE_PATTERNS

private static final org.apache.http.cookie.CookiePathComparator PATH_COMPARATOR

private final java.lang.String[] datepatterns

private final boolean oneHeader
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
java.lang.String[]
boolean)
@dalvik.annotation.Signature (value =(Ljava/util/List<Lorg/apache/http/cookie/Cookie;>;)Ljava/util/List<Lorg/apache/http/Header;>; )
private java.util.List doFormatManyHeaders(
java.util.List)
@dalvik.annotation.Signature (value =(Ljava/util/List<Lorg/apache/http/cookie/Cookie;>;)Ljava/util/List<Lorg/apache/http/Header;>; )
private java.util.List doFormatOneHeader(
java.util.List)

protected void formatCookieAsVer(
org.apache.http.util.CharArrayBuffer
org.apache.http.cookie.Cookie
int)
@dalvik.annotation.Signature (value =(Ljava/util/List<Lorg/apache/http/cookie/Cookie;>;)Ljava/util/List<Lorg/apache/http/Header;>; )
public java.util.List formatCookies(
java.util.List)

protected void formatParamAsVer(
org.apache.http.util.CharArrayBuffer
java.lang.String
java.lang.String
int)

public int getVersion()

public org.apache.http.Header getVersionHeader()
@dalvik.annotation.Signature (value =(Lorg/apache/http/Header;Lorg/apache/http/cookie/CookieOrigin;)Ljava/util/List<Lorg/apache/http/cookie/Cookie;>; )
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public java.util.List parse(
org.apache.http.Header
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public class org.apache.http.impl.cookie.RFC2109SpecFactory extends java.lang.Object implements org.apache.http.cookie.CookieSpecFactory

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public org.apache.http.cookie.CookieSpec newInstance(
org.apache.http.params.HttpParams)

________________CLASS________________


public class org.apache.http.impl.cookie.RFC2109VersionHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void parse(
org.apache.http.cookie.SetCookie
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public class org.apache.http.impl.cookie.RFC2965CommentUrlAttributeHandler extends java.lang.Object implements org.apache.http.cookie.CookieAttributeHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public boolean match(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void parse(
org.apache.http.cookie.SetCookie
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public class org.apache.http.impl.cookie.RFC2965DiscardAttributeHandler extends java.lang.Object implements org.apache.http.cookie.CookieAttributeHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public boolean match(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void parse(
org.apache.http.cookie.SetCookie
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public class org.apache.http.impl.cookie.RFC2965DomainAttributeHandler extends java.lang.Object implements org.apache.http.cookie.CookieAttributeHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public boolean domainMatch(
java.lang.String
java.lang.String)

public boolean match(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void parse(
org.apache.http.cookie.SetCookie
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public class org.apache.http.impl.cookie.RFC2965PortAttributeHandler extends java.lang.Object implements org.apache.http.cookie.CookieAttributeHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
private static int[] parsePortAttribute(
java.lang.String)

private static boolean portMatch(
int
int[])

public boolean match(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void parse(
org.apache.http.cookie.SetCookie
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public class org.apache.http.impl.cookie.RFC2965Spec extends org.apache.http.impl.cookie.RFC2109Spec

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public void <init>(
java.lang.String[]
boolean)

private static org.apache.http.cookie.CookieOrigin adjustEffectiveHost(
org.apache.http.cookie.CookieOrigin)

private org.apache.http.impl.cookie.BasicClientCookie createCookie(
java.lang.String
java.lang.String
org.apache.http.cookie.CookieOrigin)

private org.apache.http.impl.cookie.BasicClientCookie createCookie2(
java.lang.String
java.lang.String
org.apache.http.cookie.CookieOrigin)

protected void formatCookieAsVer(
org.apache.http.util.CharArrayBuffer
org.apache.http.cookie.Cookie
int)

public int getVersion()

public org.apache.http.Header getVersionHeader()

public boolean match(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
@dalvik.annotation.Signature (value =(Lorg/apache/http/Header;Lorg/apache/http/cookie/CookieOrigin;)Ljava/util/List<Lorg/apache/http/cookie/Cookie;>; )
public java.util.List parse(
org.apache.http.Header
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public class org.apache.http.impl.cookie.RFC2965SpecFactory extends java.lang.Object implements org.apache.http.cookie.CookieSpecFactory

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public org.apache.http.cookie.CookieSpec newInstance(
org.apache.http.params.HttpParams)

________________CLASS________________


public class org.apache.http.impl.cookie.RFC2965VersionAttributeHandler extends java.lang.Object implements org.apache.http.cookie.CookieAttributeHandler

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

public boolean match(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void parse(
org.apache.http.cookie.SetCookie
java.lang.String)
@dalvik.annotation.Throws (value =Lorg/apache/http/cookie/MalformedCookieException; )
public void validate(
org.apache.http.cookie.Cookie
org.apache.http.cookie.CookieOrigin)

________________CLASS________________


public class org.apache.http.impl.entity.EntityDeserializer extends java.lang.Object

----------------FIELDS----------------

private final org.apache.http.entity.ContentLengthStrategy lenStrategy
----------------METHODS----------------

public void <init>(
org.apache.http.entity.ContentLengthStrategy)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public org.apache.http.HttpEntity deserialize(
org.apache.http.io.SessionInputBuffer
org.apache.http.HttpMessage)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
protected org.apache.http.entity.BasicHttpEntity doDeserialize(
org.apache.http.io.SessionInputBuffer
org.apache.http.HttpMessage)

________________CLASS________________


public class org.apache.http.impl.entity.EntitySerializer extends java.lang.Object

----------------FIELDS----------------

private final org.apache.http.entity.ContentLengthStrategy lenStrategy
----------------METHODS----------------

public void <init>(
org.apache.http.entity.ContentLengthStrategy)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
protected java.io.OutputStream doSerialize(
org.apache.http.io.SessionOutputBuffer
org.apache.http.HttpMessage)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void serialize(
org.apache.http.io.SessionOutputBuffer
org.apache.http.HttpMessage
org.apache.http.HttpEntity)

________________CLASS________________


public class org.apache.http.impl.entity.LaxContentLengthStrategy extends java.lang.Object implements org.apache.http.entity.ContentLengthStrategy

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException; )
public long determineLength(
org.apache.http.HttpMessage)

________________CLASS________________


public class org.apache.http.impl.entity.StrictContentLengthStrategy extends java.lang.Object implements org.apache.http.entity.ContentLengthStrategy

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException; )
public long determineLength(
org.apache.http.HttpMessage)

________________CLASS________________


public abstract interface class org.apache.http.io.HttpMessageWriter extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/HttpException; )
public abstract void write(
org.apache.http.HttpMessage)

________________CLASS________________


public abstract class org.apache.http.impl.io.AbstractMessageWriter extends java.lang.Object implements org.apache.http.io.HttpMessageWriter

----------------FIELDS----------------

protected final org.apache.http.util.CharArrayBuffer lineBuf

protected final org.apache.http.message.LineFormatter lineFormatter

protected final org.apache.http.io.SessionOutputBuffer sessionBuffer
----------------METHODS----------------

public void <init>(
org.apache.http.io.SessionOutputBuffer
org.apache.http.message.LineFormatter
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/HttpException; )
public void write(
org.apache.http.HttpMessage)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected abstract void writeHeadLine(
org.apache.http.HttpMessage)

________________CLASS________________


public abstract class org.apache.http.impl.io.AbstractSessionInputBuffer extends java.lang.Object implements org.apache.http.io.SessionInputBuffer

----------------FIELDS----------------

private boolean ascii

private byte[] buffer

private int bufferlen

private int bufferpos

private java.lang.String charset

private java.io.InputStream instream

private org.apache.http.util.ByteArrayBuffer linebuffer

private int maxLineLen

private org.apache.http.impl.io.HttpTransportMetricsImpl metrics
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private int lineFromLineBuffer(
org.apache.http.util.CharArrayBuffer)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private int lineFromReadBuffer(
org.apache.http.util.CharArrayBuffer
int)

private int locateLF()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected int fillBuffer()

public org.apache.http.io.HttpTransportMetrics getMetrics()

protected boolean hasBufferedData()

protected void init(
java.io.InputStream
int
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read(
byte[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int readLine(
org.apache.http.util.CharArrayBuffer)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public java.lang.String readLine()

________________CLASS________________


public abstract class org.apache.http.impl.io.AbstractSessionOutputBuffer extends java.lang.Object implements org.apache.http.io.SessionOutputBuffer

----------------FIELDS----------------

private static final byte[] CRLF

private static final int MAX_CHUNK

private boolean ascii

private org.apache.http.util.ByteArrayBuffer buffer

private java.lang.String charset

private org.apache.http.impl.io.HttpTransportMetricsImpl metrics

private java.io.OutputStream outstream
----------------METHODS----------------

static void <clinit>()

public void <init>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void flush()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void flushBuffer()

public org.apache.http.io.HttpTransportMetrics getMetrics()

protected void init(
java.io.OutputStream
int
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
byte[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeLine(
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void writeLine(
org.apache.http.util.CharArrayBuffer)

________________CLASS________________


public class org.apache.http.impl.io.ChunkedInputStream extends java.io.InputStream

----------------FIELDS----------------

private boolean bof

private final org.apache.http.util.CharArrayBuffer buffer

private int chunkSize

private boolean closed

private boolean eof

private org.apache.http.Header[] footers

private org.apache.http.io.SessionInputBuffer in

private int pos
----------------METHODS----------------

public void <init>(
org.apache.http.io.SessionInputBuffer)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
static void exhaustInputStream(
java.io.InputStream)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private int getChunkSize()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private void nextChunk()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
private void parseTrailerHeaders()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()

public org.apache.http.Header[] getFooters()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read(
byte[]
int
int)

________________CLASS________________


public class org.apache.http.impl.io.ChunkedOutputStream extends java.io.OutputStream

----------------FIELDS----------------

private byte[] cache

private int cachePosition

private boolean closed

private final org.apache.http.io.SessionOutputBuffer out

private boolean wroteLastChunk
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void <init>(
org.apache.http.io.SessionOutputBuffer)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void <init>(
org.apache.http.io.SessionOutputBuffer
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void finish()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void flush()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void flushCache()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void flushCacheWithAppend(
byte[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
byte[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void writeClosingChunk()

________________CLASS________________


public class org.apache.http.impl.io.ContentLengthInputStream extends java.io.InputStream

----------------FIELDS----------------

private static final int BUFFER_SIZE

private boolean closed

private long contentLength

private org.apache.http.io.SessionInputBuffer in

private long pos
----------------METHODS----------------

public void <init>(
org.apache.http.io.SessionInputBuffer
long)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read(
byte[]
int
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public long skip(
long)

________________CLASS________________


public class org.apache.http.impl.io.ContentLengthOutputStream extends java.io.OutputStream

----------------FIELDS----------------

private boolean closed

private final long contentLength

private final org.apache.http.io.SessionOutputBuffer out

private long total
----------------METHODS----------------

public void <init>(
org.apache.http.io.SessionOutputBuffer
long)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void flush()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
byte[]
int
int)

________________CLASS________________


public class org.apache.http.impl.io.HttpRequestParser extends org.apache.http.impl.io.AbstractMessageParser

----------------FIELDS----------------

private final org.apache.http.util.CharArrayBuffer lineBuf

private final org.apache.http.HttpRequestFactory requestFactory
----------------METHODS----------------

public void <init>(
org.apache.http.io.SessionInputBuffer
org.apache.http.message.LineParser
org.apache.http.HttpRequestFactory
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/HttpException;Lorg/apache/http/ParseException; )
protected org.apache.http.HttpMessage parseHead(
org.apache.http.io.SessionInputBuffer)

________________CLASS________________


public class org.apache.http.impl.io.HttpRequestWriter extends org.apache.http.impl.io.AbstractMessageWriter

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
org.apache.http.io.SessionOutputBuffer
org.apache.http.message.LineFormatter
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void writeHeadLine(
org.apache.http.HttpMessage)

________________CLASS________________


public class org.apache.http.impl.io.HttpResponseParser extends org.apache.http.impl.io.AbstractMessageParser

----------------FIELDS----------------

private final org.apache.http.util.CharArrayBuffer lineBuf

private final org.apache.http.HttpResponseFactory responseFactory
----------------METHODS----------------

public void <init>(
org.apache.http.io.SessionInputBuffer
org.apache.http.message.LineParser
org.apache.http.HttpResponseFactory
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/HttpException;Lorg/apache/http/ParseException; )
protected org.apache.http.HttpMessage parseHead(
org.apache.http.io.SessionInputBuffer)

________________CLASS________________


public class org.apache.http.impl.io.HttpResponseWriter extends org.apache.http.impl.io.AbstractMessageWriter

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
org.apache.http.io.SessionOutputBuffer
org.apache.http.message.LineFormatter
org.apache.http.params.HttpParams)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
protected void writeHeadLine(
org.apache.http.HttpMessage)

________________CLASS________________


public abstract interface class org.apache.http.io.HttpTransportMetrics extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract long getBytesTransferred()

public abstract void reset()

________________CLASS________________


public class org.apache.http.impl.io.HttpTransportMetricsImpl extends java.lang.Object implements org.apache.http.io.HttpTransportMetrics

----------------FIELDS----------------

private long bytesTransferred
----------------METHODS----------------

public void <init>()

public long getBytesTransferred()

public void incrementBytesTransferred(
long)

public void reset()

public void setBytesTransferred(
long)

________________CLASS________________


public class org.apache.http.impl.io.IdentityInputStream extends java.io.InputStream

----------------FIELDS----------------

private boolean closed

private final org.apache.http.io.SessionInputBuffer in
----------------METHODS----------------

public void <init>(
org.apache.http.io.SessionInputBuffer)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int available()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public int read(
byte[]
int
int)

________________CLASS________________


public class org.apache.http.impl.io.IdentityOutputStream extends java.io.OutputStream

----------------FIELDS----------------

private boolean closed

private final org.apache.http.io.SessionOutputBuffer out
----------------METHODS----------------

public void <init>(
org.apache.http.io.SessionOutputBuffer)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void close()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void flush()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
int)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
byte[])
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void write(
byte[]
int
int)

________________CLASS________________


public class org.apache.http.impl.io.SocketInputBuffer extends org.apache.http.impl.io.AbstractSessionInputBuffer

----------------FIELDS----------------

private static final java.lang.Class SOCKET_TIMEOUT_CLASS

private final java.net.Socket socket
----------------METHODS----------------

static void <clinit>()
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void <init>(
java.net.Socket
int
org.apache.http.params.HttpParams)

private static java.lang.Class SocketTimeoutExceptionClass()

private static boolean isSocketTimeoutException(
java.io.InterruptedIOException)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public boolean isDataAvailable(
int)

________________CLASS________________


public class org.apache.http.impl.io.SocketOutputBuffer extends org.apache.http.impl.io.AbstractSessionOutputBuffer

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public void <init>(
java.net.Socket
int
org.apache.http.params.HttpParams)

________________CLASS________________


public class org.apache.http.message.BasicHeader extends java.lang.Object implements org.apache.http.Header, java.lang.Cloneable

----------------FIELDS----------------

private final java.lang.String name

private final java.lang.String value
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public org.apache.http.HeaderElement[] getElements()

public java.lang.String getName()

public java.lang.String getValue()

public java.lang.String toString()

________________CLASS________________


public class org.apache.http.message.BasicHeaderElement extends java.lang.Object implements org.apache.http.HeaderElement, java.lang.Cloneable

----------------FIELDS----------------

private final java.lang.String name

private final org.apache.http.NameValuePair[] parameters

private final java.lang.String value
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String)

public void <init>(
java.lang.String
java.lang.String
org.apache.http.NameValuePair[])
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public boolean equals(
java.lang.Object)

public java.lang.String getName()

public org.apache.http.NameValuePair getParameter(
int)

public org.apache.http.NameValuePair getParameterByName(
java.lang.String)

public int getParameterCount()

public org.apache.http.NameValuePair[] getParameters()

public java.lang.String getValue()

public int hashCode()

public java.lang.String toString()

________________CLASS________________


public class org.apache.http.message.BasicHeaderElementIterator extends java.lang.Object implements org.apache.http.HeaderElementIterator

----------------FIELDS----------------

private org.apache.http.util.CharArrayBuffer buffer

private org.apache.http.HeaderElement currentElement

private org.apache.http.message.ParserCursor cursor

private final org.apache.http.HeaderIterator headerIt

private final org.apache.http.message.HeaderValueParser parser
----------------METHODS----------------

public void <init>(
org.apache.http.HeaderIterator)

public void <init>(
org.apache.http.HeaderIterator
org.apache.http.message.HeaderValueParser)

private void bufferHeaderValue()

private void parseNextElement()

public boolean hasNext()
@dalvik.annotation.Throws (value =Ljava/util/NoSuchElementException; )
public final java.lang.Object next()
@dalvik.annotation.Throws (value =Ljava/util/NoSuchElementException; )
public org.apache.http.HeaderElement nextElement()
@dalvik.annotation.Throws (value =Ljava/lang/UnsupportedOperationException; )
public void remove()

________________CLASS________________


public class org.apache.http.message.BasicHeaderIterator extends java.lang.Object implements org.apache.http.HeaderIterator

----------------FIELDS----------------

protected final org.apache.http.Header[] allHeaders

protected int currentIndex

protected java.lang.String headerName
----------------METHODS----------------

public void <init>(
org.apache.http.Header[]
java.lang.String)

protected boolean filterHeader(
int)

protected int findNext(
int)

public boolean hasNext()
@dalvik.annotation.Throws (value =Ljava/util/NoSuchElementException; )
public final java.lang.Object next()
@dalvik.annotation.Throws (value =Ljava/util/NoSuchElementException; )
public org.apache.http.Header nextHeader()
@dalvik.annotation.Throws (value =Ljava/lang/UnsupportedOperationException; )
public void remove()

________________CLASS________________


public abstract interface class org.apache.http.message.HeaderValueFormatter extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract org.apache.http.util.CharArrayBuffer formatElements(
org.apache.http.util.CharArrayBuffer
org.apache.http.HeaderElement[]
boolean)

public abstract org.apache.http.util.CharArrayBuffer formatHeaderElement(
org.apache.http.util.CharArrayBuffer
org.apache.http.HeaderElement
boolean)

public abstract org.apache.http.util.CharArrayBuffer formatNameValuePair(
org.apache.http.util.CharArrayBuffer
org.apache.http.NameValuePair
boolean)

public abstract org.apache.http.util.CharArrayBuffer formatParameters(
org.apache.http.util.CharArrayBuffer
org.apache.http.NameValuePair[]
boolean)

________________CLASS________________


public class org.apache.http.message.BasicHeaderValueFormatter extends java.lang.Object implements org.apache.http.message.HeaderValueFormatter

----------------FIELDS----------------

public static final org.apache.http.message.BasicHeaderValueFormatter DEFAULT

public static final java.lang.String SEPARATORS

public static final java.lang.String UNSAFE_CHARS
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static final java.lang.String formatElements(
org.apache.http.HeaderElement[]
boolean
org.apache.http.message.HeaderValueFormatter)

public static final java.lang.String formatHeaderElement(
org.apache.http.HeaderElement
boolean
org.apache.http.message.HeaderValueFormatter)

public static final java.lang.String formatNameValuePair(
org.apache.http.NameValuePair
boolean
org.apache.http.message.HeaderValueFormatter)

public static final java.lang.String formatParameters(
org.apache.http.NameValuePair[]
boolean
org.apache.http.message.HeaderValueFormatter)

protected void doFormatValue(
org.apache.http.util.CharArrayBuffer
java.lang.String
boolean)

protected int estimateElementsLen(
org.apache.http.HeaderElement[])

protected int estimateHeaderElementLen(
org.apache.http.HeaderElement)

protected int estimateNameValuePairLen(
org.apache.http.NameValuePair)

protected int estimateParametersLen(
org.apache.http.NameValuePair[])

public org.apache.http.util.CharArrayBuffer formatElements(
org.apache.http.util.CharArrayBuffer
org.apache.http.HeaderElement[]
boolean)

public org.apache.http.util.CharArrayBuffer formatHeaderElement(
org.apache.http.util.CharArrayBuffer
org.apache.http.HeaderElement
boolean)

public org.apache.http.util.CharArrayBuffer formatNameValuePair(
org.apache.http.util.CharArrayBuffer
org.apache.http.NameValuePair
boolean)

public org.apache.http.util.CharArrayBuffer formatParameters(
org.apache.http.util.CharArrayBuffer
org.apache.http.NameValuePair[]
boolean)

protected boolean isSeparator(
char)

protected boolean isUnsafe(
char)

________________CLASS________________


public abstract interface class org.apache.http.message.HeaderValueParser extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public abstract org.apache.http.HeaderElement[] parseElements(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public abstract org.apache.http.HeaderElement parseHeaderElement(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public abstract org.apache.http.NameValuePair parseNameValuePair(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public abstract org.apache.http.NameValuePair[] parseParameters(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)

________________CLASS________________


public class org.apache.http.message.BasicHeaderValueParser extends java.lang.Object implements org.apache.http.message.HeaderValueParser

----------------FIELDS----------------

private static final char[] ALL_DELIMITERS

public static final org.apache.http.message.BasicHeaderValueParser DEFAULT

private static final char ELEM_DELIMITER

private static final char PARAM_DELIMITER
----------------METHODS----------------

static void <clinit>()

public void <init>()

private static boolean isOneOf(
char
char[])
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public static final org.apache.http.HeaderElement[] parseElements(
java.lang.String
org.apache.http.message.HeaderValueParser)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public static final org.apache.http.HeaderElement parseHeaderElement(
java.lang.String
org.apache.http.message.HeaderValueParser)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public static final org.apache.http.NameValuePair parseNameValuePair(
java.lang.String
org.apache.http.message.HeaderValueParser)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public static final org.apache.http.NameValuePair[] parseParameters(
java.lang.String
org.apache.http.message.HeaderValueParser)

protected org.apache.http.HeaderElement createHeaderElement(
java.lang.String
java.lang.String
org.apache.http.NameValuePair[])

protected org.apache.http.NameValuePair createNameValuePair(
java.lang.String
java.lang.String)

public org.apache.http.HeaderElement[] parseElements(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)

public org.apache.http.HeaderElement parseHeaderElement(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)

public org.apache.http.NameValuePair parseNameValuePair(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)

public org.apache.http.NameValuePair parseNameValuePair(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor
char[])

public org.apache.http.NameValuePair[] parseParameters(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)

________________CLASS________________


public class org.apache.http.message.BasicHttpRequest extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.HttpRequest

----------------FIELDS----------------

private final java.lang.String method

private final org.apache.http.RequestLine requestline

private final java.lang.String uri
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String)

public void <init>(
java.lang.String
java.lang.String
org.apache.http.ProtocolVersion)

public void <init>(
org.apache.http.RequestLine)

public org.apache.http.ProtocolVersion getProtocolVersion()

public org.apache.http.RequestLine getRequestLine()

________________CLASS________________


public class org.apache.http.message.BasicHttpEntityEnclosingRequest extends org.apache.http.message.BasicHttpRequest implements org.apache.http.HttpEntityEnclosingRequest

----------------FIELDS----------------

private org.apache.http.HttpEntity entity
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String)

public void <init>(
java.lang.String
java.lang.String
org.apache.http.ProtocolVersion)

public void <init>(
org.apache.http.RequestLine)

public boolean expectContinue()

public org.apache.http.HttpEntity getEntity()

public void setEntity(
org.apache.http.HttpEntity)

________________CLASS________________


public class org.apache.http.message.BasicHttpResponse extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.HttpResponse

----------------FIELDS----------------

private org.apache.http.HttpEntity entity

private java.util.Locale locale

private org.apache.http.ReasonPhraseCatalog reasonCatalog

private org.apache.http.StatusLine statusline
----------------METHODS----------------

public void <init>(
org.apache.http.ProtocolVersion
int
java.lang.String)

public void <init>(
org.apache.http.StatusLine)

public void <init>(
org.apache.http.StatusLine
org.apache.http.ReasonPhraseCatalog
java.util.Locale)

public org.apache.http.HttpEntity getEntity()

public java.util.Locale getLocale()

public org.apache.http.ProtocolVersion getProtocolVersion()

protected java.lang.String getReason(
int)

public org.apache.http.StatusLine getStatusLine()

public void setEntity(
org.apache.http.HttpEntity)

public void setLocale(
java.util.Locale)

public void setReasonPhrase(
java.lang.String)

public void setStatusCode(
int)

public void setStatusLine(
org.apache.http.ProtocolVersion
int)

public void setStatusLine(
org.apache.http.ProtocolVersion
int
java.lang.String)

public void setStatusLine(
org.apache.http.StatusLine)

________________CLASS________________


public abstract interface class org.apache.http.message.LineFormatter extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract org.apache.http.util.CharArrayBuffer appendProtocolVersion(
org.apache.http.util.CharArrayBuffer
org.apache.http.ProtocolVersion)

public abstract org.apache.http.util.CharArrayBuffer formatHeader(
org.apache.http.util.CharArrayBuffer
org.apache.http.Header)

public abstract org.apache.http.util.CharArrayBuffer formatRequestLine(
org.apache.http.util.CharArrayBuffer
org.apache.http.RequestLine)

public abstract org.apache.http.util.CharArrayBuffer formatStatusLine(
org.apache.http.util.CharArrayBuffer
org.apache.http.StatusLine)

________________CLASS________________


public class org.apache.http.message.BasicLineFormatter extends java.lang.Object implements org.apache.http.message.LineFormatter

----------------FIELDS----------------

public static final org.apache.http.message.BasicLineFormatter DEFAULT
----------------METHODS----------------

static void <clinit>()

public void <init>()

public static final java.lang.String formatHeader(
org.apache.http.Header
org.apache.http.message.LineFormatter)

public static final java.lang.String formatProtocolVersion(
org.apache.http.ProtocolVersion
org.apache.http.message.LineFormatter)

public static final java.lang.String formatRequestLine(
org.apache.http.RequestLine
org.apache.http.message.LineFormatter)

public static final java.lang.String formatStatusLine(
org.apache.http.StatusLine
org.apache.http.message.LineFormatter)

public org.apache.http.util.CharArrayBuffer appendProtocolVersion(
org.apache.http.util.CharArrayBuffer
org.apache.http.ProtocolVersion)

protected void doFormatHeader(
org.apache.http.util.CharArrayBuffer
org.apache.http.Header)

protected void doFormatRequestLine(
org.apache.http.util.CharArrayBuffer
org.apache.http.RequestLine)

protected void doFormatStatusLine(
org.apache.http.util.CharArrayBuffer
org.apache.http.StatusLine)

protected int estimateProtocolVersionLen(
org.apache.http.ProtocolVersion)

public org.apache.http.util.CharArrayBuffer formatHeader(
org.apache.http.util.CharArrayBuffer
org.apache.http.Header)

public org.apache.http.util.CharArrayBuffer formatRequestLine(
org.apache.http.util.CharArrayBuffer
org.apache.http.RequestLine)

public org.apache.http.util.CharArrayBuffer formatStatusLine(
org.apache.http.util.CharArrayBuffer
org.apache.http.StatusLine)

protected org.apache.http.util.CharArrayBuffer initBuffer(
org.apache.http.util.CharArrayBuffer)

________________CLASS________________


public abstract interface class org.apache.http.message.LineParser extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract boolean hasProtocolVersion(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public abstract org.apache.http.Header parseHeader(
org.apache.http.util.CharArrayBuffer)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public abstract org.apache.http.ProtocolVersion parseProtocolVersion(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public abstract org.apache.http.RequestLine parseRequestLine(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public abstract org.apache.http.StatusLine parseStatusLine(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)

________________CLASS________________


public class org.apache.http.message.BasicLineParser extends java.lang.Object implements org.apache.http.message.LineParser

----------------FIELDS----------------

public static final org.apache.http.message.BasicLineParser DEFAULT

protected final org.apache.http.ProtocolVersion protocol
----------------METHODS----------------

static void <clinit>()

public void <init>()

public void <init>(
org.apache.http.ProtocolVersion)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public static final org.apache.http.Header parseHeader(
java.lang.String
org.apache.http.message.LineParser)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public static final org.apache.http.ProtocolVersion parseProtocolVersion(
java.lang.String
org.apache.http.message.LineParser)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public static final org.apache.http.RequestLine parseRequestLine(
java.lang.String
org.apache.http.message.LineParser)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public static final org.apache.http.StatusLine parseStatusLine(
java.lang.String
org.apache.http.message.LineParser)

protected org.apache.http.ProtocolVersion createProtocolVersion(
int
int)

protected org.apache.http.RequestLine createRequestLine(
java.lang.String
java.lang.String
org.apache.http.ProtocolVersion)

protected org.apache.http.StatusLine createStatusLine(
org.apache.http.ProtocolVersion
int
java.lang.String)

public boolean hasProtocolVersion(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public org.apache.http.Header parseHeader(
org.apache.http.util.CharArrayBuffer)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public org.apache.http.ProtocolVersion parseProtocolVersion(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public org.apache.http.RequestLine parseRequestLine(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public org.apache.http.StatusLine parseStatusLine(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)

protected void skipWhitespace(
org.apache.http.util.CharArrayBuffer
org.apache.http.message.ParserCursor)

________________CLASS________________


public class org.apache.http.message.BasicListHeaderIterator extends java.lang.Object implements org.apache.http.HeaderIterator

----------------FIELDS----------------

protected final java.util.List allHeaders

protected int currentIndex

protected java.lang.String headerName

protected int lastIndex
----------------METHODS----------------

public void <init>(
java.util.List
java.lang.String)

protected boolean filterHeader(
int)

protected int findNext(
int)

public boolean hasNext()
@dalvik.annotation.Throws (value =Ljava/util/NoSuchElementException; )
public final java.lang.Object next()
@dalvik.annotation.Throws (value =Ljava/util/NoSuchElementException; )
public org.apache.http.Header nextHeader()
@dalvik.annotation.Throws (value =Ljava/lang/UnsupportedOperationException; )
public void remove()

________________CLASS________________


public class org.apache.http.message.BasicNameValuePair extends java.lang.Object implements org.apache.http.NameValuePair, java.lang.Cloneable

----------------FIELDS----------------

private final java.lang.String name

private final java.lang.String value
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public boolean equals(
java.lang.Object)

public java.lang.String getName()

public java.lang.String getValue()

public int hashCode()

public java.lang.String toString()

________________CLASS________________


public class org.apache.http.message.BasicRequestLine extends java.lang.Object implements org.apache.http.RequestLine, java.lang.Cloneable

----------------FIELDS----------------

private final java.lang.String method

private final org.apache.http.ProtocolVersion protoversion

private final java.lang.String uri
----------------METHODS----------------

public void <init>(
java.lang.String
java.lang.String
org.apache.http.ProtocolVersion)
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public java.lang.String getMethod()

public org.apache.http.ProtocolVersion getProtocolVersion()

public java.lang.String getUri()

public java.lang.String toString()

________________CLASS________________


public class org.apache.http.message.BasicStatusLine extends java.lang.Object implements org.apache.http.StatusLine, java.lang.Cloneable

----------------FIELDS----------------

private final org.apache.http.ProtocolVersion protoVersion

private final java.lang.String reasonPhrase

private final int statusCode
----------------METHODS----------------

public void <init>(
org.apache.http.ProtocolVersion
int
java.lang.String)
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public org.apache.http.ProtocolVersion getProtocolVersion()

public java.lang.String getReasonPhrase()

public int getStatusCode()

public java.lang.String toString()

________________CLASS________________


public class org.apache.http.message.BasicTokenIterator extends java.lang.Object implements org.apache.http.TokenIterator

----------------FIELDS----------------

public static final java.lang.String HTTP_SEPARATORS

protected java.lang.String currentHeader

protected java.lang.String currentToken

protected final org.apache.http.HeaderIterator headerIt

protected int searchPos
----------------METHODS----------------

public void <init>(
org.apache.http.HeaderIterator)

protected java.lang.String createToken(
java.lang.String
int
int)
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
protected int findNext(
int)

protected int findTokenEnd(
int)

protected int findTokenSeparator(
int)

protected int findTokenStart(
int)

public boolean hasNext()

protected boolean isHttpSeparator(
char)

protected boolean isTokenChar(
char)

protected boolean isTokenSeparator(
char)

protected boolean isWhitespace(
char)
@dalvik.annotation.Throws (value =Ljava/util/NoSuchElementException;Lorg/apache/http/ParseException; )
public final java.lang.Object next()
@dalvik.annotation.Throws (value =Ljava/util/NoSuchElementException;Lorg/apache/http/ParseException; )
public java.lang.String nextToken()
@dalvik.annotation.Throws (value =Ljava/lang/UnsupportedOperationException; )
public final void remove()

________________CLASS________________


public class org.apache.http.message.BufferedHeader extends java.lang.Object implements org.apache.http.FormattedHeader, java.lang.Cloneable

----------------FIELDS----------------

private final org.apache.http.util.CharArrayBuffer buffer

private final java.lang.String name

private final int valuePos
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public void <init>(
org.apache.http.util.CharArrayBuffer)
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public org.apache.http.util.CharArrayBuffer getBuffer()
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public org.apache.http.HeaderElement[] getElements()

public java.lang.String getName()

public java.lang.String getValue()

public int getValuePos()

public java.lang.String toString()

________________CLASS________________


public class org.apache.http.message.HeaderGroup extends java.lang.Object implements java.lang.Cloneable

----------------FIELDS----------------

private java.util.List headers
----------------METHODS----------------

public void <init>()

public void addHeader(
org.apache.http.Header)

public void clear()
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public boolean containsHeader(
java.lang.String)

public org.apache.http.message.HeaderGroup copy()

public org.apache.http.Header[] getAllHeaders()

public org.apache.http.Header getCondensedHeader(
java.lang.String)

public org.apache.http.Header getFirstHeader(
java.lang.String)

public org.apache.http.Header[] getHeaders(
java.lang.String)

public org.apache.http.Header getLastHeader(
java.lang.String)

public org.apache.http.HeaderIterator iterator()

public org.apache.http.HeaderIterator iterator(
java.lang.String)

public void removeHeader(
org.apache.http.Header)

public void setHeaders(
org.apache.http.Header[])

public void updateHeader(
org.apache.http.Header)

________________CLASS________________


public class org.apache.http.message.ParserCursor extends java.lang.Object

----------------FIELDS----------------

private final int lowerBound

private int pos

private final int upperBound
----------------METHODS----------------

public void <init>(
int
int)

public boolean atEnd()

public int getLowerBound()

public int getPos()

public int getUpperBound()

public java.lang.String toString()

public void updatePos(
int)

________________CLASS________________


public final class org.apache.http.params.BasicHttpParams extends org.apache.http.params.AbstractHttpParams implements java.io.Serializable, java.lang.Cloneable

----------------FIELDS----------------

private static final long serialVersionUID

private java.util.HashMap parameters
----------------METHODS----------------

public void <init>()

public void clear()
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public org.apache.http.params.HttpParams copy()

protected void copyParams(
org.apache.http.params.HttpParams)

public java.lang.Object getParameter(
java.lang.String)

public boolean isParameterSet(
java.lang.String)

public boolean isParameterSetLocally(
java.lang.String)

public boolean removeParameter(
java.lang.String)

public org.apache.http.params.HttpParams setParameter(
java.lang.String
java.lang.Object)

public void setParameters(
java.lang.String[]
java.lang.Object)

________________CLASS________________


public final class org.apache.http.params.DefaultedHttpParams extends org.apache.http.params.AbstractHttpParams

----------------FIELDS----------------

private final org.apache.http.params.HttpParams defaults

private final org.apache.http.params.HttpParams local
----------------METHODS----------------

public void <init>(
org.apache.http.params.HttpParams
org.apache.http.params.HttpParams)

public org.apache.http.params.HttpParams copy()

public org.apache.http.params.HttpParams getDefaults()

public java.lang.Object getParameter(
java.lang.String)

public boolean removeParameter(
java.lang.String)

public org.apache.http.params.HttpParams setParameter(
java.lang.String
java.lang.Object)

________________CLASS________________


public class org.apache.http.params.HttpConnectionParamBean extends org.apache.http.params.HttpAbstractParamBean

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
org.apache.http.params.HttpParams)

public void setConnectionTimeout(
int)

public void setLinger(
int)

public void setSoTimeout(
int)

public void setSocketBufferSize(
int)

public void setStaleCheckingEnabled(
boolean)

public void setTcpNoDelay(
boolean)

________________CLASS________________


public final class org.apache.http.params.HttpConnectionParams extends java.lang.Object implements org.apache.http.params.CoreConnectionPNames

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

public static int getConnectionTimeout(
org.apache.http.params.HttpParams)

public static int getLinger(
org.apache.http.params.HttpParams)

public static int getSoTimeout(
org.apache.http.params.HttpParams)

public static int getSocketBufferSize(
org.apache.http.params.HttpParams)

public static boolean getTcpNoDelay(
org.apache.http.params.HttpParams)

public static boolean isStaleCheckingEnabled(
org.apache.http.params.HttpParams)

public static void setConnectionTimeout(
org.apache.http.params.HttpParams
int)

public static void setLinger(
org.apache.http.params.HttpParams
int)

public static void setSoTimeout(
org.apache.http.params.HttpParams
int)

public static void setSocketBufferSize(
org.apache.http.params.HttpParams
int)

public static void setStaleCheckingEnabled(
org.apache.http.params.HttpParams
boolean)

public static void setTcpNoDelay(
org.apache.http.params.HttpParams
boolean)

________________CLASS________________


public class org.apache.http.params.HttpProtocolParamBean extends org.apache.http.params.HttpAbstractParamBean

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
org.apache.http.params.HttpParams)

public void setContentCharset(
java.lang.String)

public void setHttpElementCharset(
java.lang.String)

public void setUseExpectContinue(
boolean)

public void setUserAgent(
java.lang.String)

public void setVersion(
org.apache.http.HttpVersion)

________________CLASS________________


public final class org.apache.http.params.HttpProtocolParams extends java.lang.Object implements org.apache.http.params.CoreProtocolPNames

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

public static java.lang.String getContentCharset(
org.apache.http.params.HttpParams)

public static java.lang.String getHttpElementCharset(
org.apache.http.params.HttpParams)

public static java.lang.String getUserAgent(
org.apache.http.params.HttpParams)

public static org.apache.http.ProtocolVersion getVersion(
org.apache.http.params.HttpParams)

public static void setContentCharset(
org.apache.http.params.HttpParams
java.lang.String)

public static void setHttpElementCharset(
org.apache.http.params.HttpParams
java.lang.String)

public static void setUseExpectContinue(
org.apache.http.params.HttpParams
boolean)

public static void setUserAgent(
org.apache.http.params.HttpParams
java.lang.String)

public static void setVersion(
org.apache.http.params.HttpParams
org.apache.http.ProtocolVersion)

public static boolean useExpectContinue(
org.apache.http.params.HttpParams)

________________CLASS________________


public abstract interface class org.apache.http.protocol.HttpContext extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String RESERVED_PREFIX
----------------METHODS----------------

public abstract java.lang.Object getAttribute(
java.lang.String)

public abstract java.lang.Object removeAttribute(
java.lang.String)

public abstract void setAttribute(
java.lang.String
java.lang.Object)

________________CLASS________________


public class org.apache.http.protocol.BasicHttpContext extends java.lang.Object implements org.apache.http.protocol.HttpContext

----------------FIELDS----------------

private java.util.Map map

private final org.apache.http.protocol.HttpContext parentContext
----------------METHODS----------------

public void <init>()

public void <init>(
org.apache.http.protocol.HttpContext)

public java.lang.Object getAttribute(
java.lang.String)

public java.lang.Object removeAttribute(
java.lang.String)

public void setAttribute(
java.lang.String
java.lang.Object)

________________CLASS________________


public abstract interface class org.apache.http.protocol.HttpProcessor extends java.lang.Object implements org.apache.http.HttpRequestInterceptor, org.apache.http.HttpResponseInterceptor

----------------FIELDS----------------
----------------METHODS----------------

________________CLASS________________


public abstract interface class org.apache.http.protocol.HttpRequestInterceptorList extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void addRequestInterceptor(
org.apache.http.HttpRequestInterceptor)

public abstract void addRequestInterceptor(
org.apache.http.HttpRequestInterceptor
int)

public abstract void clearRequestInterceptors()

public abstract org.apache.http.HttpRequestInterceptor getRequestInterceptor(
int)

public abstract int getRequestInterceptorCount()

public abstract void removeRequestInterceptorByClass(
java.lang.Class)

public abstract void setInterceptors(
java.util.List)

________________CLASS________________


public abstract interface class org.apache.http.protocol.HttpResponseInterceptorList extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract void addResponseInterceptor(
org.apache.http.HttpResponseInterceptor)

public abstract void addResponseInterceptor(
org.apache.http.HttpResponseInterceptor
int)

public abstract void clearResponseInterceptors()

public abstract org.apache.http.HttpResponseInterceptor getResponseInterceptor(
int)

public abstract int getResponseInterceptorCount()

public abstract void removeResponseInterceptorByClass(
java.lang.Class)

public abstract void setInterceptors(
java.util.List)

________________CLASS________________


public final class org.apache.http.protocol.BasicHttpProcessor extends java.lang.Object implements org.apache.http.protocol.HttpProcessor, org.apache.http.protocol.HttpRequestInterceptorList, org.apache.http.protocol.HttpResponseInterceptorList, java.lang.Cloneable

----------------FIELDS----------------

protected java.util.List requestInterceptors

protected java.util.List responseInterceptors
----------------METHODS----------------

public void <init>()

public final void addInterceptor(
org.apache.http.HttpRequestInterceptor)

public final void addInterceptor(
org.apache.http.HttpRequestInterceptor
int)

public final void addInterceptor(
org.apache.http.HttpResponseInterceptor)

public final void addInterceptor(
org.apache.http.HttpResponseInterceptor
int)

public void addRequestInterceptor(
org.apache.http.HttpRequestInterceptor)

public void addRequestInterceptor(
org.apache.http.HttpRequestInterceptor
int)

public void addResponseInterceptor(
org.apache.http.HttpResponseInterceptor)

public void addResponseInterceptor(
org.apache.http.HttpResponseInterceptor
int)

public void clearInterceptors()

public void clearRequestInterceptors()

public void clearResponseInterceptors()
@dalvik.annotation.Throws (value =Ljava/lang/CloneNotSupportedException; )
public java.lang.Object clone()

public org.apache.http.protocol.BasicHttpProcessor copy()

protected void copyInterceptors(
org.apache.http.protocol.BasicHttpProcessor)

public org.apache.http.HttpRequestInterceptor getRequestInterceptor(
int)

public int getRequestInterceptorCount()

public org.apache.http.HttpResponseInterceptor getResponseInterceptor(
int)

public int getResponseInterceptorCount()
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/HttpException; )
public void process(
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/HttpException; )
public void process(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

public void removeRequestInterceptorByClass(
java.lang.Class)

public void removeResponseInterceptorByClass(
java.lang.Class)

public void setInterceptors(
java.util.List)

________________CLASS________________


public final class org.apache.http.protocol.DefaultedHttpContext extends java.lang.Object implements org.apache.http.protocol.HttpContext

----------------FIELDS----------------

private final org.apache.http.protocol.HttpContext defaults

private final org.apache.http.protocol.HttpContext local
----------------METHODS----------------

public void <init>(
org.apache.http.protocol.HttpContext
org.apache.http.protocol.HttpContext)

public java.lang.Object getAttribute(
java.lang.String)

public org.apache.http.protocol.HttpContext getDefaults()

public java.lang.Object removeAttribute(
java.lang.String)

public void setAttribute(
java.lang.String
java.lang.Object)

________________CLASS________________


public abstract interface class org.apache.http.protocol.ExecutionContext extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String HTTP_CONNECTION

public static final java.lang.String HTTP_PROXY_HOST

public static final java.lang.String HTTP_REQUEST

public static final java.lang.String HTTP_REQ_SENT

public static final java.lang.String HTTP_RESPONSE

public static final java.lang.String HTTP_TARGET_HOST
----------------METHODS----------------

________________CLASS________________


public final class org.apache.http.protocol.HTTP extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String ASCII

public static final java.lang.String CHARSET_PARAM

public static final java.lang.String CHUNK_CODING

public static final java.lang.String CONN_CLOSE

public static final java.lang.String CONN_DIRECTIVE

public static final java.lang.String CONN_KEEP_ALIVE

public static final java.lang.String CONTENT_ENCODING

public static final java.lang.String CONTENT_LEN

public static final java.lang.String CONTENT_TYPE

public static final int CR

public static final java.lang.String DATE_HEADER

public static final java.lang.String DEFAULT_CONTENT_CHARSET

public static final java.lang.String DEFAULT_CONTENT_TYPE

public static final java.lang.String DEFAULT_PROTOCOL_CHARSET

public static final java.lang.String EXPECT_CONTINUE

public static final java.lang.String EXPECT_DIRECTIVE

public static final int HT

public static final java.lang.String IDENTITY_CODING

public static final java.lang.String ISO_8859_1

public static final int LF

public static final java.lang.String OCTET_STREAM_TYPE

public static final java.lang.String PLAIN_TEXT_TYPE

public static final java.lang.String SERVER_HEADER

public static final int SP

public static final java.lang.String TARGET_HOST

public static final java.lang.String TRANSFER_ENCODING

public static final java.lang.String USER_AGENT

public static final java.lang.String US_ASCII

public static final java.lang.String UTF_16

public static final java.lang.String UTF_8
----------------METHODS----------------

private void <init>()

public static boolean isWhitespace(
char)

________________CLASS________________


public class org.apache.http.protocol.HttpDateGenerator extends java.lang.Object

----------------FIELDS----------------

public static final java.util.TimeZone GMT

public static final java.lang.String PATTERN_RFC1123

private long dateAsLong

private java.lang.String dateAsText

private final java.text.DateFormat dateformat
----------------METHODS----------------

static void <clinit>()

public void <init>()

public java.lang.String getCurrentDate()

________________CLASS________________


public abstract interface class org.apache.http.protocol.HttpExpectationVerifier extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException; )
public abstract void verify(
org.apache.http.HttpRequest
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.protocol.HttpRequestExecutor extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()

protected boolean canResponseHaveBody(
org.apache.http.HttpRequest
org.apache.http.HttpResponse)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
protected org.apache.http.HttpResponse doReceiveResponse(
org.apache.http.HttpRequest
org.apache.http.HttpClientConnection
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/HttpException; )
protected org.apache.http.HttpResponse doSendRequest(
org.apache.http.HttpRequest
org.apache.http.HttpClientConnection
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/HttpException; )
public org.apache.http.HttpResponse execute(
org.apache.http.HttpRequest
org.apache.http.HttpClientConnection
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void postProcess(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpProcessor
org.apache.http.protocol.HttpContext)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void preProcess(
org.apache.http.HttpRequest
org.apache.http.protocol.HttpProcessor
org.apache.http.protocol.HttpContext)

________________CLASS________________


public abstract interface class org.apache.http.protocol.HttpRequestHandler extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public abstract void handle(
org.apache.http.HttpRequest
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public abstract interface class org.apache.http.protocol.HttpRequestHandlerResolver extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

public abstract org.apache.http.protocol.HttpRequestHandler lookup(
java.lang.String)

________________CLASS________________


public class org.apache.http.protocol.HttpRequestHandlerRegistry extends java.lang.Object implements org.apache.http.protocol.HttpRequestHandlerResolver

----------------FIELDS----------------

private final org.apache.http.protocol.UriPatternMatcher matcher
----------------METHODS----------------

public void <init>()

public org.apache.http.protocol.HttpRequestHandler lookup(
java.lang.String)

protected boolean matchUriRequestPattern(
java.lang.String
java.lang.String)

public void register(
java.lang.String
org.apache.http.protocol.HttpRequestHandler)

public void setHandlers(
java.util.Map)

public void unregister(
java.lang.String)

________________CLASS________________


public class org.apache.http.protocol.HttpService extends java.lang.Object

----------------FIELDS----------------

private org.apache.http.ConnectionReuseStrategy connStrategy

private org.apache.http.protocol.HttpExpectationVerifier expectationVerifier

private org.apache.http.protocol.HttpRequestHandlerResolver handlerResolver

private org.apache.http.params.HttpParams params

private org.apache.http.protocol.HttpProcessor processor

private org.apache.http.HttpResponseFactory responseFactory
----------------METHODS----------------

public void <init>(
org.apache.http.protocol.HttpProcessor
org.apache.http.ConnectionReuseStrategy
org.apache.http.HttpResponseFactory)
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
protected void doService(
org.apache.http.HttpRequest
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

public org.apache.http.params.HttpParams getParams()

protected void handleException(
org.apache.http.HttpException
org.apache.http.HttpResponse)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/HttpException; )
public void handleRequest(
org.apache.http.HttpServerConnection
org.apache.http.protocol.HttpContext)

public void setConnReuseStrategy(
org.apache.http.ConnectionReuseStrategy)

public void setExpectationVerifier(
org.apache.http.protocol.HttpExpectationVerifier)

public void setHandlerResolver(
org.apache.http.protocol.HttpRequestHandlerResolver)

public void setHttpProcessor(
org.apache.http.protocol.HttpProcessor)

public void setParams(
org.apache.http.params.HttpParams)

public void setResponseFactory(
org.apache.http.HttpResponseFactory)

________________CLASS________________


public class org.apache.http.protocol.RequestConnControl extends java.lang.Object implements org.apache.http.HttpRequestInterceptor

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void process(
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.protocol.RequestContent extends java.lang.Object implements org.apache.http.HttpRequestInterceptor

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void process(
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.protocol.RequestDate extends java.lang.Object implements org.apache.http.HttpRequestInterceptor

----------------FIELDS----------------

private static final org.apache.http.protocol.HttpDateGenerator DATE_GENERATOR
----------------METHODS----------------

static void <clinit>()

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void process(
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.protocol.RequestExpectContinue extends java.lang.Object implements org.apache.http.HttpRequestInterceptor

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void process(
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.protocol.RequestTargetHost extends java.lang.Object implements org.apache.http.HttpRequestInterceptor

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void process(
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.protocol.RequestUserAgent extends java.lang.Object implements org.apache.http.HttpRequestInterceptor

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void process(
org.apache.http.HttpRequest
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.protocol.ResponseConnControl extends java.lang.Object implements org.apache.http.HttpResponseInterceptor

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void process(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.protocol.ResponseContent extends java.lang.Object implements org.apache.http.HttpResponseInterceptor

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void process(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.protocol.ResponseDate extends java.lang.Object implements org.apache.http.HttpResponseInterceptor

----------------FIELDS----------------

private static final org.apache.http.protocol.HttpDateGenerator DATE_GENERATOR
----------------METHODS----------------

static void <clinit>()

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void process(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.protocol.ResponseServer extends java.lang.Object implements org.apache.http.HttpResponseInterceptor

----------------FIELDS----------------
----------------METHODS----------------

public void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/HttpException;Ljava/io/IOException; )
public void process(
org.apache.http.HttpResponse
org.apache.http.protocol.HttpContext)

________________CLASS________________


public class org.apache.http.protocol.SyncBasicHttpContext extends org.apache.http.protocol.BasicHttpContext

----------------FIELDS----------------
----------------METHODS----------------

public void <init>(
org.apache.http.protocol.HttpContext)

public java.lang.Object getAttribute(
java.lang.String)

public java.lang.Object removeAttribute(
java.lang.String)

public void setAttribute(
java.lang.String
java.lang.Object)

________________CLASS________________


public class org.apache.http.protocol.UriPatternMatcher extends java.lang.Object

----------------FIELDS----------------

private final java.util.Map handlerMap
----------------METHODS----------------

public void <init>()

public java.lang.Object lookup(
java.lang.String)

protected boolean matchUriRequestPattern(
java.lang.String
java.lang.String)

public void register(
java.lang.String
java.lang.Object)

public void setHandlers(
java.util.Map)

public void unregister(
java.lang.String)

________________CLASS________________


public final class org.apache.http.util.ByteArrayBuffer extends java.lang.Object

----------------FIELDS----------------

private byte[] buffer

private int len
----------------METHODS----------------

public void <init>(
int)

private void expand(
int)

public void append(
int)

public void append(
org.apache.http.util.CharArrayBuffer
int
int)

public void append(
byte[]
int
int)

public void append(
char[]
int
int)

public byte[] buffer()

public int byteAt(
int)

public int capacity()

public void clear()

public boolean isEmpty()

public boolean isFull()

public int length()

public void setLength(
int)

public byte[] toByteArray()

________________CLASS________________


public final class org.apache.http.util.CharArrayBuffer extends java.lang.Object

----------------FIELDS----------------

private char[] buffer

private int len
----------------METHODS----------------

public void <init>(
int)

private void expand(
int)

public void append(
char)

public void append(
java.lang.Object)

public void append(
java.lang.String)

public void append(
org.apache.http.util.ByteArrayBuffer
int
int)

public void append(
org.apache.http.util.CharArrayBuffer)

public void append(
org.apache.http.util.CharArrayBuffer
int
int)

public void append(
byte[]
int
int)

public void append(
char[]
int
int)

public char[] buffer()

public int capacity()

public char charAt(
int)

public void clear()

public void ensureCapacity(
int)

public int indexOf(
int)

public int indexOf(
int
int
int)

public boolean isEmpty()

public boolean isFull()

public int length()

public void setLength(
int)

public java.lang.String substring(
int
int)

public java.lang.String substringTrimmed(
int
int)

public char[] toCharArray()

public java.lang.String toString()

________________CLASS________________


public final class org.apache.http.util.EncodingUtils extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()

public static byte[] getAsciiBytes(
java.lang.String)

public static java.lang.String getAsciiString(
byte[])

public static java.lang.String getAsciiString(
byte[]
int
int)

public static byte[] getBytes(
java.lang.String
java.lang.String)

public static java.lang.String getString(
byte[]
int
int
java.lang.String)

public static java.lang.String getString(
byte[]
java.lang.String)

________________CLASS________________


public final class org.apache.http.util.EntityUtils extends java.lang.Object

----------------FIELDS----------------
----------------METHODS----------------

private void <init>()
@dalvik.annotation.Throws (value =Lorg/apache/http/ParseException; )
public static java.lang.String getContentCharSet(
org.apache.http.HttpEntity)
@dalvik.annotation.Throws (value =Ljava/io/IOException; )
public static byte[] toByteArray(
org.apache.http.HttpEntity)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/ParseException; )
public static java.lang.String toString(
org.apache.http.HttpEntity)
@dalvik.annotation.Throws (value =Ljava/io/IOException;Lorg/apache/http/ParseException; )
public static java.lang.String toString(
org.apache.http.HttpEntity
java.lang.String)

________________CLASS________________


public final class org.apache.http.util.ExceptionUtils extends java.lang.Object

----------------FIELDS----------------

private static final java.lang.reflect.Method INIT_CAUSE_METHOD
----------------METHODS----------------

static void <clinit>()

private void <init>()

private static java.lang.reflect.Method getInitCauseMethod()

public static void initCause(
java.lang.Throwable
java.lang.Throwable)

________________CLASS________________


public final class org.apache.http.util.LangUtils extends java.lang.Object

----------------FIELDS----------------

public static final int HASH_OFFSET

public static final int HASH_SEED
----------------METHODS----------------

private void <init>()

public static boolean equals(
java.lang.Object
java.lang.Object)

public static boolean equals(
java.lang.Object[]
java.lang.Object[])

public static int hashCode(
int
int)

public static int hashCode(
int
java.lang.Object)

public static int hashCode(
int
boolean)

________________CLASS________________


public class org.apache.http.util.VersionInfo extends java.lang.Object

----------------FIELDS----------------

public static final java.lang.String PROPERTY_MODULE

public static final java.lang.String PROPERTY_RELEASE

public static final java.lang.String PROPERTY_TIMESTAMP

public static final java.lang.String UNAVAILABLE

public static final java.lang.String VERSION_PROPERTY_FILE

private final java.lang.String infoClassloader

private final java.lang.String infoModule

private final java.lang.String infoPackage

private final java.lang.String infoRelease

private final java.lang.String infoTimestamp
----------------METHODS----------------

protected void <init>(
java.lang.String
java.lang.String
java.lang.String
java.lang.String
java.lang.String)

protected static final org.apache.http.util.VersionInfo fromMap(
java.lang.String
java.util.Map
java.lang.ClassLoader)

public static final org.apache.http.util.VersionInfo loadVersionInfo(
java.lang.String
java.lang.ClassLoader)

public static final org.apache.http.util.VersionInfo[] loadVersionInfo(
java.lang.String[]
java.lang.ClassLoader)

public final java.lang.String getClassloader()

public final java.lang.String getModule()

public final java.lang.String getPackage()

public final java.lang.String getRelease()

public final java.lang.String getTimestamp()

public java.lang.String toString()
