summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-03 14:04:24 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-03 14:04:24 -0800
commit076357b8567458d4b6dfdcf839ef751634cd2bfb (patch)
treeefbb2fd6f1dc67d2d606382fc3b82983e7cb2e1f
parent3dec7d563a2f3e1eb967ce2054a00b6620e3558c (diff)
downloadframeworks_base-076357b8567458d4b6dfdcf839ef751634cd2bfb.zip
frameworks_base-076357b8567458d4b6dfdcf839ef751634cd2bfb.tar.gz
frameworks_base-076357b8567458d4b6dfdcf839ef751634cd2bfb.tar.bz2
auto import from //depot/cupcake/@132589
-rw-r--r--api/current.xml1710
-rw-r--r--camera/libcameraservice/CameraHardwareStub.cpp37
-rw-r--r--camera/libcameraservice/CameraHardwareStub.h4
-rw-r--r--camera/libcameraservice/CameraService.cpp48
-rw-r--r--camera/libcameraservice/CameraService.h3
-rw-r--r--core/java/android/app/ApplicationContext.java39
-rw-r--r--core/java/android/app/ExpandableListActivity.java23
-rw-r--r--core/java/android/app/IntentService.java74
-rw-r--r--core/java/android/app/ListActivity.java26
-rw-r--r--core/java/android/app/NotificationManager.java4
-rw-r--r--core/java/android/app/SearchDialog.java2
-rw-r--r--core/java/android/app/SearchManager.java8
-rw-r--r--core/java/android/bluetooth/BluetoothDevice.java4
-rw-r--r--core/java/android/content/ContentProvider.java75
-rw-r--r--core/java/android/content/ContentProviderNative.java43
-rw-r--r--core/java/android/content/ContentResolver.java320
-rw-r--r--core/java/android/content/ContentServiceNative.java7
-rw-r--r--core/java/android/content/IContentProvider.java4
-rw-r--r--core/java/android/content/Intent.java8
-rw-r--r--core/java/android/content/pm/PackageManager.java20
-rw-r--r--core/java/android/content/res/AssetFileDescriptor.java271
-rw-r--r--core/java/android/content/res/ColorStateList.java19
-rw-r--r--core/java/android/content/res/Resources.java180
-rw-r--r--core/java/android/content/res/StringBlock.java62
-rw-r--r--core/java/android/content/res/TypedArray.java28
-rw-r--r--core/java/android/database/sqlite/SQLiteDatabase.java4
-rw-r--r--core/java/android/database/sqlite/SQLiteStatement.java22
-rw-r--r--core/java/android/gadget/GadgetHost.java12
-rw-r--r--core/java/android/gadget/GadgetHostView.java249
-rw-r--r--core/java/android/gadget/GadgetManager.java16
-rw-r--r--core/java/android/hardware/Camera.java1
-rw-r--r--core/java/android/inputmethodservice/ExtractEditText.java7
-rw-r--r--core/java/android/inputmethodservice/InputMethodService.java266
-rwxr-xr-xcore/java/android/inputmethodservice/KeyboardView.java22
-rw-r--r--core/java/android/net/SSLCertificateSocketFactory.java72
-rw-r--r--core/java/android/net/http/AndroidHttpClient.java46
-rw-r--r--core/java/android/net/http/CertificateChainValidator.java154
-rw-r--r--core/java/android/os/BatteryStats.java137
-rw-r--r--core/java/android/os/ParcelFileDescriptor.java18
-rw-r--r--core/java/android/pim/ICalendar.java15
-rw-r--r--core/java/android/provider/Checkin.java10
-rw-r--r--core/java/android/provider/Im.java33
-rw-r--r--core/java/android/provider/Settings.java49
-rw-r--r--core/java/android/server/BluetoothA2dpService.java82
-rw-r--r--core/java/android/server/BluetoothDeviceService.java24
-rw-r--r--core/java/android/server/search/SearchableInfo.java18
-rw-r--r--core/java/android/speech/srec/package.html1
-rw-r--r--core/java/android/text/InputType.java5
-rw-r--r--core/java/android/text/Styled.java249
-rw-r--r--core/java/android/text/format/DateUtils.java216
-rw-r--r--core/java/android/text/method/NumberKeyListener.java5
-rw-r--r--core/java/android/view/GestureDetector.java91
-rw-r--r--core/java/android/view/KeyEvent.java6
-rw-r--r--core/java/android/view/View.java47
-rw-r--r--core/java/android/view/ViewConfiguration.java18
-rw-r--r--core/java/android/view/ViewRoot.java39
-rw-r--r--core/java/android/view/inputmethod/BaseInputConnection.java7
-rw-r--r--core/java/android/view/inputmethod/EditorInfo.java106
-rw-r--r--core/java/android/view/inputmethod/InputConnection.java14
-rw-r--r--core/java/android/view/inputmethod/InputMethodManager.java18
-rw-r--r--core/java/android/webkit/CallbackProxy.java8
-rw-r--r--core/java/android/webkit/TextDialog.java103
-rw-r--r--core/java/android/webkit/WebView.java100
-rw-r--r--core/java/android/webkit/WebViewCore.java4
-rw-r--r--core/java/android/widget/AbsListView.java29
-rw-r--r--core/java/android/widget/AbsSeekBar.java45
-rw-r--r--core/java/android/widget/AnalogClock.java17
-rw-r--r--core/java/android/widget/AutoCompleteTextView.java103
-rw-r--r--core/java/android/widget/BaseAdapter.java4
-rw-r--r--core/java/android/widget/Chronometer.java19
-rw-r--r--core/java/android/widget/CursorAdapter.java20
-rw-r--r--core/java/android/widget/Filter.java14
-rw-r--r--core/java/android/widget/GridView.java29
-rw-r--r--core/java/android/widget/HorizontalScrollView.java2
-rw-r--r--core/java/android/widget/ImageView.java2
-rw-r--r--core/java/android/widget/ListView.java85
-rw-r--r--core/java/android/widget/MultiAutoCompleteTextView.java4
-rw-r--r--core/java/android/widget/PopupWindow.java63
-rw-r--r--core/java/android/widget/ProgressBar.java1
-rw-r--r--core/java/android/widget/ResourceCursorAdapter.java22
-rw-r--r--core/java/android/widget/TextView.java355
-rw-r--r--core/java/android/widget/ZoomButtonsController.java478
-rw-r--r--core/java/android/widget/ZoomRing.java418
-rw-r--r--core/java/android/widget/ZoomRingController.java462
-rw-r--r--core/java/com/android/internal/app/IBatteryStats.aidl2
-rw-r--r--core/java/com/android/internal/gadget/IGadgetService.aidl1
-rw-r--r--core/java/com/android/internal/logging/AndroidConfig.java11
-rw-r--r--core/java/com/android/internal/logging/AndroidHandler.java69
-rw-r--r--core/java/com/android/internal/net/DbSSLSessionCache.java269
-rw-r--r--core/java/com/android/internal/net/SSLSessionCache.java101
-rw-r--r--core/java/com/android/internal/os/BatteryStatsImpl.java323
-rw-r--r--core/java/com/android/internal/os/ZygoteInit.java83
-rw-r--r--core/java/com/android/internal/view/IInputConnectionWrapper.java16
-rw-r--r--core/java/com/android/internal/view/IInputContext.aidl2
-rw-r--r--core/java/com/android/internal/view/InputConnectionWrapper.java9
-rw-r--r--core/java/com/android/internal/view/menu/ExpandedMenuView.java5
-rw-r--r--core/java/com/android/internal/widget/EditableInputConnection.java15
-rw-r--r--core/java/com/android/internal/widget/TextProgressBar.java4
-rw-r--r--core/java/com/google/android/gdata/client/AndroidGDataClient.java21
-rw-r--r--core/java/com/google/android/net/GoogleHttpClient.java38
-rw-r--r--core/jni/android_database_SQLiteDatabase.cpp8
-rw-r--r--core/jni/android_hardware_Camera.cpp286
-rw-r--r--core/jni/android_media_AudioTrack.cpp34
-rw-r--r--core/jni/android_os_ParcelFileDescriptor.cpp30
-rw-r--r--core/jni/android_server_BluetoothEventLoop.cpp9
-rw-r--r--core/jni/android_util_Binder.cpp1
-rw-r--r--core/jni/server/com_android_server_AlarmManagerService.cpp7
-rw-r--r--core/res/AndroidManifest.xml2
-rw-r--r--core/res/res/drawable-land/title_bar.9.pngbin0 -> 5751 bytes
-rw-r--r--core/res/res/drawable/activity_title_bar.9.pngbin205 -> 0 bytes
-rw-r--r--core/res/res/drawable/btn_check_off.pngbin1172 -> 1158 bytes
-rw-r--r--core/res/res/drawable/btn_check_off_disable_focused.pngbin1073 -> 1062 bytes
-rw-r--r--core/res/res/drawable/btn_check_off_selected.pngbin1598 -> 1587 bytes
-rw-r--r--core/res/res/drawable/btn_check_on_disable_focused.pngbin1138 -> 1132 bytes
-rw-r--r--core/res/res/drawable/btn_default_normal.9.pngbin763 -> 819 bytes
-rw-r--r--core/res/res/drawable/btn_default_normal_disable.9.pngbin474 -> 507 bytes
-rw-r--r--core/res/res/drawable/btn_default_normal_disable_focused.9.pngbin673 -> 697 bytes
-rw-r--r--core/res/res/drawable/btn_default_pressed.9.pngbin1083 -> 1245 bytes
-rw-r--r--core/res/res/drawable/btn_default_selected.9.pngbin1099 -> 1294 bytes
-rw-r--r--core/res/res/drawable/btn_default_small_normal.9.pngbin679 -> 789 bytes
-rw-r--r--core/res/res/drawable/btn_default_small_normal_disable.9.pngbin456 -> 488 bytes
-rw-r--r--core/res/res/drawable/btn_default_small_normal_disable_focused.9.pngbin648 -> 688 bytes
-rw-r--r--core/res/res/drawable/btn_default_small_pressed.9.pngbin936 -> 1099 bytes
-rw-r--r--core/res/res/drawable/btn_default_small_selected.9.pngbin964 -> 1105 bytes
-rw-r--r--core/res/res/drawable/btn_radio_on.pngbin1692 -> 1673 bytes
-rw-r--r--core/res/res/drawable/btn_rating_star_off_normal.pngbin2760 -> 3036 bytes
-rw-r--r--core/res/res/drawable/btn_rating_star_off_pressed.pngbin3613 -> 3882 bytes
-rw-r--r--core/res/res/drawable/btn_rating_star_off_selected.pngbin3622 -> 3870 bytes
-rw-r--r--core/res/res/drawable/btn_rating_star_on_normal.pngbin3290 -> 3469 bytes
-rw-r--r--core/res/res/drawable/btn_rating_star_on_pressed.pngbin3756 -> 3905 bytes
-rw-r--r--core/res/res/drawable/btn_rating_star_on_selected.pngbin3768 -> 3950 bytes
-rwxr-xr-xcore/res/res/drawable/btn_star_big_off.pngbin1316 -> 1460 bytes
-rwxr-xr-xcore/res/res/drawable/btn_star_big_off_pressed.pngbin1507 -> 4401 bytes
-rwxr-xr-xcore/res/res/drawable/btn_star_big_off_selected.pngbin1471 -> 4407 bytes
-rwxr-xr-xcore/res/res/drawable/btn_star_big_on.pngbin1521 -> 4449 bytes
-rwxr-xr-xcore/res/res/drawable/btn_star_big_on_pressed.pngbin1540 -> 4249 bytes
-rwxr-xr-xcore/res/res/drawable/btn_star_big_on_selected.pngbin1456 -> 4232 bytes
-rwxr-xr-xcore/res/res/drawable/ic_lock_airplane_mode.pngbin1119 -> 0 bytes
-rwxr-xr-xcore/res/res/drawable/ic_lock_airplane_mode_off.pngbin1570 -> 0 bytes
-rw-r--r--core/res/res/drawable/ic_lock_power_off.pngbin1709 -> 1713 bytes
-rw-r--r--core/res/res/drawable/ic_lock_silent_mode.pngbin1362 -> 1362 bytes
-rw-r--r--core/res/res/drawable/ic_lock_silent_mode_off.pngbin1554 -> 1555 bytes
-rw-r--r--core/res/res/drawable/keyboard_accessory_bg_landscape.9.pngbin197 -> 0 bytes
-rw-r--r--core/res/res/drawable/textfield_default.9.pngbin758 -> 871 bytes
-rw-r--r--core/res/res/drawable/textfield_disabled.9.pngbin545 -> 606 bytes
-rw-r--r--core/res/res/drawable/textfield_disabled_selected.9.pngbin570 -> 751 bytes
-rw-r--r--core/res/res/drawable/textfield_pressed.9.pngbin1040 -> 1145 bytes
-rw-r--r--core/res/res/drawable/textfield_selected.9.pngbin790 -> 886 bytes
-rwxr-xr-xcore/res/res/drawable/timepicker_down_disabled.9.pngbin444 -> 956 bytes
-rwxr-xr-xcore/res/res/drawable/timepicker_down_disabled_focused.9.pngbin611 -> 938 bytes
-rwxr-xr-xcore/res/res/drawable/timepicker_down_normal.9.pngbin806 -> 884 bytes
-rwxr-xr-xcore/res/res/drawable/timepicker_down_pressed.9.pngbin1257 -> 1482 bytes
-rwxr-xr-xcore/res/res/drawable/timepicker_down_selected.9.pngbin1292 -> 1459 bytes
-rwxr-xr-xcore/res/res/drawable/timepicker_input_disabled.9.pngbin280 -> 484 bytes
-rwxr-xr-xcore/res/res/drawable/timepicker_input_normal.9.pngbin582 -> 567 bytes
-rwxr-xr-xcore/res/res/drawable/timepicker_input_pressed.9.pngbin604 -> 593 bytes
-rwxr-xr-xcore/res/res/drawable/timepicker_input_selected.9.pngbin517 -> 578 bytes
-rwxr-xr-xcore/res/res/drawable/timepicker_up_disabled.9.pngbin512 -> 1278 bytes
-rwxr-xr-xcore/res/res/drawable/timepicker_up_disabled_focused.9.pngbin724 -> 1258 bytes
-rwxr-xr-xcore/res/res/drawable/timepicker_up_normal.9.pngbin1058 -> 1173 bytes
-rwxr-xr-xcore/res/res/drawable/timepicker_up_pressed.9.pngbin1500 -> 1864 bytes
-rwxr-xr-xcore/res/res/drawable/timepicker_up_selected.9.pngbin1519 -> 1847 bytes
-rw-r--r--core/res/res/drawable/title_bar.9.pngbin0 -> 4121 bytes
-rw-r--r--core/res/res/drawable/title_bar.xml20
-rw-r--r--core/res/res/drawable/zoom_ring_overview_tab.9.pngbin1792 -> 845 bytes
-rw-r--r--core/res/res/drawable/zoom_ring_thumb_minus.pngbin201 -> 0 bytes
-rw-r--r--core/res/res/drawable/zoom_ring_thumb_minus_arrow.pngbin1941 -> 3157 bytes
-rw-r--r--core/res/res/drawable/zoom_ring_thumb_plus.pngbin317 -> 0 bytes
-rw-r--r--core/res/res/drawable/zoom_ring_thumb_plus_arrow.pngbin2272 -> 3231 bytes
-rw-r--r--core/res/res/drawable/zoom_ring_track.pngbin17749 -> 16980 bytes
-rw-r--r--core/res/res/drawable/zoom_ring_track_absolute.pngbin18612 -> 19660 bytes
-rw-r--r--core/res/res/layout/alert_dialog_simple_text.xml26
-rw-r--r--core/res/res/layout/global_actions_item.xml60
-rw-r--r--core/res/res/layout/input_method_extract_view.xml43
-rw-r--r--core/res/res/layout/keyguard_screen_glogin_unlock.xml2
-rw-r--r--core/res/res/layout/keyguard_screen_lock.xml3
-rw-r--r--core/res/res/layout/keyguard_screen_sim_pin_landscape.xml2
-rw-r--r--core/res/res/layout/keyguard_screen_sim_pin_portrait.xml2
-rw-r--r--core/res/res/layout/keyguard_screen_unlock_landscape.xml8
-rw-r--r--core/res/res/layout/keyguard_screen_unlock_portrait.xml21
-rw-r--r--core/res/res/layout/search_bar.xml7
-rw-r--r--core/res/res/layout/select_dialog_item.xml3
-rw-r--r--core/res/res/layout/status_bar_latest_event_content.xml4
-rw-r--r--core/res/res/values-cs/strings.xml61
-rw-r--r--core/res/res/values-de/strings.xml47
-rw-r--r--core/res/res/values-es/strings.xml137
-rw-r--r--core/res/res/values-fr/strings.xml357
-rw-r--r--core/res/res/values-it/strings.xml281
-rw-r--r--core/res/res/values-ja-rJP/arrays.xml32
-rw-r--r--core/res/res/values-ja/strings.xml47
-rw-r--r--core/res/res/values-ko/strings.xml47
-rw-r--r--core/res/res/values-nb/strings.xml69
-rw-r--r--core/res/res/values-nl/strings.xml79
-rw-r--r--core/res/res/values-pl/strings.xml109
-rw-r--r--core/res/res/values-ru/strings.xml47
-rw-r--r--core/res/res/values-zh-rCN/strings.xml47
-rw-r--r--core/res/res/values-zh-rTW/strings.xml47
-rw-r--r--core/res/res/values/arrays.xml159
-rw-r--r--core/res/res/values/attrs.xml108
-rw-r--r--core/res/res/values/public.xml7
-rw-r--r--core/res/res/values/strings.xml35
-rw-r--r--core/res/res/values/styles.xml3
-rw-r--r--docs/html/app.yaml29
-rw-r--r--docs/html/community/index.jd4
-rw-r--r--docs/html/guide/publishing/app-signing.jd2
-rw-r--r--docs/html/guide/publishing/preparing.jd36
-rw-r--r--docs/html/guide/publishing/publishing.jd2
-rw-r--r--docs/html/guide/topics/manifest/manifest-intro.jd2
-rw-r--r--docs/html/guide/topics/ui/themes.jd43
-rw-r--r--docs/html/guide/tutorials/views/hello-autocomplete.jd2
-rw-r--r--docs/html/guide/tutorials/views/hello-formstuff.jd20
-rw-r--r--docs/html/guide/tutorials/views/hello-gridview.jd1
-rw-r--r--docs/html/guide/tutorials/views/hello-mapview.jd34
-rw-r--r--docs/html/sdk/1.0_r1/index.jd81
-rw-r--r--docs/html/sdk/1.0_r1/installing.jd171
-rw-r--r--docs/html/sdk/1.0_r1/upgrading.jd103
-rw-r--r--docs/html/sdk/1.0_r2/index.jd81
-rw-r--r--docs/html/sdk/1.0_r2/installing.jd171
-rw-r--r--docs/html/sdk/1.0_r2/requirements.jd44
-rw-r--r--docs/html/sdk/1.0_r2/upgrading.jd103
-rw-r--r--docs/html/sdk/1.1_r1/index.jd12
-rw-r--r--docs/html/sdk/1.1_r1/installing.jd139
-rw-r--r--docs/html/sdk/sdk_toc.cs44
-rw-r--r--docs/html/search.jd68
-rw-r--r--docs/html/sitemap.txt5444
-rw-r--r--graphics/java/android/graphics/drawable/Drawable.java2
-rw-r--r--graphics/java/android/graphics/drawable/NinePatchDrawable.java81
-rw-r--r--graphics/java/android/graphics/drawable/StateListDrawable.java15
-rw-r--r--include/media/AudioRecord.h9
-rw-r--r--include/media/IMediaRecorder.h2
-rw-r--r--include/media/PVMediaRecorder.h2
-rw-r--r--include/media/mediarecorder.h39
-rw-r--r--include/ui/CameraHardwareInterface.h3
-rw-r--r--include/utils/ResourceTypes.h16
-rw-r--r--libs/audioflinger/A2dpAudioInterface.cpp15
-rw-r--r--libs/audioflinger/A2dpAudioInterface.h1
-rw-r--r--libs/audioflinger/AudioFlinger.cpp17
-rw-r--r--libs/audioflinger/AudioFlinger.h5
-rw-r--r--libs/audioflinger/AudioHardwareGeneric.h2
-rw-r--r--libs/ui/Camera.cpp2
-rw-r--r--libs/utils/Threads.cpp4
-rw-r--r--location/java/com/android/internal/location/CellState.java11
-rw-r--r--location/java/com/android/internal/location/INetworkLocationManager.java2
-rw-r--r--media/java/android/media/AudioRecord.java38
-rw-r--r--media/java/android/media/AudioTrack.java57
-rw-r--r--media/java/android/media/JetPlayer.java11
-rw-r--r--media/java/android/media/MediaMetadataRetriever.java14
-rw-r--r--media/java/android/media/MediaPlayer.java13
-rw-r--r--media/java/android/media/MediaRecorder.java238
-rw-r--r--media/java/android/media/Ringtone.java13
-rw-r--r--media/java/android/media/SoundPool.java7
-rw-r--r--media/jni/android_media_MediaRecorder.cpp153
-rw-r--r--media/libmedia/AudioRecord.cpp25
-rw-r--r--media/libmedia/AudioTrack.cpp13
-rw-r--r--media/libmedia/IMediaRecorder.cpp22
-rw-r--r--media/libmedia/mediarecorder.cpp75
-rw-r--r--media/libmediaplayerservice/MediaPlayerService.cpp110
-rw-r--r--media/libmediaplayerservice/MediaRecorderClient.cpp11
-rw-r--r--media/libmediaplayerservice/MediaRecorderClient.h1
-rwxr-xr-xmedia/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java5
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java12
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioTrackTest.java755
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java475
-rw-r--r--opengl/java/android/opengl/Matrix.java57
-rw-r--r--opengl/java/android/opengl/Visibility.java1
-rw-r--r--opengl/libagl/egl.cpp6
-rw-r--r--opengl/libs/EGL/egl.cpp8
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java32
-rw-r--r--packages/SubscribedFeedsProvider/AndroidManifest.xml5
-rw-r--r--packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsBroadcastReceiver.java41
-rw-r--r--packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsService.java (renamed from packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsIntentService.java)98
-rw-r--r--preloaded-classes2
-rw-r--r--services/java/com/android/server/AlarmManagerService.java89
-rw-r--r--services/java/com/android/server/BatteryService.java116
-rw-r--r--services/java/com/android/server/GadgetService.java15
-rwxr-xr-xservices/java/com/android/server/HardwareService.java2
-rw-r--r--services/java/com/android/server/LocationManagerService.java112
-rw-r--r--services/java/com/android/server/MountService.java9
-rw-r--r--services/java/com/android/server/NotificationManagerService.java13
-rw-r--r--services/java/com/android/server/PackageManagerService.java99
-rw-r--r--services/java/com/android/server/PowerManagerService.java10
-rw-r--r--services/java/com/android/server/SystemServer.java7
-rw-r--r--services/java/com/android/server/TelephonyRegistry.java20
-rw-r--r--services/java/com/android/server/WindowManagerService.java80
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java35
-rw-r--r--services/java/com/android/server/am/BaseErrorDialog.java2
-rw-r--r--services/java/com/android/server/am/BatteryStatsService.java30
-rw-r--r--services/java/com/android/server/status/StatusBarPolicy.java7
-rw-r--r--services/java/com/android/server/status/StatusBarService.java15
-rw-r--r--telephony/java/android/telephony/gsm/SmsMessage.java28
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/DataConnectionTracker.java3
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GSMPhone.java36
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmAlphabet.java4
-rw-r--r--test-runner/android/test/mock/MockContentProvider.java7
-rw-r--r--test-runner/android/test/mock/MockPackageManager.java7
-rwxr-xr-xtests/AndroidTests/src/com/android/unit_tests/AppCacheTest.java12
-rw-r--r--tests/AndroidTests/src/com/android/unit_tests/DbSSLSessionCacheTest.java273
-rw-r--r--tests/CoreTests/android/core/DatabaseSessionCache.java312
-rw-r--r--tests/CoreTests/android/core/SSLPerformanceTest.java432
-rw-r--r--tests/CoreTests/android/core/SSLSocketTest.java243
-rw-r--r--tests/CoreTests/android/location/LocationManagerProximityTest.java49
-rwxr-xr-xtests/CoreTests/run_core_test.sh4
-rwxr-xr-xtests/ImfTest/src/com/android/imftest/samples/InputTypeActivity.java4
-rw-r--r--tests/gadgets/GadgetProviderTest/res/layout/test_gadget.xml7
-rw-r--r--tests/gadgets/GadgetProviderTest/res/xml/gadget_info.xml6
-rw-r--r--tools/aapt/Images.cpp8
-rw-r--r--tools/layoutlib/api/src/com/android/layoutlib/api/ILayoutBridge.java57
-rw-r--r--tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java42
-rw-r--r--tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java21
-rw-r--r--tools/preload/Android.mk14
310 files changed, 4042 insertions, 18101 deletions
diff --git a/api/current.xml b/api/current.xml
index 671ae21..9ccb8f7 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -2836,17 +2836,6 @@
visibility="public"
>
</field>
-<field name="dropDownAnchor"
- type="int"
- transient="false"
- volatile="false"
- value="16843363"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="dropDownHintAppearance"
type="int"
transient="false"
@@ -2891,17 +2880,6 @@
visibility="public"
>
</field>
-<field name="dropDownWidth"
- type="int"
- transient="false"
- volatile="false"
- value="16843362"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="duplicateParentState"
type="int"
transient="false"
@@ -2968,6 +2946,17 @@
visibility="public"
>
</field>
+<field name="editorPrivateContentType"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843299"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
<field name="ellipsize"
type="int"
transient="false"
@@ -3749,39 +3738,6 @@
visibility="public"
>
</field>
-<field name="imeActionId"
- type="int"
- transient="false"
- volatile="false"
- value="16843366"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="imeActionLabel"
- type="int"
- transient="false"
- volatile="false"
- value="16843365"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="imeOptions"
- type="int"
- transient="false"
- volatile="false"
- value="16843364"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="inAnimation"
type="int"
transient="false"
@@ -5663,17 +5619,6 @@
visibility="public"
>
</field>
-<field name="privateImeOptions"
- type="int"
- transient="false"
- volatile="false"
- value="16843299"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="process"
type="int"
transient="false"
@@ -18606,51 +18551,6 @@
>
</method>
</class>
-<class name="IntentService"
- extends="android.app.Service"
- abstract="true"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<constructor name="IntentService"
- type="android.app.IntentService"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="name" type="java.lang.String">
-</parameter>
-</constructor>
-<method name="onBind"
- return="android.os.IBinder"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="intent" type="android.content.Intent">
-</parameter>
-</method>
-<method name="onHandleIntent"
- return="void"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="protected"
->
-<parameter name="intent" type="android.content.Intent">
-</parameter>
-</method>
-</class>
<class name="KeyguardManager"
extends="java.lang.Object"
abstract="false"
@@ -21927,23 +21827,6 @@
visibility="public"
>
</method>
-<method name="openAssetFile"
- return="android.content.res.AssetFileDescriptor"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="uri" type="android.net.Uri">
-</parameter>
-<parameter name="mode" type="java.lang.String">
-</parameter>
-<exception name="FileNotFoundException" type="java.io.FileNotFoundException">
-</exception>
-</method>
<method name="openFile"
return="android.os.ParcelFileDescriptor"
abstract="false"
@@ -22252,23 +22135,6 @@
<parameter name="syncToNetwork" type="boolean">
</parameter>
</method>
-<method name="openAssetFileDescriptor"
- return="android.content.res.AssetFileDescriptor"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="uri" type="android.net.Uri">
-</parameter>
-<parameter name="mode" type="java.lang.String">
-</parameter>
-<exception name="FileNotFoundException" type="java.io.FileNotFoundException">
-</exception>
-</method>
<method name="openFileDescriptor"
return="android.os.ParcelFileDescriptor"
abstract="false"
@@ -22316,23 +22182,6 @@
<exception name="FileNotFoundException" type="java.io.FileNotFoundException">
</exception>
</method>
-<method name="openOutputStream"
- return="java.io.OutputStream"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="uri" type="android.net.Uri">
-</parameter>
-<parameter name="mode" type="java.lang.String">
-</parameter>
-<exception name="FileNotFoundException" type="java.io.FileNotFoundException">
-</exception>
-</method>
<method name="query"
return="android.database.Cursor"
abstract="false"
@@ -27882,17 +27731,6 @@
visibility="public"
>
</field>
-<field name="CATEGORY_INFO"
- type="java.lang.String"
- transient="false"
- volatile="false"
- value="&quot;android.intent.category.INFO&quot;"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="CATEGORY_LAUNCHER"
type="java.lang.String"
transient="false"
@@ -32059,21 +31897,6 @@
<exception name="PackageManager.NameNotFoundException" type="android.content.pm.PackageManager.NameNotFoundException">
</exception>
</method>
-<method name="getLaunchIntentForPackage"
- return="android.content.Intent"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="packageName" type="java.lang.String">
-</parameter>
-<exception name="PackageManager.NameNotFoundException" type="android.content.pm.PackageManager.NameNotFoundException">
-</exception>
-</method>
<method name="getNameForUid"
return="java.lang.String"
abstract="true"
@@ -34155,8 +33978,6 @@
deprecated="not deprecated"
visibility="public"
>
-<implements name="android.os.Parcelable">
-</implements>
<constructor name="AssetFileDescriptor"
type="android.content.res.AssetFileDescriptor"
static="false"
@@ -34184,54 +34005,6 @@
<exception name="IOException" type="java.io.IOException">
</exception>
</method>
-<method name="createInputStream"
- return="java.io.FileInputStream"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</method>
-<method name="createOutputStream"
- return="java.io.FileOutputStream"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</method>
-<method name="describeContents"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="getDeclaredLength"
- return="long"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
<method name="getFileDescriptor"
return="java.io.FileDescriptor"
abstract="false"
@@ -34276,84 +34049,6 @@
visibility="public"
>
</method>
-<method name="writeToParcel"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="out" type="android.os.Parcel">
-</parameter>
-<parameter name="flags" type="int">
-</parameter>
-</method>
-<field name="CREATOR"
- type="android.os.Parcelable.Creator"
- transient="false"
- volatile="false"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="UNKNOWN_LENGTH"
- type="long"
- transient="false"
- volatile="false"
- value="-1L"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-</class>
-<class name="AssetFileDescriptor.AutoCloseInputStream"
- extends="android.os.ParcelFileDescriptor.AutoCloseInputStream"
- abstract="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<constructor name="AssetFileDescriptor.AutoCloseInputStream"
- type="android.content.res.AssetFileDescriptor.AutoCloseInputStream"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="fd" type="android.content.res.AssetFileDescriptor">
-</parameter>
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</constructor>
-</class>
-<class name="AssetFileDescriptor.AutoCloseOutputStream"
- extends="android.os.ParcelFileDescriptor.AutoCloseOutputStream"
- abstract="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<constructor name="AssetFileDescriptor.AutoCloseOutputStream"
- type="android.content.res.AssetFileDescriptor.AutoCloseOutputStream"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="fd" type="android.content.res.AssetFileDescriptor">
-</parameter>
-<exception name="IOException" type="java.io.IOException">
-</exception>
-</constructor>
</class>
<class name="AssetManager"
extends="java.lang.Object"
@@ -36384,21 +36079,6 @@
<parameter name="name" type="java.lang.String">
</parameter>
</method>
-<method name="getLayoutDimension"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="index" type="int">
-</parameter>
-<parameter name="defValue" type="int">
-</parameter>
-</method>
<method name="getNonResourceString"
return="java.lang.String"
abstract="false"
@@ -42447,13 +42127,15 @@
</method>
</class>
<class name="GadgetHostView"
- extends="android.widget.FrameLayout"
+ extends="android.widget.ViewAnimator"
abstract="false"
static="false"
final="false"
deprecated="not deprecated"
visibility="public"
>
+<implements name="android.view.animation.Animation.AnimationListener">
+</implements>
<constructor name="GadgetHostView"
type="android.gadget.GadgetHostView"
static="false"
@@ -42522,6 +42204,45 @@
visibility="public"
>
</method>
+<method name="onAnimationEnd"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="animation" type="android.view.animation.Animation">
+</parameter>
+</method>
+<method name="onAnimationRepeat"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="animation" type="android.view.animation.Animation">
+</parameter>
+</method>
+<method name="onAnimationStart"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="animation" type="android.view.animation.Animation">
+</parameter>
+</method>
<method name="prepareView"
return="void"
abstract="false"
@@ -42587,19 +42308,6 @@
<parameter name="provider" type="android.content.ComponentName">
</parameter>
</method>
-<method name="getGadgetIds"
- return="int[]"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="provider" type="android.content.ComponentName">
-</parameter>
-</method>
<method name="getGadgetInfo"
return="android.gadget.GadgetProviderInfo"
abstract="false"
@@ -58537,17 +58245,6 @@
visibility="public"
>
</method>
-<method name="hasVerticalScrollBar"
- return="boolean"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
<method name="startInternalChanges"
return="void"
abstract="false"
@@ -58666,19 +58363,6 @@
visibility="public"
>
</method>
-<method name="getTextForImeAction"
- return="java.lang.CharSequence"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="imeOptions" type="int">
-</parameter>
-</method>
<method name="getWindow"
return="android.app.Dialog"
abstract="false"
@@ -58915,21 +58599,6 @@
<parameter name="id" type="int">
</parameter>
</method>
-<method name="onExtractedCursorMovement"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="dx" type="int">
-</parameter>
-<parameter name="dy" type="int">
-</parameter>
-</method>
<method name="onExtractedSelectionChanged"
return="void"
abstract="false"
@@ -58956,19 +58625,6 @@
visibility="public"
>
</method>
-<method name="onExtractingInputChanged"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="ei" type="android.view.inputmethod.EditorInfo">
-</parameter>
-</method>
<method name="onFinishCandidatesView"
return="void"
abstract="false"
@@ -59163,19 +58819,6 @@
<parameter name="text" type="android.view.inputmethod.ExtractedText">
</parameter>
</method>
-<method name="onUpdateExtractingAccessories"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="ei" type="android.view.inputmethod.EditorInfo">
-</parameter>
-</method>
<method name="onUpdateSelection"
return="void"
abstract="false"
@@ -59221,45 +58864,6 @@
visibility="public"
>
</method>
-<method name="sendDefaultEditorAction"
- return="boolean"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="fromEnterKey" type="boolean">
-</parameter>
-</method>
-<method name="sendDownUpKeyEvents"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="keyEventCode" type="int">
-</parameter>
-</method>
-<method name="sendKeyChar"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="charCode" type="char">
-</parameter>
-</method>
<method name="setCandidatesView"
return="void"
abstract="false"
@@ -60761,45 +60365,6 @@
<parameter name="keyCodes" type="int[]">
</parameter>
</method>
-<method name="onPress"
- return="void"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="primaryCode" type="int">
-</parameter>
-</method>
-<method name="onRelease"
- return="void"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="primaryCode" type="int">
-</parameter>
-</method>
-<method name="onText"
- return="void"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="text" type="java.lang.CharSequence">
-</parameter>
-</method>
<method name="swipeDown"
return="void"
abstract="true"
@@ -64672,8 +64237,6 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="streamType" type="int">
-</parameter>
</method>
<method name="getNotificationMarkerPosition"
return="int"
@@ -66283,7 +65846,7 @@
<method name="reset"
return="void"
abstract="false"
- native="false"
+ native="true"
synchronized="false"
static="false"
final="false"
@@ -66334,19 +65897,6 @@
<parameter name="c" type="android.hardware.Camera">
</parameter>
</method>
-<method name="setOnErrorListener"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="l" type="android.media.MediaRecorder.OnErrorListener">
-</parameter>
-</method>
<method name="setOutputFile"
return="void"
abstract="false"
@@ -66493,17 +66043,6 @@
<exception name="IllegalStateException" type="java.lang.IllegalStateException">
</exception>
</method>
-<field name="MEDIA_RECORDER_ERROR_UNKNOWN"
- type="int"
- transient="false"
- volatile="false"
- value="1"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
</class>
<class name="MediaRecorder.AudioEncoder"
extends="java.lang.Object"
@@ -66567,31 +66106,6 @@
>
</field>
</class>
-<interface name="MediaRecorder.OnErrorListener"
- abstract="true"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<method name="onError"
- return="void"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="mr" type="android.media.MediaRecorder">
-</parameter>
-<parameter name="what" type="int">
-</parameter>
-<parameter name="extra" type="int">
-</parameter>
-</method>
-</interface>
<class name="MediaRecorder.OutputFormat"
extends="java.lang.Object"
abstract="false"
@@ -73681,96 +73195,6 @@
</parameter>
</method>
</class>
-<class name="Visibility"
- extends="java.lang.Object"
- abstract="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<constructor name="Visibility"
- type="android.opengl.Visibility"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</constructor>
-<method name="computeBoundingSphere"
- return="void"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="positions" type="float[]">
-</parameter>
-<parameter name="positionsOffset" type="int">
-</parameter>
-<parameter name="positionsCount" type="int">
-</parameter>
-<parameter name="sphere" type="float[]">
-</parameter>
-<parameter name="sphereOffset" type="int">
-</parameter>
-</method>
-<method name="frustumCullSpheres"
- return="int"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="mvp" type="float[]">
-</parameter>
-<parameter name="mvpOffset" type="int">
-</parameter>
-<parameter name="spheres" type="float[]">
-</parameter>
-<parameter name="spheresOffset" type="int">
-</parameter>
-<parameter name="spheresCount" type="int">
-</parameter>
-<parameter name="results" type="int[]">
-</parameter>
-<parameter name="resultsOffset" type="int">
-</parameter>
-<parameter name="resultsCapacity" type="int">
-</parameter>
-</method>
-<method name="visibilityTest"
- return="int"
- abstract="false"
- native="true"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="ws" type="float[]">
-</parameter>
-<parameter name="wsOffset" type="int">
-</parameter>
-<parameter name="positions" type="float[]">
-</parameter>
-<parameter name="positionsOffset" type="int">
-</parameter>
-<parameter name="indices" type="char[]">
-</parameter>
-<parameter name="indicesOffset" type="int">
-</parameter>
-<parameter name="indexCount" type="int">
-</parameter>
-</method>
-</class>
</package>
<package name="android.os"
>
@@ -80036,17 +79460,6 @@
visibility="public"
>
</method>
-<method name="getStatSize"
- return="long"
- abstract="false"
- native="true"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
<method name="open"
return="android.os.ParcelFileDescriptor"
abstract="false"
@@ -80089,17 +79502,6 @@
visibility="public"
>
</field>
-<field name="MODE_APPEND"
- type="int"
- transient="false"
- volatile="false"
- value="33554432"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="MODE_CREATE"
type="int"
transient="false"
@@ -92977,6 +92379,486 @@
</field>
</class>
</package>
+<package name="android.speech.srec"
+>
+<class name="MicrophoneInputStream"
+ extends="java.io.InputStream"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="MicrophoneInputStream"
+ type="android.speech.srec.MicrophoneInputStream"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="sampleRate" type="int">
+</parameter>
+<parameter name="fifoDepth" type="int">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</constructor>
+<method name="read"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+</class>
+<class name="Recognizer"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="Recognizer"
+ type="android.speech.srec.Recognizer"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="configFile" type="java.lang.String">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</constructor>
+<method name="advance"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="destroy"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="eventToString"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="event" type="int">
+</parameter>
+</method>
+<method name="getConfigDir"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="locale" type="java.util.Locale">
+</parameter>
+</method>
+<method name="getResult"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="index" type="int">
+</parameter>
+<parameter name="key" type="java.lang.String">
+</parameter>
+</method>
+<method name="getResultCount"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getResultKeys"
+ return="java.lang.String[]"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="index" type="int">
+</parameter>
+</method>
+<method name="putAudio"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="buf" type="byte[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+<parameter name="length" type="int">
+</parameter>
+<parameter name="isLast" type="boolean">
+</parameter>
+</method>
+<method name="putAudio"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="audio" type="java.io.InputStream">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="start"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="stop"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<field name="EVENT_END_OF_VOICING"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="6"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EVENT_INCOMPLETE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EVENT_INVALID"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EVENT_MAX_SPEECH"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EVENT_NEED_MORE_AUDIO"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="11"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EVENT_NO_MATCH"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EVENT_RECOGNITION_RESULT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="8"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EVENT_RECOGNITION_TIMEOUT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="10"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EVENT_SPOKE_TOO_SOON"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EVENT_STARTED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EVENT_START_OF_UTTERANCE_TIMEOUT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="9"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EVENT_START_OF_VOICING"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="EVENT_STOPPED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEY_CONFIDENCE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;conf&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEY_LITERAL"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;literal&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="KEY_MEANING"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;meaning&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="Recognizer.Grammar"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="Recognizer.Grammar"
+ type="android.speech.srec.Recognizer.Grammar"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="g2gFileName" type="java.lang.String">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</constructor>
+<method name="addWordToSlot"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="slot" type="java.lang.String">
+</parameter>
+<parameter name="word" type="java.lang.String">
+</parameter>
+<parameter name="pron" type="java.lang.String">
+</parameter>
+<parameter name="weight" type="int">
+</parameter>
+<parameter name="tag" type="java.lang.String">
+</parameter>
+</method>
+<method name="compile"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="destroy"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="resetAllSlots"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="save"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="g2gFileName" type="java.lang.String">
+</parameter>
+<exception name="IOException" type="java.io.IOException">
+</exception>
+</method>
+<method name="setupRecognizer"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+</class>
+</package>
<package name="android.telephony"
>
<class name="CellLocation"
@@ -95064,21 +94946,6 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="messageBody" type="java.lang.CharSequence">
-</parameter>
-<parameter name="use7bitOnly" type="boolean">
-</parameter>
-</method>
-<method name="calculateLength"
- return="int[]"
- abstract="false"
- native="false"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
<parameter name="messageBody" type="java.lang.String">
</parameter>
<parameter name="use7bitOnly" type="boolean">
@@ -99981,21 +99848,6 @@
<exception name="PackageManager.NameNotFoundException" type="android.content.pm.PackageManager.NameNotFoundException">
</exception>
</method>
-<method name="getLaunchIntentForPackage"
- return="android.content.Intent"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="packageName" type="java.lang.String">
-</parameter>
-<exception name="PackageManager.NameNotFoundException" type="android.content.pm.PackageManager.NameNotFoundException">
-</exception>
-</method>
<method name="getNameForUid"
return="java.lang.String"
abstract="false"
@@ -102467,6 +102319,17 @@
visibility="public"
>
</field>
+<field name="TYPE_TEXT_FLAG_SEARCH"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="524288"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
<field name="TYPE_TEXT_VARIATION_EMAIL_ADDRESS"
type="int"
transient="false"
@@ -106466,21 +106329,6 @@
<parameter name="elapsedSeconds" type="long">
</parameter>
</method>
-<method name="formatElapsedTime"
- return="java.lang.String"
- abstract="false"
- native="false"
- synchronized="false"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="recycle" type="java.lang.StringBuilder">
-</parameter>
-<parameter name="elapsedSeconds" type="long">
-</parameter>
-</method>
<method name="formatSameDayTime"
return="java.lang.CharSequence"
abstract="false"
@@ -117003,67 +116851,7 @@
<parameter name="isLongpressEnabled" type="boolean">
</parameter>
</method>
-<method name="setOnDoubleTapListener"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="onDoubleTapListener" type="android.view.GestureDetector.OnDoubleTapListener">
-</parameter>
-</method>
</class>
-<interface name="GestureDetector.OnDoubleTapListener"
- abstract="true"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<method name="onDoubleTap"
- return="boolean"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="e" type="android.view.MotionEvent">
-</parameter>
-</method>
-<method name="onDoubleTapEvent"
- return="boolean"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="e" type="android.view.MotionEvent">
-</parameter>
-</method>
-<method name="onSingleTapConfirmed"
- return="boolean"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="e" type="android.view.MotionEvent">
-</parameter>
-</method>
-</interface>
<interface name="GestureDetector.OnGestureListener"
abstract="true"
static="true"
@@ -117170,8 +116958,6 @@
deprecated="not deprecated"
visibility="public"
>
-<implements name="android.view.GestureDetector.OnDoubleTapListener">
-</implements>
<implements name="android.view.GestureDetector.OnGestureListener">
</implements>
<constructor name="GestureDetector.SimpleOnGestureListener"
@@ -117182,32 +116968,6 @@
visibility="public"
>
</constructor>
-<method name="onDoubleTap"
- return="boolean"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="e" type="android.view.MotionEvent">
-</parameter>
-</method>
-<method name="onDoubleTapEvent"
- return="boolean"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="e" type="android.view.MotionEvent">
-</parameter>
-</method>
<method name="onDown"
return="boolean"
abstract="false"
@@ -117285,19 +117045,6 @@
<parameter name="e" type="android.view.MotionEvent">
</parameter>
</method>
-<method name="onSingleTapConfirmed"
- return="boolean"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="e" type="android.view.MotionEvent">
-</parameter>
-</method>
<method name="onSingleTapUp"
return="boolean"
abstract="false"
@@ -118622,17 +118369,6 @@
visibility="public"
>
</field>
-<field name="FLAG_KEEP_TOUCH_MODE"
- type="int"
- transient="false"
- volatile="false"
- value="4"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="FLAG_SOFT_KEYBOARD"
type="int"
transient="false"
@@ -134725,19 +134461,6 @@
<parameter name="id" type="int">
</parameter>
</method>
-<method name="performEditorAction"
- return="boolean"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="actionCode" type="int">
-</parameter>
-</method>
<method name="performPrivateCommand"
return="boolean"
abstract="false"
@@ -135028,125 +134751,6 @@
visibility="public"
>
</field>
-<field name="IME_ACTION_GO"
- type="int"
- transient="false"
- volatile="false"
- value="1"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="IME_ACTION_NEXT"
- type="int"
- transient="false"
- volatile="false"
- value="4"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="IME_ACTION_NONE"
- type="int"
- transient="false"
- volatile="false"
- value="0"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="IME_ACTION_SEARCH"
- type="int"
- transient="false"
- volatile="false"
- value="2"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="IME_ACTION_SEND"
- type="int"
- transient="false"
- volatile="false"
- value="3"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="IME_FLAG_NO_ENTER_ACTION"
- type="int"
- transient="false"
- volatile="false"
- value="1073741824"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="IME_MASK_ACTION"
- type="int"
- transient="false"
- volatile="false"
- value="255"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="IME_NORMAL"
- type="int"
- transient="false"
- volatile="false"
- value="0"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="IME_UNDEFINED"
- type="int"
- transient="false"
- volatile="false"
- value="-2147483648"
- static="true"
- final="true"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="actionId"
- type="int"
- transient="false"
- volatile="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
-<field name="actionLabel"
- type="java.lang.CharSequence"
- transient="false"
- volatile="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="extras"
type="android.os.Bundle"
transient="false"
@@ -135187,16 +134791,6 @@
visibility="public"
>
</field>
-<field name="imeOptions"
- type="int"
- transient="false"
- volatile="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</field>
<field name="initialCapsMode"
type="int"
transient="false"
@@ -135257,7 +134851,7 @@
visibility="public"
>
</field>
-<field name="privateImeOptions"
+<field name="privateContentType"
type="java.lang.String"
transient="false"
volatile="false"
@@ -135785,19 +135379,6 @@
<parameter name="id" type="int">
</parameter>
</method>
-<method name="performEditorAction"
- return="boolean"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="editorAction" type="int">
-</parameter>
-</method>
<method name="performPrivateCommand"
return="boolean"
abstract="true"
@@ -142397,17 +141978,6 @@
<parameter name="defStyle" type="int">
</parameter>
</constructor>
-<method name="getKeyProgressIncrement"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
<method name="getThumbOffset"
return="int"
abstract="false"
@@ -142419,19 +141989,6 @@
visibility="public"
>
</method>
-<method name="setKeyProgressIncrement"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="increment" type="int">
-</parameter>
-</method>
<method name="setThumb"
return="void"
abstract="false"
@@ -143862,28 +143419,6 @@
visibility="public"
>
</method>
-<method name="getDropDownAnchor"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="getDropDownWidth"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
<method name="getFilter"
return="android.widget.Filter"
abstract="false"
@@ -144083,32 +143618,6 @@
<parameter name="hint" type="java.lang.CharSequence">
</parameter>
</method>
-<method name="setDropDownAnchor"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="id" type="int">
-</parameter>
-</method>
-<method name="setDropDownWidth"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="width" type="int">
-</parameter>
-</method>
<method name="setListSelection"
return="void"
abstract="false"
@@ -155697,39 +155206,6 @@
visibility="public"
>
</method>
-<method name="getImeActionId"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="getImeActionLabel"
- return="java.lang.CharSequence"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
-<method name="getImeOptions"
- return="int"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-</method>
<method name="getInputExtras"
return="android.os.Bundle"
abstract="false"
@@ -155868,7 +155344,7 @@
visibility="public"
>
</method>
-<method name="getPrivateImeOptions"
+<method name="getPrivateContentType"
return="java.lang.String"
abstract="false"
native="false"
@@ -156111,19 +155587,6 @@
<parameter name="text" type="android.view.inputmethod.CompletionInfo">
</parameter>
</method>
-<method name="onEditorAction"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="actionCode" type="int">
-</parameter>
-</method>
<method name="onEndBatchEdit"
return="void"
abstract="false"
@@ -156570,34 +156033,6 @@
<parameter name="whether" type="boolean">
</parameter>
</method>
-<method name="setImeActionLabel"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="label" type="java.lang.CharSequence">
-</parameter>
-<parameter name="actionId" type="int">
-</parameter>
-</method>
-<method name="setImeOptions"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="imeOptions" type="int">
-</parameter>
-</method>
<method name="setIncludeFontPadding"
return="void"
abstract="false"
@@ -156851,19 +156286,6 @@
<parameter name="movement" type="android.text.method.MovementMethod">
</parameter>
</method>
-<method name="setOnEditorActionListener"
- return="void"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="l" type="android.widget.TextView.OnEditorActionListener">
-</parameter>
-</method>
<method name="setPaintFlags"
return="void"
abstract="false"
@@ -156877,7 +156299,7 @@
<parameter name="flags" type="int">
</parameter>
</method>
-<method name="setPrivateImeOptions"
+<method name="setPrivateContentType"
return="void"
abstract="false"
native="false"
@@ -157222,17 +156644,6 @@
<parameter name="pixels" type="int">
</parameter>
</method>
-<method name="shouldAdvanceFocusOnEnter"
- return="boolean"
- abstract="false"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="protected"
->
-</method>
</class>
<class name="TextView.BufferType"
extends="java.lang.Enum"
@@ -157267,31 +156678,6 @@
>
</method>
</class>
-<interface name="TextView.OnEditorActionListener"
- abstract="true"
- static="true"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<method name="onEditorAction"
- return="boolean"
- abstract="true"
- native="false"
- synchronized="false"
- static="false"
- final="false"
- deprecated="not deprecated"
- visibility="public"
->
-<parameter name="v" type="android.widget.TextView">
-</parameter>
-<parameter name="actionId" type="int">
-</parameter>
-<parameter name="event" type="android.view.KeyEvent">
-</parameter>
-</method>
-</interface>
<class name="TextView.SavedState"
extends="android.view.View.BaseSavedState"
abstract="false"
diff --git a/camera/libcameraservice/CameraHardwareStub.cpp b/camera/libcameraservice/CameraHardwareStub.cpp
index 0f1ae8e..9a47705 100644
--- a/camera/libcameraservice/CameraHardwareStub.cpp
+++ b/camera/libcameraservice/CameraHardwareStub.cpp
@@ -29,8 +29,7 @@ namespace android {
CameraHardwareStub::CameraHardwareStub()
: mParameters(),
- mPreviewHeap(0),
- mRawHeap(0),
+ mHeap(0),
mFakeCamera(0),
mPreviewFrameSize(0),
mRawPictureCallback(0),
@@ -63,17 +62,13 @@ void CameraHardwareStub::initDefaultParameters()
void CameraHardwareStub::initHeapLocked()
{
- // Create raw heap.
- int picture_width, picture_height;
- mParameters.getPictureSize(&picture_width, &picture_height);
- mRawHeap = new MemoryHeapBase(picture_width * 2 * picture_height);
+ int width, height;
+ mParameters.getPreviewSize(&width, &height);
- int preview_width, preview_height;
- mParameters.getPreviewSize(&preview_width, &preview_height);
- LOGD("initHeapLocked: preview size=%dx%d", preview_width, preview_height);
+ LOGD("initHeapLocked: preview size=%dx%d", width, height);
// Note that we enforce yuv422 in setParameters().
- int how_big = preview_width * preview_height * 2;
+ int how_big = width * height * 2;
// If we are being reinitialized to the same size as before, no
// work needs to be done.
@@ -84,15 +79,15 @@ void CameraHardwareStub::initHeapLocked()
// Make a new mmap'ed heap that can be shared across processes.
// use code below to test with pmem
- mPreviewHeap = new MemoryHeapBase(mPreviewFrameSize * kBufferCount);
+ mHeap = new MemoryHeapBase(mPreviewFrameSize * kBufferCount);
// Make an IMemory for each frame so that we can reuse them in callbacks.
for (int i = 0; i < kBufferCount; i++) {
- mBuffers[i] = new MemoryBase(mPreviewHeap, i * mPreviewFrameSize, mPreviewFrameSize);
+ mBuffers[i] = new MemoryBase(mHeap, i * mPreviewFrameSize, mPreviewFrameSize);
}
-
+
// Recreate the fake camera to reflect the current size.
delete mFakeCamera;
- mFakeCamera = new FakeCamera(preview_width, preview_height);
+ mFakeCamera = new FakeCamera(width, height);
}
CameraHardwareStub::~CameraHardwareStub()
@@ -104,12 +99,7 @@ CameraHardwareStub::~CameraHardwareStub()
sp<IMemoryHeap> CameraHardwareStub::getPreviewHeap() const
{
- return mPreviewHeap;
-}
-
-sp<IMemoryHeap> CameraHardwareStub::getRawHeap() const
-{
- return mRawHeap;
+ return mHeap;
}
// ---------------------------------------------------------------------------
@@ -124,7 +114,7 @@ int CameraHardwareStub::previewThread()
// Find the offset within the heap of the current buffer.
ssize_t offset = mCurrentPreviewFrame * mPreviewFrameSize;
- sp<MemoryHeapBase> heap = mPreviewHeap;
+ sp<MemoryHeapBase> heap = mHeap;
// this assumes the internal state of fake camera doesn't change
// (or is thread safe)
@@ -265,9 +255,10 @@ int CameraHardwareStub::pictureThread()
// In the meantime just make another fake camera picture.
int w, h;
mParameters.getPictureSize(&w, &h);
- sp<MemoryBase> mem = new MemoryBase(mRawHeap, 0, w * 2 * h);
+ sp<MemoryHeapBase> heap = new MemoryHeapBase(w * 2 * h);
+ sp<MemoryBase> mem = new MemoryBase(heap, 0, w * 2 * h);
FakeCamera cam(w, h);
- cam.getNextFrameAsYuv422((uint8_t *)mRawHeap->base());
+ cam.getNextFrameAsYuv422((uint8_t *)heap->base());
if (mRawPictureCallback)
mRawPictureCallback(mem, mPictureCallbackCookie);
}
diff --git a/camera/libcameraservice/CameraHardwareStub.h b/camera/libcameraservice/CameraHardwareStub.h
index 0d26d47..cdd6011 100644
--- a/camera/libcameraservice/CameraHardwareStub.h
+++ b/camera/libcameraservice/CameraHardwareStub.h
@@ -30,7 +30,6 @@ namespace android {
class CameraHardwareStub : public CameraHardwareInterface {
public:
virtual sp<IMemoryHeap> getPreviewHeap() const;
- virtual sp<IMemoryHeap> getRawHeap() const;
virtual status_t startPreview(preview_callback cb, void* user);
virtual void stopPreview();
@@ -94,8 +93,7 @@ private:
CameraParameters mParameters;
- sp<MemoryHeapBase> mPreviewHeap;
- sp<MemoryHeapBase> mRawHeap;
+ sp<MemoryHeapBase> mHeap;
sp<MemoryBase> mBuffers[kBufferCount];
FakeCamera *mFakeCamera;
diff --git a/camera/libcameraservice/CameraService.cpp b/camera/libcameraservice/CameraService.cpp
index 953e637..e5d4220 100644
--- a/camera/libcameraservice/CameraService.cpp
+++ b/camera/libcameraservice/CameraService.cpp
@@ -152,7 +152,7 @@ void CameraService::removeClient(const sp<ICameraClient>& cameraClient)
}
CameraService::Client::Client(const sp<CameraService>& cameraService,
- const sp<ICameraClient>& cameraClient, pid_t clientPid)
+ const sp<ICameraClient>& cameraClient, pid_t clientPid)
{
LOGD("Client E constructor");
mCameraService = cameraService;
@@ -429,7 +429,7 @@ status_t CameraService::Client::startPreviewMode()
ret = mHardware->startPreview(NULL, mCameraService.get());
if (ret != NO_ERROR)
LOGE("mHardware->startPreview() failed with status %d\n", ret);
-
+
} else {
ret = mHardware->startPreview(previewCallback,
mCameraService.get());
@@ -684,33 +684,13 @@ status_t CameraService::Client::takePicture()
return INVALID_OPERATION;
}
+ if (mSurface != NULL && !mUseOverlay)
+ mSurface->unregisterBuffers();
- Mutex::Autolock buffer_lock(mBufferLock);
- result = mHardware->takePicture(shutterCallback,
+ return mHardware->takePicture(shutterCallback,
yuvPictureCallback,
jpegPictureCallback,
mCameraService.get());
-
- // It takes quite some time before yuvPicture callback to be called.
- // Register the buffer for raw image here to reduce latency.
- // But yuvPictureCallback is called from libcamera. So do not call into a
- // libcamera function here that gets another lock, which may cause deadlock.
- if (mSurface != 0 && !mUseOverlay) {
- int w, h;
- CameraParameters params(mHardware->getParameters());
- params.getPictureSize(&w, &h);
- mSurface->unregisterBuffers();
- uint32_t transform = 0;
- if (params.getOrientation() == CameraParameters::CAMERA_ORIENTATION_PORTRAIT) {
- LOGV("portrait mode");
- transform = ISurface::BufferHeap::ROT_90;
- }
- ISurface::BufferHeap buffers(w, h, w, h,
- PIXEL_FORMAT_YCbCr_420_SP, transform, 0, mHardware->getRawHeap());
- mSurface->registerBuffers(buffers);
- }
-
- return result;
}
// picture callback - snapshot taken
@@ -752,9 +732,23 @@ void CameraService::Client::yuvPictureCallback(const sp<IMemory>& mem,
#endif
// Put the YUV version of the snapshot in the preview display.
- // Use lock to make sure buffer has been registered.
- Mutex::Autolock clientLock(client->mBufferLock);
+ int w, h;
+ CameraParameters params(client->mHardware->getParameters());
+ params.getPictureSize(&w, &h);
+
+// Mutex::Autolock clientLock(client->mLock);
if (client->mSurface != 0 && !client->mUseOverlay) {
+ client->mSurface->unregisterBuffers();
+
+ uint32_t transform = 0;
+ if (params.getOrientation() == CameraParameters::CAMERA_ORIENTATION_PORTRAIT) {
+ LOGV("portrait mode");
+ transform = ISurface::BufferHeap::ROT_90;
+ }
+ ISurface::BufferHeap buffers(w, h, w, h,
+ PIXEL_FORMAT_YCbCr_420_SP, transform, 0, heap);
+
+ client->mSurface->registerBuffers(buffers);
client->mSurface->postBuffer(offset);
}
diff --git a/camera/libcameraservice/CameraService.h b/camera/libcameraservice/CameraService.h
index 812b928..d9b7927 100644
--- a/camera/libcameraservice/CameraService.h
+++ b/camera/libcameraservice/CameraService.h
@@ -172,9 +172,6 @@ private:
// for a callback from CameraHardwareInterface. If this
// happens, it will cause a deadlock.
mutable Mutex mSurfaceLock;
- // mBufferLock synchronizes buffer registration between takePicture()
- // and yuvPictureCallback().
- mutable Mutex mBufferLock;
mutable Condition mReady;
sp<CameraService> mCameraService;
sp<ISurface> mSurface;
diff --git a/core/java/android/app/ApplicationContext.java b/core/java/android/app/ApplicationContext.java
index 3b5ad86..394b8e3 100644
--- a/core/java/android/app/ApplicationContext.java
+++ b/core/java/android/app/ApplicationContext.java
@@ -1487,7 +1487,7 @@ class ApplicationContext extends Context {
static final class ApplicationPackageManager extends PackageManager {
@Override
public PackageInfo getPackageInfo(String packageName, int flags)
- throws NameNotFoundException {
+ throws NameNotFoundException {
try {
PackageInfo pi = mPM.getPackageInfo(packageName, flags);
if (pi != null) {
@@ -1500,43 +1500,6 @@ class ApplicationContext extends Context {
throw new NameNotFoundException(packageName);
}
- public Intent getLaunchIntentForPackage(String packageName)
- throws NameNotFoundException {
- // First see if the package has an INFO activity; the existence of
- // such an activity is implied to be the desired front-door for the
- // overall package (such as if it has multiple launcher entries).
- Intent intent = getLaunchIntentForPackageCategory(this, packageName,
- Intent.CATEGORY_INFO);
- if (intent != null) {
- return intent;
- }
-
- // Otherwise, try to find a main launcher activity.
- return getLaunchIntentForPackageCategory(this, packageName,
- Intent.CATEGORY_LAUNCHER);
- }
-
- // XXX This should be implemented as a call to the package manager,
- // to reduce the work needed.
- static Intent getLaunchIntentForPackageCategory(PackageManager pm,
- String packageName, String category) {
- Intent intent = new Intent(Intent.ACTION_MAIN);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- Intent intentToResolve = new Intent(Intent.ACTION_MAIN, null);
- intentToResolve.addCategory(category);
- final List<ResolveInfo> apps =
- pm.queryIntentActivities(intentToResolve, 0);
- // I wish there were a way to directly get the "main" activity of a
- // package but ...
- for (ResolveInfo app : apps) {
- if (app.activityInfo.packageName.equals(packageName)) {
- intent.setClassName(packageName, app.activityInfo.name);
- return intent;
- }
- }
- return null;
- }
-
@Override
public int[] getPackageGids(String packageName)
throws NameNotFoundException {
diff --git a/core/java/android/app/ExpandableListActivity.java b/core/java/android/app/ExpandableListActivity.java
index a2e048f..75dfcae 100644
--- a/core/java/android/app/ExpandableListActivity.java
+++ b/core/java/android/app/ExpandableListActivity.java
@@ -63,21 +63,21 @@ import java.util.Map;
*
* <pre>
* &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
- * &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ * &lt;LinearLayout
* android:orientation=&quot;vertical&quot;
* android:layout_width=&quot;fill_parent&quot;
* android:layout_height=&quot;fill_parent&quot;
- * android:paddingLeft=&quot;8dp&quot;
- * android:paddingRight=&quot;8dp&quot;&gt;
+ * android:paddingLeft=&quot;8&quot;
+ * android:paddingRight=&quot;8&quot;&gt;
*
- * &lt;ExpandableListView android:id=&quot;@id/android:list&quot;
+ * &lt;ExpandableListView id=&quot;android:list&quot;
* android:layout_width=&quot;fill_parent&quot;
* android:layout_height=&quot;fill_parent&quot;
* android:background=&quot;#00FF00&quot;
* android:layout_weight=&quot;1&quot;
* android:drawSelectorOnTop=&quot;false&quot;/&gt;
*
- * &lt;TextView android:id=&quot;@id/android:empty&quot;
+ * &lt;TextView id=&quot;android:empty&quot;
* android:layout_width=&quot;fill_parent&quot;
* android:layout_height=&quot;fill_parent&quot;
* android:background=&quot;#FF0000&quot;
@@ -113,19 +113,19 @@ import java.util.Map;
*
* <pre>
* &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
- * &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ * &lt;LinearLayout
* android:layout_width=&quot;fill_parent&quot;
* android:layout_height=&quot;wrap_content&quot;
* android:orientation=&quot;vertical&quot;&gt;
*
- * &lt;TextView android:id=&quot;@+id/text1&quot;
- * android:textSize=&quot;16sp&quot;
+ * &lt;TextView id=&quot;text1&quot;
+ * android:textSize=&quot;16&quot;
* android:textStyle=&quot;bold&quot;
* android:layout_width=&quot;fill_parent&quot;
* android:layout_height=&quot;wrap_content&quot;/&gt;
*
- * &lt;TextView android:id=&quot;@+id/text2&quot;
- * android:textSize=&quot;16sp&quot;
+ * &lt;TextView id=&quot;text2&quot;
+ * android:textSize=&quot;16&quot;
* android:layout_width=&quot;fill_parent&quot;
* android:layout_height=&quot;wrap_content&quot;/&gt;
* &lt;/LinearLayout&gt;
@@ -162,8 +162,7 @@ public class ExpandableListActivity extends Activity implements
/**
* Override this to populate the context menu when an item is long pressed. menuInfo
- * will contain an {@link android.widget.ExpandableListView.ExpandableListContextMenuInfo}
- * whose packedPosition is a packed position
+ * will contain a {@link AdapterContextMenuInfo} whose position is a packed position
* that should be used with {@link ExpandableListView#getPackedPositionType(long)} and
* the other similar methods.
* <p>
diff --git a/core/java/android/app/IntentService.java b/core/java/android/app/IntentService.java
deleted file mode 100644
index 2b12a2a..0000000
--- a/core/java/android/app/IntentService.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package android.app;
-
-import android.content.Intent;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.Message;
-
-/**
- * An abstract {@link Service} that serializes the handling of the Intents passed upon service
- * start and handles them on a handler thread.
- *
- * <p>To use this class extend it and implement {@link #onHandleIntent}. The {@link Service} will
- * automatically be stopped when the last enqueued {@link Intent} is handled.
- */
-public abstract class IntentService extends Service {
- private volatile Looper mServiceLooper;
- private volatile ServiceHandler mServiceHandler;
- private String mName;
-
- private final class ServiceHandler extends Handler {
- public ServiceHandler(Looper looper) {
- super(looper);
- }
-
- @Override
- public void handleMessage(Message msg) {
- onHandleIntent((Intent)msg.obj);
- stopSelf(msg.arg1);
- }
- }
-
- public IntentService(String name) {
- super();
- mName = name;
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
- HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
- thread.start();
-
- mServiceLooper = thread.getLooper();
- mServiceHandler = new ServiceHandler(mServiceLooper);
- }
-
- @Override
- public void onStart(Intent intent, int startId) {
- super.onStart(intent, startId);
- Message msg = mServiceHandler.obtainMessage();
- msg.arg1 = startId;
- msg.obj = intent;
- mServiceHandler.sendMessage(msg);
- }
-
- @Override
- public void onDestroy() {
- mServiceLooper.quit();
- }
-
- @Override
- public IBinder onBind(Intent intent) {
- return null;
- }
-
- /**
- * Invoked on the Handler thread with the {@link Intent} that is passed to {@link #onStart}.
- * Note that this will be invoked from a different thread than the one that handles the
- * {@link #onStart} call.
- */
- protected abstract void onHandleIntent(Intent intent);
-}
diff --git a/core/java/android/app/ListActivity.java b/core/java/android/app/ListActivity.java
index 5523c18..2818937 100644
--- a/core/java/android/app/ListActivity.java
+++ b/core/java/android/app/ListActivity.java
@@ -53,22 +53,22 @@ import android.widget.ListView;
* </p>
*
* <pre>
- * &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
- * &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ * &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+ * &lt;LinearLayout
* android:orientation=&quot;vertical&quot;
* android:layout_width=&quot;fill_parent&quot;
* android:layout_height=&quot;fill_parent&quot;
- * android:paddingLeft=&quot;8dp&quot;
- * android:paddingRight=&quot;8dp&quot;&gt;
+ * android:paddingLeft=&quot;8&quot;
+ * android:paddingRight=&quot;8&quot;&gt;
*
- * &lt;ListView android:id=&quot;@id/android:list&quot;
+ * &lt;ListView id=&quot;android:list&quot;
* android:layout_width=&quot;fill_parent&quot;
* android:layout_height=&quot;fill_parent&quot;
* android:background=&quot;#00FF00&quot;
* android:layout_weight=&quot;1&quot;
* android:drawSelectorOnTop=&quot;false&quot;/&gt;
*
- * &lt;TextView id=&quot;@id/android:empty&quot;
+ * &lt;TextView id=&quot;android:empty&quot;
* android:layout_width=&quot;fill_parent&quot;
* android:layout_height=&quot;fill_parent&quot;
* android:background=&quot;#FF0000&quot;
@@ -99,19 +99,19 @@ import android.widget.ListView;
*
* <pre>
* &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
- * &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ * &lt;LinearLayout
* android:layout_width=&quot;fill_parent&quot;
* android:layout_height=&quot;wrap_content&quot;
* android:orientation=&quot;vertical&quot;&gt;
*
- * &lt;TextView android:id=&quot;@+id/text1&quot;
- * android:textSize=&quot;16sp&quot;
+ * &lt;TextView id=&quot;text1&quot;
+ * android:textSize=&quot;16&quot;
* android:textStyle=&quot;bold&quot;
* android:layout_width=&quot;fill_parent&quot;
* android:layout_height=&quot;wrap_content&quot;/&gt;
*
- * &lt;TextView android:id=&quot;@+id/text2&quot;
- * android:textSize=&quot;16sp&quot;
+ * &lt;TextView id=&quot;text2&quot;
+ * android:textSize=&quot;16&quot;
* android:layout_width=&quot;fill_parent&quot;
* android:layout_height=&quot;wrap_content&quot;/&gt;
* &lt;/LinearLayout&gt;
@@ -142,8 +142,8 @@ import android.widget.ListView;
* public class MyListAdapter extends ListActivity {
*
* &#064;Override
- * protected void onCreate(Bundle savedInstanceState){
- * super.onCreate(savedInstanceState);
+ * protected void onCreate(Bundle icicle){
+ * super.onCreate(icicle);
*
* // We'll define a custom screen layout here (the one shown above), but
* // typically, you could just use the standard ListActivity layout.
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index 39edab7..afb3827 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -82,7 +82,9 @@ public class NotificationManager
* @param id An identifier for this notification unique within your
* application.
* @param notification A {@link Notification} object describing how to
- * notify the user, other than the view you're providing. Must not be null.
+ * notify the user, other than the view you're providing. If you
+ * pass null, there will be no persistent notification and no
+ * flashing, vibration, etc.
*/
public void notify(int id, Notification notification)
{
diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java
index d447eb2..7b8256c 100644
--- a/core/java/android/app/SearchDialog.java
+++ b/core/java/android/app/SearchDialog.java
@@ -448,7 +448,6 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS
}
}
mSearchTextField.setInputType(inputType);
- mSearchTextField.setImeOptions(mSearchable.getImeOptions());
}
}
@@ -794,6 +793,7 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS
// otherwise, dispatch an "edit view" key
switch (keyCode) {
case KeyEvent.KEYCODE_ENTER:
+ case KeyEvent.KEYCODE_DPAD_CENTER:
if (event.getAction() == KeyEvent.ACTION_UP) {
v.cancelLongPress();
launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null);
diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java
index c1d66f4..2cc6de9 100644
--- a/core/java/android/app/SearchManager.java
+++ b/core/java/android/app/SearchManager.java
@@ -747,14 +747,6 @@ import android.view.KeyEvent;
* <a href="../R.attr.html#inputType">inputType</a> attribute.</td>
* <td align="center">No</td>
* </tr>
- * <tr><th>android:imeOptions</th>
- * <td>If provided, supplies additional options for the input method.
- * For most searches, in which free form text is expected, this attribute
- * need not be provided, and will default to "actionSearch".
- * Suitable values for this attribute are described in the
- * <a href="../R.attr.html#imeOptions">imeOptions</a> attribute.</td>
- * <td align="center">No</td>
- * </tr>
*
* </tbody>
* </table>
diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java
index 1ba1c1e..56b231f 100644
--- a/core/java/android/bluetooth/BluetoothDevice.java
+++ b/core/java/android/bluetooth/BluetoothDevice.java
@@ -63,10 +63,8 @@ public class BluetoothDevice {
public static final int UNBOND_REASON_AUTH_CANCELED = 3;
/** A bond attempt failed because we could not contact the remote device */
public static final int UNBOND_REASON_REMOTE_DEVICE_DOWN = 4;
- /** A bond attempt failed because a discovery is in progress */
- public static final int UNBOND_REASON_DISCOVERY_IN_PROGRESS = 5;
/** An existing bond was explicitly revoked */
- public static final int UNBOND_REASON_REMOVED = 6;
+ public static final int UNBOND_REASON_REMOVED = 5;
private static final String TAG = "BluetoothDevice";
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index 25544de..3a64cee 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -18,7 +18,6 @@ package android.content;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
-import android.content.res.AssetFileDescriptor;
import android.content.res.Configuration;
import android.database.Cursor;
import android.database.CursorToBulkCursorAdaptor;
@@ -163,13 +162,6 @@ public abstract class ContentProvider implements ComponentCallbacks {
return ContentProvider.this.openFile(uri, mode);
}
- public AssetFileDescriptor openAssetFile(Uri uri, String mode)
- throws FileNotFoundException {
- if (mode != null && mode.startsWith("rw")) checkWritePermission(uri);
- else checkReadPermission(uri);
- return ContentProvider.this.openAssetFile(uri, mode);
- }
-
public ISyncAdapter getSyncAdapter() {
checkWritePermission(null);
return ContentProvider.this.getSyncAdapter().getISyncAdapter();
@@ -446,9 +438,8 @@ public abstract class ContentProvider implements ComponentCallbacks {
* of this method should create a new ParcelFileDescriptor for each call.
*
* @param uri The URI whose file is to be opened.
- * @param mode Access mode for the file. May be "r" for read-only access,
- * "rw" for read and write access, or "rwt" for read and write access
- * that truncates any existing file.
+ * @param mode Access mode for the file. May be "r" for read-only access
+ * or "rw" for read and write access.
*
* @return Returns a new ParcelFileDescriptor which you can use to access
* the file.
@@ -457,66 +448,19 @@ public abstract class ContentProvider implements ComponentCallbacks {
* no file associated with the given URI or the mode is invalid.
* @throws SecurityException Throws SecurityException if the caller does
* not have permission to access the file.
- *
- * @see #openAssetFile(Uri, String)
- * @see #openFileHelper(Uri, String)
- */
+ */
public ParcelFileDescriptor openFile(Uri uri, String mode)
throws FileNotFoundException {
throw new FileNotFoundException("No files supported by provider at "
+ uri);
}
-
- /**
- * This is like {@link #openFile}, but can be implemented by providers
- * that need to be able to return sub-sections of files, often assets
- * inside of their .apk. Note that when implementing this your clients
- * must be able to deal with such files, either directly with
- * {@link ContentResolver#openAssetFileDescriptor
- * ContentResolver.openAssetFileDescriptor}, or by using the higher-level
- * {@link ContentResolver#openInputStream ContentResolver.openInputStream}
- * or {@link ContentResolver#openOutputStream ContentResolver.openOutputStream}
- * methods.
- *
- * <p><em>Note: if you are implementing this to return a full file, you
- * should create the AssetFileDescriptor with
- * {@link AssetFileDescriptor#UNKNOWN_LENGTH} to be compatible with
- * applications that can not handle sub-sections of files.</em></p>
- *
- * @param uri The URI whose file is to be opened.
- * @param mode Access mode for the file. May be "r" for read-only access,
- * "w" for write-only access (erasing whatever data is currently in
- * the file), "wa" for write-only access to append to any existing data,
- * "rw" for read and write access on any existing data, and "rwt" for read
- * and write access that truncates any existing file.
- *
- * @return Returns a new AssetFileDescriptor which you can use to access
- * the file.
- *
- * @throws FileNotFoundException Throws FileNotFoundException if there is
- * no file associated with the given URI or the mode is invalid.
- * @throws SecurityException Throws SecurityException if the caller does
- * not have permission to access the file.
- *
- * @see #openFile(Uri, String)
- * @see #openFileHelper(Uri, String)
- */
- public AssetFileDescriptor openAssetFile(Uri uri, String mode)
- throws FileNotFoundException {
- ParcelFileDescriptor fd = openFile(uri, mode);
- return fd != null ? new AssetFileDescriptor(fd, 0, -1) : null;
- }
/**
* Convenience for subclasses that wish to implement {@link #openFile}
* by looking up a column named "_data" at the given URI.
*
* @param uri The URI to be opened.
- * @param mode The file mode. May be "r" for read-only access,
- * "w" for write-only access (erasing whatever data is currently in
- * the file), "wa" for write-only access to append to any existing data,
- * "rw" for read and write access on any existing data, and "rwt" for read
- * and write access that truncates any existing file.
+ * @param mode The file mode.
*
* @return Returns a new ParcelFileDescriptor that can be used by the
* client to access the file.
@@ -545,7 +489,16 @@ public abstract class ContentProvider implements ComponentCallbacks {
throw new FileNotFoundException("Column _data not found.");
}
- int modeBits = ContentResolver.modeToMode(uri, mode);
+ int modeBits;
+ if ("r".equals(mode)) {
+ modeBits = ParcelFileDescriptor.MODE_READ_ONLY;
+ } else if ("rw".equals(mode)) {
+ modeBits = ParcelFileDescriptor.MODE_READ_WRITE
+ | ParcelFileDescriptor.MODE_CREATE;
+ } else {
+ throw new FileNotFoundException("Bad mode for " + uri + ": "
+ + mode);
+ }
return ParcelFileDescriptor.open(new File(path), modeBits);
}
diff --git a/core/java/android/content/ContentProviderNative.java b/core/java/android/content/ContentProviderNative.java
index e5e3f74..ede2c9b 100644
--- a/core/java/android/content/ContentProviderNative.java
+++ b/core/java/android/content/ContentProviderNative.java
@@ -16,7 +16,6 @@
package android.content;
-import android.content.res.AssetFileDescriptor;
import android.database.BulkCursorNative;
import android.database.BulkCursorToCursorAdaptor;
import android.database.Cursor;
@@ -188,25 +187,6 @@ abstract public class ContentProviderNative extends Binder implements IContentPr
return true;
}
- case OPEN_ASSET_FILE_TRANSACTION:
- {
- data.enforceInterface(IContentProvider.descriptor);
- Uri url = Uri.CREATOR.createFromParcel(data);
- String mode = data.readString();
-
- AssetFileDescriptor fd;
- fd = openAssetFile(url, mode);
- reply.writeNoException();
- if (fd != null) {
- reply.writeInt(1);
- fd.writeToParcel(reply,
- Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
- } else {
- reply.writeInt(0);
- }
- return true;
- }
-
case GET_SYNC_ADAPTER_TRANSACTION:
{
data.enforceInterface(IContentProvider.descriptor);
@@ -433,29 +413,6 @@ final class ContentProviderProxy implements IContentProvider
return fd;
}
- public AssetFileDescriptor openAssetFile(Uri url, String mode)
- throws RemoteException, FileNotFoundException {
- Parcel data = Parcel.obtain();
- Parcel reply = Parcel.obtain();
-
- data.writeInterfaceToken(IContentProvider.descriptor);
-
- url.writeToParcel(data, 0);
- data.writeString(mode);
-
- mRemote.transact(IContentProvider.OPEN_ASSET_FILE_TRANSACTION, data, reply, 0);
-
- DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(reply);
- int has = reply.readInt();
- AssetFileDescriptor fd = has != 0
- ? AssetFileDescriptor.CREATOR.createFromParcel(reply) : null;
-
- data.recycle();
- reply.recycle();
-
- return fd;
- }
-
public ISyncAdapter getSyncAdapter() throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 0d886ee..52f55b6 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -17,7 +17,6 @@
package android.content;
import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.AssetFileDescriptor;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.database.Cursor;
@@ -29,7 +28,6 @@ import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.text.TextUtils;
-import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -172,100 +170,119 @@ public abstract class ContentResolver {
* <li>android.resource ({@link #SCHEME_ANDROID_RESOURCE})</li>
* <li>file ({@link #SCHEME_FILE})</li>
* </ul>
- *
- * <p>See {@link #openAssetFileDescriptor(Uri, String)} for more information
- * on these schemes.
- *
- * @param uri The desired URI.
+ * <h5>The android.resource ({@link #SCHEME_ANDROID_RESOURCE}) Scheme</h5>
+ * <p>
+ * A Uri object can be used to reference a resource in an APK file. The
+ * Uri should be one of the following formats:
+ * <ul>
+ * <li><code>android.resource://package_name/id_number</code><br/>
+ * <code>package_name</code> is your package name as listed in your AndroidManifest.xml.
+ * For example <code>com.example.myapp</code><br/>
+ * <code>id_number</code> is the int form of the ID.<br/>
+ * The easiest way to construct this form is
+ * <pre>Uri uri = Uri.parse("android.resource://com.example.myapp/" + R.raw.my_resource");</pre>
+ * </li>
+ * <li><code>android.resource://package_name/type/name</code><br/>
+ * <code>package_name</code> is your package name as listed in your AndroidManifest.xml.
+ * For example <code>com.example.myapp</code><br/>
+ * <code>type</code> is the string form of the resource type. For example, <code>raw</code>
+ * or <code>drawable</code>.
+ * <code>name</code> is the string form of the resource name. That is, whatever the file
+ * name was in your res directory, without the type extension.
+ * The easiest way to construct this form is
+ * <pre>Uri uri = Uri.parse("android.resource://com.example.myapp/raw/my_resource");</pre>
+ * </li>
+ * </ul>
+ * @param uri The desired "content:" URI.
* @return InputStream
* @throws FileNotFoundException if the provided URI could not be opened.
- * @see #openAssetFileDescriptor(Uri, String)
*/
public final InputStream openInputStream(Uri uri)
throws FileNotFoundException {
String scheme = uri.getScheme();
- if (SCHEME_ANDROID_RESOURCE.equals(scheme)) {
- // Note: left here to avoid breaking compatibility. May be removed
- // with sufficient testing.
- OpenResourceIdResult r = getResourceId(uri);
+ if (SCHEME_CONTENT.equals(scheme)) {
+ ParcelFileDescriptor fd = openFileDescriptor(uri, "r");
+ return fd != null ? new ParcelFileDescriptor.AutoCloseInputStream(fd) : null;
+ } else if (SCHEME_ANDROID_RESOURCE.equals(scheme)) {
+ String authority = uri.getAuthority();
+ Resources r;
+ if (TextUtils.isEmpty(authority)) {
+ throw new FileNotFoundException("No authority: " + uri);
+ } else {
+ try {
+ r = mContext.getPackageManager().getResourcesForApplication(authority);
+ } catch (NameNotFoundException ex) {
+ throw new FileNotFoundException("No package found for authority: " + uri);
+ }
+ }
+ List<String> path = uri.getPathSegments();
+ if (path == null) {
+ throw new FileNotFoundException("No path: " + uri);
+ }
+ int len = path.size();
+ int id;
+ if (len == 1) {
+ try {
+ id = Integer.parseInt(path.get(0));
+ } catch (NumberFormatException e) {
+ throw new FileNotFoundException("Single path segment is not a resource ID: " + uri);
+ }
+ } else if (len == 2) {
+ id = r.getIdentifier(path.get(1), path.get(0), authority);
+ } else {
+ throw new FileNotFoundException("More than two path segments: " + uri);
+ }
+ if (id == 0) {
+ throw new FileNotFoundException("No resource found for: " + uri);
+ }
try {
- InputStream stream = r.r.openRawResource(r.id);
+ InputStream stream = r.openRawResource(id);
return stream;
} catch (Resources.NotFoundException ex) {
- throw new FileNotFoundException("Resource does not exist: " + uri);
+ throw new FileNotFoundException("Resource ID does not exist: " + uri);
}
} else if (SCHEME_FILE.equals(scheme)) {
- // Note: left here to avoid breaking compatibility. May be removed
- // with sufficient testing.
return new FileInputStream(uri.getPath());
} else {
- AssetFileDescriptor fd = openAssetFileDescriptor(uri, "r");
- try {
- return fd != null ? fd.createInputStream() : null;
- } catch (IOException e) {
- throw new FileNotFoundException("Unable to create stream");
- }
+ throw new FileNotFoundException("Unknown scheme: " + uri);
}
}
/**
- * Synonym for {@link #openOutputStream(Uri, String)
- * openOutputStream(uri, "w")}.
- * @throws FileNotFoundException if the provided URI could not be opened.
- */
- public final OutputStream openOutputStream(Uri uri)
- throws FileNotFoundException {
- return openOutputStream(uri, "w");
- }
-
- /**
* Open a stream on to the content associated with a content URI. If there
* is no data associated with the URI, FileNotFoundException is thrown.
*
* <h5>Accepts the following URI schemes:</h5>
* <ul>
* <li>content ({@link #SCHEME_CONTENT})</li>
- * <li>file ({@link #SCHEME_FILE})</li>
* </ul>
*
- * <p>See {@link #openAssetFileDescriptor(Uri, String)} for more information
- * on these schemes.
- *
- * @param uri The desired URI.
- * @param mode May be "w", "wa", "rw", or "rwt".
+ * @param uri The desired "content:" URI.
* @return OutputStream
- * @throws FileNotFoundException if the provided URI could not be opened.
- * @see #openAssetFileDescriptor(Uri, String)
*/
- public final OutputStream openOutputStream(Uri uri, String mode)
+ public final OutputStream openOutputStream(Uri uri)
throws FileNotFoundException {
- AssetFileDescriptor fd = openAssetFileDescriptor(uri, mode);
- try {
- return fd != null ? fd.createOutputStream() : null;
- } catch (IOException e) {
- throw new FileNotFoundException("Unable to create stream");
+ String scheme = uri.getScheme();
+ if (SCHEME_CONTENT.equals(scheme)) {
+ ParcelFileDescriptor fd = openFileDescriptor(uri, "rw");
+ return fd != null
+ ? new ParcelFileDescriptor.AutoCloseOutputStream(fd) : null;
+ } else {
+ throw new FileNotFoundException("Unknown scheme: " + uri);
}
}
/**
* Open a raw file descriptor to access data under a "content:" URI. This
- * is like {@link #openAssetFileDescriptor(Uri, String)}, but uses the
- * underlying {@link ContentProvider#openFile}
- * ContentProvider.openFile()} method, so will <em>not</em> work with
- * providers that return sub-sections of files. If at all possible,
- * you should use {@link #openAssetFileDescriptor(Uri, String)}. You
- * will receive a FileNotFoundException exception if the provider returns a
- * sub-section of a file.
+ * interacts with the underlying {@link ContentProvider#openFile}
+ * ContentProvider.openFile()} method of the provider associated with the
+ * given URI, to retrieve any file stored there.
*
* <h5>Accepts the following URI schemes:</h5>
* <ul>
* <li>content ({@link #SCHEME_CONTENT})</li>
- * <li>file ({@link #SCHEME_FILE})</li>
* </ul>
*
- * <p>See {@link #openAssetFileDescriptor(Uri, String)} for more information
- * on these schemes.
- *
* @param uri The desired URI to open.
* @param mode The file mode to use, as per {@link ContentProvider#openFile
* ContentProvider.openFile}.
@@ -273,189 +290,32 @@ public abstract class ContentResolver {
* own this descriptor and are responsible for closing it when done.
* @throws FileNotFoundException Throws FileNotFoundException of no
* file exists under the URI or the mode is invalid.
- * @see #openAssetFileDescriptor(Uri, String)
*/
public final ParcelFileDescriptor openFileDescriptor(Uri uri,
String mode) throws FileNotFoundException {
- AssetFileDescriptor afd = openAssetFileDescriptor(uri, mode);
- if (afd == null) {
- return null;
- }
-
- if (afd.getDeclaredLength() < 0) {
- // This is a full file!
- return afd.getParcelFileDescriptor();
+ IContentProvider provider = acquireProvider(uri);
+ if (provider == null) {
+ throw new FileNotFoundException("No content provider: " + uri);
}
-
- // Client can't handle a sub-section of a file, so close what
- // we got and bail with an exception.
try {
- afd.close();
- } catch (IOException e) {
- }
-
- throw new FileNotFoundException("Not a whole file");
- }
-
- /**
- * Open a raw file descriptor to access data under a "content:" URI. This
- * interacts with the underlying {@link ContentProvider#openAssetFile}
- * ContentProvider.openAssetFile()} method of the provider associated with the
- * given URI, to retrieve any file stored there.
- *
- * <h5>Accepts the following URI schemes:</h5>
- * <ul>
- * <li>content ({@link #SCHEME_CONTENT})</li>
- * <li>android.resource ({@link #SCHEME_ANDROID_RESOURCE})</li>
- * <li>file ({@link #SCHEME_FILE})</li>
- * </ul>
- * <h5>The android.resource ({@link #SCHEME_ANDROID_RESOURCE}) Scheme</h5>
- * <p>
- * A Uri object can be used to reference a resource in an APK file. The
- * Uri should be one of the following formats:
- * <ul>
- * <li><code>android.resource://package_name/id_number</code><br/>
- * <code>package_name</code> is your package name as listed in your AndroidManifest.xml.
- * For example <code>com.example.myapp</code><br/>
- * <code>id_number</code> is the int form of the ID.<br/>
- * The easiest way to construct this form is
- * <pre>Uri uri = Uri.parse("android.resource://com.example.myapp/" + R.raw.my_resource");</pre>
- * </li>
- * <li><code>android.resource://package_name/type/name</code><br/>
- * <code>package_name</code> is your package name as listed in your AndroidManifest.xml.
- * For example <code>com.example.myapp</code><br/>
- * <code>type</code> is the string form of the resource type. For example, <code>raw</code>
- * or <code>drawable</code>.
- * <code>name</code> is the string form of the resource name. That is, whatever the file
- * name was in your res directory, without the type extension.
- * The easiest way to construct this form is
- * <pre>Uri uri = Uri.parse("android.resource://com.example.myapp/raw/my_resource");</pre>
- * </li>
- * </ul>
- *
- * @param uri The desired URI to open.
- * @param mode The file mode to use, as per {@link ContentProvider#openAssetFile
- * ContentProvider.openAssetFile}.
- * @return Returns a new ParcelFileDescriptor pointing to the file. You
- * own this descriptor and are responsible for closing it when done.
- * @throws FileNotFoundException Throws FileNotFoundException of no
- * file exists under the URI or the mode is invalid.
- */
- public final AssetFileDescriptor openAssetFileDescriptor(Uri uri,
- String mode) throws FileNotFoundException {
- String scheme = uri.getScheme();
- if (SCHEME_ANDROID_RESOURCE.equals(scheme)) {
- if (!"r".equals(mode)) {
- throw new FileNotFoundException("Can't write resources: " + uri);
- }
- OpenResourceIdResult r = getResourceId(uri);
- try {
- return r.r.openRawResourceFd(r.id);
- } catch (Resources.NotFoundException ex) {
- throw new FileNotFoundException("Resource does not exist: " + uri);
- }
- } else if (SCHEME_FILE.equals(scheme)) {
- ParcelFileDescriptor pfd = ParcelFileDescriptor.open(
- new File(uri.getPath()), modeToMode(uri, mode));
- return new AssetFileDescriptor(pfd, 0, -1);
- } else {
- IContentProvider provider = acquireProvider(uri);
- if (provider == null) {
- throw new FileNotFoundException("No content provider: " + uri);
- }
- try {
- AssetFileDescriptor fd = provider.openAssetFile(uri, mode);
- if(fd == null) {
- releaseProvider(provider);
- return null;
- }
- ParcelFileDescriptor pfd = new ParcelFileDescriptorInner(
- fd.getParcelFileDescriptor(), provider);
- return new AssetFileDescriptor(pfd, fd.getStartOffset(),
- fd.getDeclaredLength());
- } catch (RemoteException e) {
- releaseProvider(provider);
- throw new FileNotFoundException("Dead content provider: " + uri);
- } catch (FileNotFoundException e) {
+ ParcelFileDescriptor fd = provider.openFile(uri, mode);
+ if(fd == null) {
releaseProvider(provider);
- throw e;
- } catch (RuntimeException e) {
- releaseProvider(provider);
- throw e;
+ return null;
}
+ return new ParcelFileDescriptorInner(fd, provider);
+ } catch (RemoteException e) {
+ releaseProvider(provider);
+ throw new FileNotFoundException("Dead content provider: " + uri);
+ } catch (FileNotFoundException e) {
+ releaseProvider(provider);
+ throw e;
+ } catch (RuntimeException e) {
+ releaseProvider(provider);
+ throw e;
}
}
- class OpenResourceIdResult {
- Resources r;
- int id;
- }
-
- OpenResourceIdResult getResourceId(Uri uri) throws FileNotFoundException {
- String authority = uri.getAuthority();
- Resources r;
- if (TextUtils.isEmpty(authority)) {
- throw new FileNotFoundException("No authority: " + uri);
- } else {
- try {
- r = mContext.getPackageManager().getResourcesForApplication(authority);
- } catch (NameNotFoundException ex) {
- throw new FileNotFoundException("No package found for authority: " + uri);
- }
- }
- List<String> path = uri.getPathSegments();
- if (path == null) {
- throw new FileNotFoundException("No path: " + uri);
- }
- int len = path.size();
- int id;
- if (len == 1) {
- try {
- id = Integer.parseInt(path.get(0));
- } catch (NumberFormatException e) {
- throw new FileNotFoundException("Single path segment is not a resource ID: " + uri);
- }
- } else if (len == 2) {
- id = r.getIdentifier(path.get(1), path.get(0), authority);
- } else {
- throw new FileNotFoundException("More than two path segments: " + uri);
- }
- if (id == 0) {
- throw new FileNotFoundException("No resource found for: " + uri);
- }
- OpenResourceIdResult res = new OpenResourceIdResult();
- res.r = r;
- res.id = id;
- return res;
- }
-
- /** @hide */
- static public int modeToMode(Uri uri, String mode) throws FileNotFoundException {
- int modeBits;
- if ("r".equals(mode)) {
- modeBits = ParcelFileDescriptor.MODE_READ_ONLY;
- } else if ("w".equals(mode) || "wt".equals(mode)) {
- modeBits = ParcelFileDescriptor.MODE_WRITE_ONLY
- | ParcelFileDescriptor.MODE_CREATE
- | ParcelFileDescriptor.MODE_TRUNCATE;
- } else if ("wa".equals(mode)) {
- modeBits = ParcelFileDescriptor.MODE_WRITE_ONLY
- | ParcelFileDescriptor.MODE_CREATE
- | ParcelFileDescriptor.MODE_APPEND;
- } else if ("rw".equals(mode)) {
- modeBits = ParcelFileDescriptor.MODE_READ_WRITE
- | ParcelFileDescriptor.MODE_CREATE;
- } else if ("rwt".equals(mode)) {
- modeBits = ParcelFileDescriptor.MODE_READ_WRITE
- | ParcelFileDescriptor.MODE_CREATE
- | ParcelFileDescriptor.MODE_TRUNCATE;
- } else {
- throw new FileNotFoundException("Bad mode for " + uri + ": "
- + mode);
- }
- return modeBits;
- }
-
/**
* Inserts a row into a table at the given URL.
*
diff --git a/core/java/android/content/ContentServiceNative.java b/core/java/android/content/ContentServiceNative.java
index 364f9ee..f050501 100644
--- a/core/java/android/content/ContentServiceNative.java
+++ b/core/java/android/content/ContentServiceNative.java
@@ -75,13 +75,6 @@ abstract class ContentServiceNative extends Binder implements IContentService
{
try {
switch (code) {
- case 5038: {
- data.readString(); // ignore the interface token that service generated
- Uri uri = Uri.parse(data.readString());
- notifyChange(uri, null, false, false);
- return true;
- }
-
case REGISTER_CONTENT_OBSERVER_TRANSACTION: {
Uri uri = Uri.CREATOR.createFromParcel(data);
boolean notifyForDescendents = data.readInt() != 0;
diff --git a/core/java/android/content/IContentProvider.java b/core/java/android/content/IContentProvider.java
index 0606956..a6ef46f 100644
--- a/core/java/android/content/IContentProvider.java
+++ b/core/java/android/content/IContentProvider.java
@@ -16,7 +16,6 @@
package android.content;
-import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.database.CursorWindow;
import android.database.IBulkCursor;
@@ -53,8 +52,6 @@ public interface IContentProvider extends IInterface {
String[] selectionArgs) throws RemoteException;
public ParcelFileDescriptor openFile(Uri url, String mode)
throws RemoteException, FileNotFoundException;
- public AssetFileDescriptor openAssetFile(Uri url, String mode)
- throws RemoteException, FileNotFoundException;
public ISyncAdapter getSyncAdapter() throws RemoteException;
/* IPC constants */
@@ -68,5 +65,4 @@ public interface IContentProvider extends IInterface {
static final int GET_SYNC_ADAPTER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 10;
static final int BULK_INSERT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 12;
static final int OPEN_FILE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 13;
- static final int OPEN_ASSET_FILE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 14;
}
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index e1c1f64..c1c3b49 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -522,7 +522,6 @@ import java.util.Set;
* <li> {@link #CATEGORY_ALTERNATIVE}
* <li> {@link #CATEGORY_SELECTED_ALTERNATIVE}
* <li> {@link #CATEGORY_LAUNCHER}
- * <li> {@link #CATEGORY_INFO}
* <li> {@link #CATEGORY_HOME}
* <li> {@link #CATEGORY_PREFERENCE}
* <li> {@link #CATEGORY_GADGET}
@@ -1547,13 +1546,6 @@ public class Intent implements Parcelable {
@SdkConstant(SdkConstantType.INTENT_CATEGORY)
public static final String CATEGORY_LAUNCHER = "android.intent.category.LAUNCHER";
/**
- * Provides information about the package it is in; typically used if
- * a package does not contain a {@link #CATEGORY_LAUNCHER} to provide
- * a front-door to the user without having to be shown in the all apps list.
- */
- @SdkConstant(SdkConstantType.INTENT_CATEGORY)
- public static final String CATEGORY_INFO = "android.intent.category.INFO";
- /**
* This is the home activity, that is the first activity that is displayed
* when the device boots.
*/
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 7287d9c..698f27f 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -480,26 +480,6 @@ public abstract class PackageManager {
throws NameNotFoundException;
/**
- * Return a "good" intent to launch a front-door activity in a package,
- * for use for example to implement an "open" button when browsing through
- * packages. The current implementation will look first for a main
- * activity in the category {@link Intent#CATEGORY_INFO}, next for a
- * main activity in the category {@link Intent#CATEGORY_LAUNCHER}, or return
- * null if neither are found.
- *
- * <p>Throws {@link NameNotFoundException} if a package with the given
- * name can not be found on the system.
- *
- * @param packageName The name of the package to inspect.
- *
- * @return Returns either a fully-qualified Intent that can be used to
- * launch the main activity in the package, or null if the package does
- * not contain such an activity.
- */
- public abstract Intent getLaunchIntentForPackage(String packageName)
- throws NameNotFoundException;
-
- /**
* Return an array of all of the secondary group-ids that have been
* assigned to a package.
*
diff --git a/core/java/android/content/res/AssetFileDescriptor.java b/core/java/android/content/res/AssetFileDescriptor.java
index 231e3e2..4a073f7 100644
--- a/core/java/android/content/res/AssetFileDescriptor.java
+++ b/core/java/android/content/res/AssetFileDescriptor.java
@@ -16,13 +16,9 @@
package android.content.res;
-import android.os.Parcel;
import android.os.ParcelFileDescriptor;
-import android.os.Parcelable;
import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
import java.io.IOException;
/**
@@ -30,32 +26,16 @@ import java.io.IOException;
* opened FileDescriptor that can be used to read the data, as well as the
* offset and length of that entry's data in the file.
*/
-public class AssetFileDescriptor implements Parcelable {
- /**
- * Length used with {@link #AssetFileDescriptor(ParcelFileDescriptor, long, long)}
- * and {@link #getDeclaredLength} when a length has not been declared. This means
- * the data extends to the end of the file.
- */
- public static final long UNKNOWN_LENGTH = -1;
-
+public class AssetFileDescriptor {
private final ParcelFileDescriptor mFd;
private final long mStartOffset;
private final long mLength;
/**
* Create a new AssetFileDescriptor from the given values.
- * @param fd The underlying file descriptor.
- * @param startOffset The location within the file that the asset starts.
- * This must be 0 if length is UNKNOWN_LENGTH.
- * @param length The number of bytes of the asset, or
- * {@link #UNKNOWN_LENGTH if it extends to the end of the file.
*/
public AssetFileDescriptor(ParcelFileDescriptor fd, long startOffset,
long length) {
- if (length < 0 && startOffset != 0) {
- throw new IllegalArgumentException(
- "startOffset must be 0 when using UNKNOWN_LENGTH");
- }
mFd = fd;
mStartOffset = startOffset;
mLength = length;
@@ -86,33 +66,9 @@ public class AssetFileDescriptor implements Parcelable {
}
/**
- * Returns the total number of bytes of this asset entry's data. May be
- * {@link #UNKNOWN_LENGTH} if the asset extends to the end of the file.
- * If the AssetFileDescriptor was constructed with {@link #UNKNOWN_LENGTH},
- * this will use {@link ParcelFileDescriptor#getStatSize()
- * ParcelFileDescriptor.getStatSize()} to find the total size of the file,
- * returning that number if found or {@link #UNKNOWN_LENGTH} if it could
- * not be determined.
- *
- * @see #getDeclaredLength()
+ * Returns the total number of bytes of this asset entry's data.
*/
public long getLength() {
- if (mLength >= 0) {
- return mLength;
- }
- long len = mFd.getStatSize();
- return len >= 0 ? len : UNKNOWN_LENGTH;
- }
-
- /**
- * Return the actual number of bytes that were declared when the
- * AssetFileDescriptor was constructed. Will be
- * {@link #UNKNOWN_LENGTH} if the length was not declared, meaning data
- * should be read to the end of the file.
- *
- * @see #getDeclaredLength()
- */
- public long getDeclaredLength() {
return mLength;
}
@@ -122,227 +78,4 @@ public class AssetFileDescriptor implements Parcelable {
public void close() throws IOException {
mFd.close();
}
-
- /**
- * Create and return a new auto-close input stream for this asset. This
- * will either return a full asset {@link AutoCloseInputStream}, or
- * an underlying {@link ParcelFileDescriptor.AutoCloseInputStream
- * ParcelFileDescriptor.AutoCloseInputStream} depending on whether the
- * the object represents a complete file or sub-section of a file. You
- * should only call this once for a particular asset.
- */
- public FileInputStream createInputStream() throws IOException {
- if (mLength < 0) {
- return new ParcelFileDescriptor.AutoCloseInputStream(mFd);
- }
- return new AutoCloseInputStream(this);
- }
-
- /**
- * Create and return a new auto-close output stream for this asset. This
- * will either return a full asset {@link AutoCloseOutputStream}, or
- * an underlying {@link ParcelFileDescriptor.AutoCloseOutputStream
- * ParcelFileDescriptor.AutoCloseOutputStream} depending on whether the
- * the object represents a complete file or sub-section of a file. You
- * should only call this once for a particular asset.
- */
- public FileOutputStream createOutputStream() throws IOException {
- if (mLength < 0) {
- return new ParcelFileDescriptor.AutoCloseOutputStream(mFd);
- }
- return new AutoCloseOutputStream(this);
- }
-
- @Override
- public String toString() {
- return "{AssetFileDescriptor: " + mFd
- + " start=" + mStartOffset + " len=" + mLength + "}";
- }
-
- /**
- * An InputStream you can create on a ParcelFileDescriptor, which will
- * take care of calling {@link ParcelFileDescriptor#close
- * ParcelFileDescritor.close()} for you when the stream is closed.
- */
- public static class AutoCloseInputStream
- extends ParcelFileDescriptor.AutoCloseInputStream {
- private long mRemaining;
-
- public AutoCloseInputStream(AssetFileDescriptor fd) throws IOException {
- super(fd.getParcelFileDescriptor());
- super.skip(fd.getStartOffset());
- mRemaining = (int)fd.getLength();
- }
-
- @Override
- public int available() throws IOException {
- return mRemaining >= 0
- ? (mRemaining < 0x7fffffff ? (int)mRemaining : 0x7fffffff)
- : super.available();
- }
-
- @Override
- public int read() throws IOException {
- if (mRemaining >= 0) {
- if (mRemaining == 0) return -1;
- int res = super.read();
- if (res >= 0) mRemaining--;
- return res;
- }
-
- return super.read();
- }
-
- @Override
- public int read(byte[] buffer, int offset, int count) throws IOException {
- if (mRemaining >= 0) {
- if (mRemaining == 0) return -1;
- if (count > mRemaining) count = (int)mRemaining;
- int res = super.read(buffer, offset, count);
- if (res >= 0) mRemaining -= res;
- return res;
- }
-
- return super.read(buffer, offset, count);
- }
-
- @Override
- public int read(byte[] buffer) throws IOException {
- if (mRemaining >= 0) {
- if (mRemaining == 0) return -1;
- int count = buffer.length;
- if (count > mRemaining) count = (int)mRemaining;
- int res = super.read(buffer, 0, count);
- if (res >= 0) mRemaining -= res;
- return res;
- }
-
- return super.read(buffer);
- }
-
- @Override
- public long skip(long count) throws IOException {
- if (mRemaining >= 0) {
- if (mRemaining == 0) return -1;
- if (count > mRemaining) count = mRemaining;
- long res = super.skip(count);
- if (res >= 0) mRemaining -= res;
- return res;
- }
-
- // TODO Auto-generated method stub
- return super.skip(count);
- }
-
- @Override
- public void mark(int readlimit) {
- if (mRemaining >= 0) {
- // Not supported.
- return;
- }
- super.mark(readlimit);
- }
-
- @Override
- public boolean markSupported() {
- if (mRemaining >= 0) {
- return false;
- }
- return super.markSupported();
- }
-
- @Override
- public synchronized void reset() throws IOException {
- if (mRemaining >= 0) {
- // Not supported.
- return;
- }
- super.reset();
- }
- }
-
- /**
- * An OutputStream you can create on a ParcelFileDescriptor, which will
- * take care of calling {@link ParcelFileDescriptor#close
- * ParcelFileDescritor.close()} for you when the stream is closed.
- */
- public static class AutoCloseOutputStream
- extends ParcelFileDescriptor.AutoCloseOutputStream {
- private long mRemaining;
-
- public AutoCloseOutputStream(AssetFileDescriptor fd) throws IOException {
- super(fd.getParcelFileDescriptor());
- if (fd.getParcelFileDescriptor().seekTo(fd.getStartOffset()) < 0) {
- throw new IOException("Unable to seek");
- }
- mRemaining = (int)fd.getLength();
- }
-
- @Override
- public void write(byte[] buffer, int offset, int count) throws IOException {
- if (mRemaining >= 0) {
- if (mRemaining == 0) return;
- if (count > mRemaining) count = (int)mRemaining;
- super.write(buffer, offset, count);
- mRemaining -= count;
- return;
- }
-
- super.write(buffer, offset, count);
- }
-
- @Override
- public void write(byte[] buffer) throws IOException {
- if (mRemaining >= 0) {
- if (mRemaining == 0) return;
- int count = buffer.length;
- if (count > mRemaining) count = (int)mRemaining;
- super.write(buffer);
- mRemaining -= count;
- return;
- }
-
- super.write(buffer);
- }
-
- @Override
- public void write(int oneByte) throws IOException {
- if (mRemaining >= 0) {
- if (mRemaining == 0) return;
- super.write(oneByte);
- mRemaining--;
- return;
- }
-
- super.write(oneByte);
- }
- }
-
-
- /* Parcelable interface */
- public int describeContents() {
- return mFd.describeContents();
- }
-
- public void writeToParcel(Parcel out, int flags) {
- mFd.writeToParcel(out, flags);
- out.writeLong(mStartOffset);
- out.writeLong(mLength);
- }
-
- AssetFileDescriptor(Parcel src) {
- mFd = ParcelFileDescriptor.CREATOR.createFromParcel(src);
- mStartOffset = src.readLong();
- mLength = src.readLong();
- }
-
- public static final Parcelable.Creator<AssetFileDescriptor> CREATOR
- = new Parcelable.Creator<AssetFileDescriptor>() {
- public AssetFileDescriptor createFromParcel(Parcel in) {
- return new AssetFileDescriptor(in);
- }
- public AssetFileDescriptor[] newArray(int size) {
- return new AssetFileDescriptor[size];
- }
- };
}
diff --git a/core/java/android/content/res/ColorStateList.java b/core/java/android/content/res/ColorStateList.java
index 0f3f270..17cb687 100644
--- a/core/java/android/content/res/ColorStateList.java
+++ b/core/java/android/content/res/ColorStateList.java
@@ -16,6 +16,8 @@
package android.content.res;
+import com.google.android.collect.Lists;
+
import com.android.internal.util.ArrayUtils;
import org.xmlpull.v1.XmlPullParser;
@@ -111,8 +113,7 @@ public class ColorStateList implements Parcelable {
* Create a ColorStateList from an XML document, given a set of {@link Resources}.
*/
public static ColorStateList createFromXml(Resources r, XmlPullParser parser)
- throws XmlPullParserException, IOException {
-
+ throws XmlPullParserException, IOException {
AttributeSet attrs = Xml.asAttributeSet(parser);
int type;
@@ -124,16 +125,19 @@ public class ColorStateList implements Parcelable {
throw new XmlPullParserException("No start tag found");
}
- return createFromXmlInner(r, parser, attrs);
+ final ColorStateList colorStateList = createFromXmlInner(r, parser, attrs);
+
+ return colorStateList;
}
/* Create from inside an XML document. Called on a parser positioned at
* a tag in an XML document, tries to create a ColorStateList from that tag.
* Returns null if the tag is not a valid ColorStateList.
*/
- private static ColorStateList createFromXmlInner(Resources r, XmlPullParser parser,
- AttributeSet attrs) throws XmlPullParserException, IOException {
-
+ private static ColorStateList createFromXmlInner(Resources r,
+ XmlPullParser parser,
+ AttributeSet attrs)
+ throws XmlPullParserException, IOException {
ColorStateList colorStateList;
final String name = parser.getName();
@@ -142,7 +146,8 @@ public class ColorStateList implements Parcelable {
colorStateList = new ColorStateList();
} else {
throw new XmlPullParserException(
- parser.getPositionDescription() + ": invalid drawable tag " + name);
+ parser.getPositionDescription() + ": invalid drawable tag "
+ + name);
}
colorStateList.inflate(r, parser, attrs);
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index 1a963f6..5a0daea 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -46,7 +46,6 @@ public class Resources {
static final String TAG = "Resources";
private static final boolean DEBUG_LOAD = false;
private static final boolean DEBUG_CONFIG = false;
- private static final boolean TRACE_FOR_PRELOAD = false;
private static final int sSdkVersion = SystemProperties.getInt(
"ro.build.version.sdk", 0);
@@ -58,8 +57,6 @@ public class Resources {
// single-threaded, and after that these are immutable.
private static final SparseArray<Drawable.ConstantState> mPreloadedDrawables
= new SparseArray<Drawable.ConstantState>();
- private static final SparseArray<ColorStateList> mPreloadedColorStateLists
- = new SparseArray<ColorStateList>();
private static boolean mPreloaded;
/*package*/ final TypedValue mTmpValue = new TypedValue();
@@ -81,7 +78,7 @@ public class Resources {
private final Configuration mConfiguration = new Configuration();
/*package*/ final DisplayMetrics mMetrics = new DisplayMetrics();
PluralRules mPluralRule;
-
+
/**
* This exception is thrown by the resource APIs when a requested resource
* can not be found.
@@ -93,7 +90,7 @@ public class Resources {
public NotFoundException(String name) {
super(name);
}
- }
+ };
/**
* Create a new Resources object on top of an existing set of assets in an
@@ -1232,9 +1229,7 @@ public class Resources {
width = mMetrics.widthPixels;
height = mMetrics.heightPixels;
} else {
- //noinspection SuspiciousNameCombination
width = mMetrics.heightPixels;
- //noinspection SuspiciousNameCombination
height = mMetrics.widthPixels;
}
int keyboardHidden = mConfiguration.keyboardHidden;
@@ -1347,7 +1342,6 @@ public class Resources {
try {
return Integer.parseInt(name);
} catch (Exception e) {
- // Ignore
}
return mAssets.getResourceIdentifier(name, defType, defPackage);
}
@@ -1581,18 +1575,21 @@ public class Resources {
/*package*/ Drawable loadDrawable(TypedValue value, int id)
throws NotFoundException {
-
- if (TRACE_FOR_PRELOAD) {
- // Log only framework resources
- if ((id >>> 24) == 0x1) {
- final String name = getResourceName(id);
- if (name != null) android.util.Log.d("PreloadDrawable", name);
- }
+ if (value.type >= TypedValue.TYPE_FIRST_COLOR_INT
+ && value.type <= TypedValue.TYPE_LAST_COLOR_INT) {
+ // Should we be caching these? If we use constant colors much
+ // at all, most likely...
+ //System.out.println("Creating drawable for color: #" +
+ // Integer.toHexString(value.data));
+ Drawable dr = new ColorDrawable(value.data);
+ dr.setChangingConfigurations(value.changingConfigurations);
+ return dr;
}
- final int key = (value.assetCookie << 24) | value.data;
+ final int key = (value.assetCookie<<24)|value.data;
Drawable dr = getCachedDrawable(key);
-
+ //System.out.println("Cached drawable @ #" +
+ // Integer.toHexString(key.intValue()) + ": " + dr);
if (dr != null) {
return dr;
}
@@ -1600,52 +1597,46 @@ public class Resources {
Drawable.ConstantState cs = mPreloadedDrawables.get(key);
if (cs != null) {
dr = cs.newDrawable();
+
} else {
- if (value.type >= TypedValue.TYPE_FIRST_COLOR_INT &&
- value.type <= TypedValue.TYPE_LAST_COLOR_INT) {
- dr = new ColorDrawable(value.data);
+ if (value.string == null) {
+ throw new NotFoundException(
+ "Resource is not a Drawable (color or path): " + value);
}
-
- if (dr == null) {
- if (value.string == null) {
- throw new NotFoundException(
- "Resource is not a Drawable (color or path): " + value);
+
+ String file = value.string.toString();
+
+ if (DEBUG_LOAD) Log.v(TAG, "Loading drawable for cookie "
+ + value.assetCookie + ": " + file);
+
+ if (file.endsWith(".xml")) {
+ try {
+ XmlResourceParser rp = loadXmlResourceParser(
+ file, id, value.assetCookie, "drawable");
+ dr = Drawable.createFromXml(this, rp);
+ rp.close();
+ } catch (Exception e) {
+ NotFoundException rnf = new NotFoundException(
+ "File " + file + " from drawable resource ID #0x"
+ + Integer.toHexString(id));
+ rnf.initCause(e);
+ throw rnf;
}
-
- String file = value.string.toString();
-
- if (DEBUG_LOAD) Log.v(TAG, "Loading drawable for cookie "
- + value.assetCookie + ": " + file);
-
- if (file.endsWith(".xml")) {
- try {
- XmlResourceParser rp = loadXmlResourceParser(
- file, id, value.assetCookie, "drawable");
- dr = Drawable.createFromXml(this, rp);
- rp.close();
- } catch (Exception e) {
- NotFoundException rnf = new NotFoundException(
- "File " + file + " from drawable resource ID #0x"
- + Integer.toHexString(id));
- rnf.initCause(e);
- throw rnf;
- }
-
- } else {
- try {
- InputStream is = mAssets.openNonAsset(
- value.assetCookie, file, AssetManager.ACCESS_BUFFER);
- // System.out.println("Opened file " + file + ": " + is);
- dr = Drawable.createFromResourceStream(this, value, is, file);
- is.close();
- // System.out.println("Created stream: " + dr);
- } catch (Exception e) {
- NotFoundException rnf = new NotFoundException(
- "File " + file + " from drawable resource ID #0x"
- + Integer.toHexString(id));
- rnf.initCause(e);
- throw rnf;
- }
+
+ } else {
+ try {
+ InputStream is = mAssets.openNonAsset(
+ value.assetCookie, file, AssetManager.ACCESS_BUFFER);
+ // System.out.println("Opened file " + file + ": " + is);
+ dr = Drawable.createFromResourceStream(this, value, is, file);
+ is.close();
+ // System.out.println("Created stream: " + dr);
+ } catch (Exception e) {
+ NotFoundException rnf = new NotFoundException(
+ "File " + file + " from drawable resource ID #0x"
+ + Integer.toHexString(id));
+ rnf.initCause(e);
+ throw rnf;
}
}
}
@@ -1656,13 +1647,13 @@ public class Resources {
if (cs != null) {
if (mPreloading) {
mPreloadedDrawables.put(key, cs);
- } else {
- synchronized (mTmpValue) {
- //Log.i(TAG, "Saving cached drawable @ #" +
- // Integer.toHexString(key.intValue())
- // + " in " + this + ": " + cs);
- mDrawableCache.put(key, new WeakReference<Drawable.ConstantState>(cs));
- }
+ }
+ synchronized (mTmpValue) {
+ //Log.i(TAG, "Saving cached drawable @ #" +
+ // Integer.toHexString(key.intValue())
+ // + " in " + this + ": " + cs);
+ mDrawableCache.put(
+ key, new WeakReference<Drawable.ConstantState>(cs));
}
}
}
@@ -1670,7 +1661,7 @@ public class Resources {
return dr;
}
- private Drawable getCachedDrawable(int key) {
+ private final Drawable getCachedDrawable(int key) {
synchronized (mTmpValue) {
WeakReference<Drawable.ConstantState> wr = mDrawableCache.get(key);
if (wr != null) { // we have the key
@@ -1691,40 +1682,13 @@ public class Resources {
/*package*/ ColorStateList loadColorStateList(TypedValue value, int id)
throws NotFoundException {
- if (TRACE_FOR_PRELOAD) {
- // Log only framework resources
- if ((id >>> 24) == 0x1) {
- final String name = getResourceName(id);
- if (name != null) android.util.Log.d("PreloadColorStateList", name);
- }
- }
-
- final int key = (value.assetCookie << 24) | value.data;
-
- ColorStateList csl;
-
- if (value.type >= TypedValue.TYPE_FIRST_COLOR_INT &&
- value.type <= TypedValue.TYPE_LAST_COLOR_INT) {
-
- csl = mPreloadedColorStateLists.get(key);
- if (csl != null) {
- return csl;
- }
-
- csl = ColorStateList.valueOf(value.data);
- if (mPreloading) {
- mPreloadedColorStateLists.put(key, csl);
- }
-
- return csl;
+ if (value.type >= TypedValue.TYPE_FIRST_COLOR_INT
+ && value.type <= TypedValue.TYPE_LAST_COLOR_INT) {
+ return ColorStateList.valueOf(value.data);
}
- csl = getCachedColorStateList(key);
- if (csl != null) {
- return csl;
- }
-
- csl = mPreloadedColorStateLists.get(key);
+ final int key = (value.assetCookie<<24)|value.data;
+ ColorStateList csl = getCachedColorStateList(key);
if (csl != null) {
return csl;
}
@@ -1756,16 +1720,12 @@ public class Resources {
}
if (csl != null) {
- if (mPreloading) {
- mPreloadedColorStateLists.put(key, csl);
- } else {
- synchronized (mTmpValue) {
- //Log.i(TAG, "Saving cached color state list @ #" +
- // Integer.toHexString(key.intValue())
- // + " in " + this + ": " + csl);
- mColorStateListCache.put(
- key, new WeakReference<ColorStateList>(csl));
- }
+ synchronized (mTmpValue) {
+ //Log.i(TAG, "Saving cached color state list @ #" +
+ // Integer.toHexString(key.intValue())
+ // + " in " + this + ": " + csl);
+ mColorStateListCache.put(
+ key, new WeakReference<ColorStateList>(csl));
}
}
diff --git a/core/java/android/content/res/StringBlock.java b/core/java/android/content/res/StringBlock.java
index e684cb8..3df7708 100644
--- a/core/java/android/content/res/StringBlock.java
+++ b/core/java/android/content/res/StringBlock.java
@@ -141,8 +141,6 @@ final class StringBlock {
int type = style[i];
if (localLOGV) Log.v(TAG, "Applying style span id=" + type
+ ", start=" + style[i+1] + ", end=" + style[i+2]);
-
-
if (type == ids.boldId) {
buffer.setSpan(new StyleSpan(Typeface.BOLD),
style[i+1], style[i+2]+1,
@@ -180,8 +178,9 @@ final class StringBlock {
style[i+1], style[i+2]+1,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
} else if (type == ids.listItemId) {
- addParagraphSpan(buffer, new BulletSpan(10),
- style[i+1], style[i+2]+1);
+ buffer.setSpan(new BulletSpan(10),
+ style[i+1], style[i+2]+1,
+ Spannable.SPAN_PARAGRAPH);
} else if (type == ids.marqueeId) {
buffer.setSpan(TextUtils.TruncateAt.MARQUEE,
style[i+1], style[i+2]+1,
@@ -195,8 +194,9 @@ final class StringBlock {
sub = subtag(tag, ";height=");
if (sub != null) {
int size = Integer.parseInt(sub);
- addParagraphSpan(buffer, new Height(size),
- style[i+1], style[i+2]+1);
+ buffer.setSpan(new Height(size),
+ style[i+1], style[i+2]+1,
+ Spannable.SPAN_PARAGRAPH);
}
sub = subtag(tag, ";size=");
@@ -231,28 +231,6 @@ final class StringBlock {
style[i+1], style[i+2]+1,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
- } else if (tag.startsWith("annotation;")) {
- int len = tag.length();
- int next;
-
- for (int t = tag.indexOf(';'); t < len; t = next) {
- int eq = tag.indexOf('=', t);
- if (eq < 0) {
- break;
- }
-
- next = tag.indexOf(';', eq);
- if (next < 0) {
- next = len;
- }
-
- String key = tag.substring(t + 1, eq);
- String value = tag.substring(eq + 1, next);
-
- buffer.setSpan(new Annotation(key, value),
- style[i+1], style[i+2]+1,
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- }
}
}
@@ -261,34 +239,6 @@ final class StringBlock {
return new SpannedString(buffer);
}
- /**
- * If a translator has messed up the edges of paragraph-level markup,
- * fix it to actually cover the entire paragraph that it is attached to
- * instead of just whatever range they put it on.
- */
- private static void addParagraphSpan(Spannable buffer, Object what,
- int start, int end) {
- int len = buffer.length();
-
- if (start != 0 && start != len && buffer.charAt(start - 1) != '\n') {
- for (start--; start > 0; start--) {
- if (buffer.charAt(start - 1) == '\n') {
- break;
- }
- }
- }
-
- if (end != 0 && end != len && buffer.charAt(end - 1) != '\n') {
- for (end++; end < len; end++) {
- if (buffer.charAt(end - 1) == '\n') {
- break;
- }
- }
- }
-
- buffer.setSpan(what, start, end, Spannable.SPAN_PARAGRAPH);
- }
-
private static String subtag(String full, String attribute) {
int start = full.indexOf(attribute);
if (start < 0) {
diff --git a/core/java/android/content/res/TypedArray.java b/core/java/android/content/res/TypedArray.java
index 3a32c03..82a57dd 100644
--- a/core/java/android/content/res/TypedArray.java
+++ b/core/java/android/content/res/TypedArray.java
@@ -438,34 +438,6 @@ public class TypedArray {
throw new RuntimeException(getPositionDescription()
+ ": You must supply a " + name + " attribute.");
}
-
- /**
- * Special version of {@link #getDimensionPixelSize} for retrieving
- * {@link android.view.ViewGroup}'s layout_width and layout_height
- * attributes. This is only here for performance reasons; applications
- * should use {@link #getDimensionPixelSize}.
- *
- * @param index Index of the attribute to retrieve.
- * @param defValue The default value to return if this attribute is not
- * default or contains the wrong type of data.
- *
- * @return Attribute dimension value multiplied by the appropriate
- * metric and truncated to integer pixels.
- */
- public int getLayoutDimension(int index, int defValue) {
- index *= AssetManager.STYLE_NUM_ENTRIES;
- final int[] data = mData;
- final int type = data[index+AssetManager.STYLE_TYPE];
- if (type >= TypedValue.TYPE_FIRST_INT
- && type <= TypedValue.TYPE_LAST_INT) {
- return data[index+AssetManager.STYLE_DATA];
- } else if (type == TypedValue.TYPE_DIMENSION) {
- return TypedValue.complexToDimensionPixelSize(
- data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
- }
-
- return defValue;
- }
/**
* Retrieve a fractional unit attribute at <var>index</var>.
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java
index 2af080a..87bb277 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -778,9 +778,9 @@ public class SQLiteDatabase extends SQLiteClosable {
}
/**
- * Returns the current database page size, in bytes.
+ * Returns the maximum size the database may grow to.
*
- * @return the database page size, in bytes
+ * @return the new maximum database size
*/
public long getPageSize() {
SQLiteStatement prog = null;
diff --git a/core/java/android/database/sqlite/SQLiteStatement.java b/core/java/android/database/sqlite/SQLiteStatement.java
index 5889ad9..d169259 100644
--- a/core/java/android/database/sqlite/SQLiteStatement.java
+++ b/core/java/android/database/sqlite/SQLiteStatement.java
@@ -17,7 +17,6 @@
package android.database.sqlite;
import android.os.SystemClock;
-import android.util.Log;
/**
* A pre-compiled statement against a {@link SQLiteDatabase} that can be reused.
@@ -27,10 +26,6 @@ import android.util.Log;
*/
public class SQLiteStatement extends SQLiteProgram
{
- private static final String TAG = "SQLiteStatement";
-
- private final String mSql;
-
/**
* Don't use SQLiteStatement constructor directly, please use
* {@link SQLiteDatabase#compileStatement(String)}
@@ -39,11 +34,6 @@ public class SQLiteStatement extends SQLiteProgram
*/
/* package */ SQLiteStatement(SQLiteDatabase db, String sql) {
super(db, sql);
- if (SQLiteDebug.DEBUG_SQL_STATEMENTS) {
- mSql = sql;
- } else {
- mSql = null;
- }
}
/**
@@ -60,9 +50,6 @@ public class SQLiteStatement extends SQLiteProgram
acquireReference();
try {
- if (SQLiteDebug.DEBUG_SQL_STATEMENTS) {
- Log.v(TAG, "execute() for [" + mSql + "]");
- }
native_execute();
if (logStats) {
mDatabase.logTimeStat(false /* write */, startTime, SystemClock.elapsedRealtime());
@@ -90,9 +77,6 @@ public class SQLiteStatement extends SQLiteProgram
acquireReference();
try {
- if (SQLiteDebug.DEBUG_SQL_STATEMENTS) {
- Log.v(TAG, "executeInsert() for [" + mSql + "]");
- }
native_execute();
if (logStats) {
mDatabase.logTimeStat(false /* write */, startTime, SystemClock.elapsedRealtime());
@@ -119,9 +103,6 @@ public class SQLiteStatement extends SQLiteProgram
acquireReference();
try {
- if (SQLiteDebug.DEBUG_SQL_STATEMENTS) {
- Log.v(TAG, "simpleQueryForLong() for [" + mSql + "]");
- }
long retValue = native_1x1_long();
if (logStats) {
mDatabase.logTimeStat(false /* write */, startTime, SystemClock.elapsedRealtime());
@@ -148,9 +129,6 @@ public class SQLiteStatement extends SQLiteProgram
acquireReference();
try {
- if (SQLiteDebug.DEBUG_SQL_STATEMENTS) {
- Log.v(TAG, "simpleQueryForString() for [" + mSql + "]");
- }
String retValue = native_1x1_string();
if (logStats) {
mDatabase.logTimeStat(false /* write */, startTime, SystemClock.elapsedRealtime());
diff --git a/core/java/android/gadget/GadgetHost.java b/core/java/android/gadget/GadgetHost.java
index 3d88b58..31aed32 100644
--- a/core/java/android/gadget/GadgetHost.java
+++ b/core/java/android/gadget/GadgetHost.java
@@ -19,7 +19,6 @@ package android.gadget;
import android.content.Context;
import android.os.Handler;
import android.os.IBinder;
-import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -63,11 +62,7 @@ public class GadgetHost {
}
}
- class UpdateHandler extends Handler {
- public UpdateHandler(Looper looper) {
- super(looper);
- }
-
+ Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case HANDLE_UPDATE: {
@@ -80,9 +75,7 @@ public class GadgetHost {
}
}
}
- }
-
- Handler mHandler;
+ };
int mHostId;
Callbacks mCallbacks = new Callbacks();
@@ -91,7 +84,6 @@ public class GadgetHost {
public GadgetHost(Context context, int hostId) {
mContext = context;
mHostId = hostId;
- mHandler = new UpdateHandler(context.getMainLooper());
synchronized (sServiceLock) {
if (sService == null) {
IBinder b = ServiceManager.getService(Context.GADGET_SERVICE);
diff --git a/core/java/android/gadget/GadgetHostView.java b/core/java/android/gadget/GadgetHostView.java
index 5cbd988..a985bd4 100644
--- a/core/java/android/gadget/GadgetHostView.java
+++ b/core/java/android/gadget/GadgetHostView.java
@@ -18,13 +18,7 @@ package android.gadget;
import android.content.Context;
import android.content.pm.PackageManager;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
import android.graphics.Color;
-import android.graphics.Paint;
-import android.os.Handler;
-import android.os.Message;
-import android.os.SystemClock;
import android.util.Config;
import android.util.Log;
import android.view.Gravity;
@@ -35,23 +29,16 @@ import android.view.animation.Animation;
import android.widget.FrameLayout;
import android.widget.RemoteViews;
import android.widget.TextView;
+import android.widget.ViewAnimator;
/**
* Provides the glue to show gadget views. This class offers automatic animation
* between updates, and will try recycling old views for each incoming
* {@link RemoteViews}.
*/
-public class GadgetHostView extends FrameLayout {
+public class GadgetHostView extends ViewAnimator implements Animation.AnimationListener {
static final String TAG = "GadgetHostView";
- static final boolean LOGD = false;
- static final boolean CROSSFADE = false;
-
- static final int VIEW_MODE_NOINIT = 0;
- static final int VIEW_MODE_CONTENT = 1;
- static final int VIEW_MODE_ERROR = 2;
- static final int VIEW_MODE_DEFAULT = 3;
-
- static final int FADE_DURATION = 1000;
+ static final boolean LOGD = Config.LOGD || true;
// When we're inflating the initialLayout for a gadget, we only allow
// views that are allowed in RemoteViews.
@@ -60,17 +47,28 @@ public class GadgetHostView extends FrameLayout {
return clazz.isAnnotationPresent(RemoteViews.RemoteView.class);
}
};
-
- Context mContext;
+
+ Context mLocalContext;
int mGadgetId;
GadgetProviderInfo mInfo;
- View mView;
- int mViewMode = VIEW_MODE_NOINIT;
- int mLayoutId = -1;
- long mFadeStartTime = -1;
- Bitmap mOld;
- Paint mOldPaint = new Paint();
+
+ View mActiveView = null;
+ View mStaleView = null;
+
+ int mActiveLayoutId = -1;
+ int mStaleLayoutId = -1;
+
+ /**
+ * Last set of {@link RemoteViews} applied to {@link #mActiveView}
+ */
+ RemoteViews mActiveActions = null;
+
+ /**
+ * Flag indicating that {@link #mActiveActions} has been applied to
+ * {@link #mStaleView}, meaning it's readyto recycle.
+ */
+ boolean mStalePrepared = false;
/**
* Create a host view. Uses default fade animations.
@@ -88,13 +86,27 @@ public class GadgetHostView extends FrameLayout {
*/
public GadgetHostView(Context context, int animationIn, int animationOut) {
super(context);
- mContext = context;
+ mLocalContext = context;
+
+ // Prepare our default transition animations
+ setAnimateFirstView(true);
+ setInAnimation(context, animationIn);
+ setOutAnimation(context, animationOut);
+
+ // Watch for animation events to prepare recycling
+ Animation inAnimation = getInAnimation();
+ if (inAnimation != null) {
+ inAnimation.setAnimationListener(this);
+ }
}
/**
* Set the gadget that will be displayed by this view.
*/
public void setGadget(int gadgetId, GadgetProviderInfo info) {
+ if (mInfo != null) {
+ // TODO: remove the old view, or whatever
+ }
mGadgetId = gadgetId;
mInfo = info;
}
@@ -107,141 +119,92 @@ public class GadgetHostView extends FrameLayout {
return mInfo;
}
+ public void onAnimationEnd(Animation animation) {
+ // When our transition animation finishes, we should try bringing our
+ // newly-stale view up to the current view.
+ if (mActiveActions != null &&
+ mStaleLayoutId == mActiveActions.getLayoutId()) {
+ if (LOGD) Log.d(TAG, "after animation, layoutId matched so we're recycling old view");
+ mActiveActions.reapply(mLocalContext, mStaleView);
+ mStalePrepared = true;
+ }
+ }
+
+ public void onAnimationRepeat(Animation animation) {
+ }
+
+ public void onAnimationStart(Animation animation) {
+ }
+
/**
* Process a set of {@link RemoteViews} coming in as an update from the
* gadget provider. Will animate into these new views as needed.
*/
public void updateGadget(RemoteViews remoteViews) {
- if (LOGD) Log.d(TAG, "updateGadget called mOld=" + mOld);
+ if (LOGD) Log.d(TAG, "updateGadget called");
boolean recycled = false;
- View content = null;
+ View newContent = null;
Exception exception = null;
- // Capture the old view into a bitmap so we can do the crossfade.
- if (CROSSFADE) {
- if (mFadeStartTime < 0) {
- if (mView != null) {
- final int width = mView.getWidth();
- final int height = mView.getHeight();
- try {
- mOld = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
- } catch (OutOfMemoryError e) {
- // we just won't do the fade
- mOld = null;
- }
- if (mOld != null) {
- //mView.drawIntoBitmap(mOld);
- }
- }
- }
+ if (remoteViews == null) {
+ newContent = getDefaultView();
}
- if (remoteViews == null) {
- if (mViewMode == VIEW_MODE_DEFAULT) {
- // We've already done this -- nothing to do.
- return;
- }
- content = getDefaultView();
- mLayoutId = -1;
- mViewMode = VIEW_MODE_DEFAULT;
- } else {
- int layoutId = remoteViews.getLayoutId();
-
- // If our stale view has been prepared to match active, and the new
- // layout matches, try recycling it
- if (content == null && layoutId == mLayoutId) {
- try {
- remoteViews.reapply(mContext, mView);
- content = mView;
- recycled = true;
- if (LOGD) Log.d(TAG, "was able to recycled existing layout");
- } catch (RuntimeException e) {
- exception = e;
- }
- }
-
- // Try normal RemoteView inflation
- if (content == null) {
- try {
- content = remoteViews.apply(mContext, this);
- if (LOGD) Log.d(TAG, "had to inflate new layout");
- } catch (RuntimeException e) {
- exception = e;
- }
+ // If our stale view has been prepared to match active, and the new
+ // layout matches, try recycling it
+ if (newContent == null && mStalePrepared &&
+ remoteViews.getLayoutId() == mStaleLayoutId) {
+ try {
+ remoteViews.reapply(mLocalContext, mStaleView);
+ newContent = mStaleView;
+ recycled = true;
+ if (LOGD) Log.d(TAG, "was able to recycled existing layout");
+ } catch (RuntimeException e) {
+ exception = e;
}
-
- mLayoutId = layoutId;
- mViewMode = VIEW_MODE_CONTENT;
}
- if (content == null) {
- if (mViewMode == VIEW_MODE_ERROR) {
- // We've already done this -- nothing to do.
- return ;
+ // Try normal RemoteView inflation
+ if (newContent == null) {
+ try {
+ newContent = remoteViews.apply(mLocalContext, this);
+ if (LOGD) Log.d(TAG, "had to inflate new layout");
+ } catch (RuntimeException e) {
+ exception = e;
}
- Log.w(TAG, "updateGadget couldn't find any view, using error view", exception);
- content = getErrorView();
- mViewMode = VIEW_MODE_ERROR;
}
- if (!recycled) {
- prepareView(content);
- addView(content);
+ if (exception != null && LOGD) {
+ Log.w(TAG, "Error inflating gadget " + getGadgetInfo(), exception);
}
-
- if (mView != content) {
- removeView(mView);
- mView = content;
+
+ if (newContent == null) {
+ // TODO: Should we throw an exception here for the host activity to catch?
+ // Maybe we should show a generic error widget.
+ if (LOGD) Log.d(TAG, "updateGadget couldn't find any view, so inflating error");
+ newContent = getErrorView();
}
-
- if (CROSSFADE) {
- if (mFadeStartTime < 0) {
- // if there is already an animation in progress, don't do anything --
- // the new view will pop in on top of the old one during the cross fade,
- // and that looks okay.
- mFadeStartTime = SystemClock.uptimeMillis();
- invalidate();
- }
+
+ if (!recycled) {
+ prepareView(newContent);
+ addView(newContent);
}
- }
-
- protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
- if (CROSSFADE) {
- int alpha;
- int l = child.getLeft();
- int t = child.getTop();
- if (mFadeStartTime > 0) {
- alpha = (int)(((drawingTime-mFadeStartTime)*255)/FADE_DURATION);
- if (alpha > 255) {
- alpha = 255;
- }
- Log.d(TAG, "drawChild alpha=" + alpha + " l=" + l + " t=" + t
- + " w=" + child.getWidth());
- if (alpha != 255 && mOld != null) {
- mOldPaint.setAlpha(255-alpha);
- //canvas.drawBitmap(mOld, l, t, mOldPaint);
- }
- } else {
- alpha = 255;
- }
- int restoreTo = canvas.saveLayerAlpha(l, t, child.getWidth(), child.getHeight(), alpha,
- Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG);
- boolean rv = super.drawChild(canvas, child, drawingTime);
- canvas.restoreToCount(restoreTo);
- if (alpha < 255) {
- invalidate();
- } else {
- mFadeStartTime = -1;
- if (mOld != null) {
- mOld.recycle();
- mOld = null;
- }
- }
- return rv;
- } else {
- return super.drawChild(canvas, child, drawingTime);
+
+ showNext();
+
+ if (!recycled) {
+ removeView(mStaleView);
}
+
+ mStalePrepared = false;
+ mActiveActions = remoteViews;
+
+ mStaleView = mActiveView;
+ mActiveView = newContent;
+
+ mStaleLayoutId = mActiveLayoutId;
+ mActiveLayoutId = (remoteViews == null) ? -1 : remoteViews.getLayoutId();
}
/**
@@ -271,7 +234,7 @@ public class GadgetHostView extends FrameLayout {
try {
if (mInfo != null) {
- Context theirContext = mContext.createPackageContext(
+ Context theirContext = mLocalContext.createPackageContext(
mInfo.provider.getPackageName(), 0 /* no flags */);
LayoutInflater inflater = (LayoutInflater)
theirContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@@ -303,9 +266,9 @@ public class GadgetHostView extends FrameLayout {
* Inflate and return a view that represents an error state.
*/
protected View getErrorView() {
- TextView tv = new TextView(mContext);
- tv.setText(com.android.internal.R.string.gadget_host_error_inflating);
- // TODO: get this color from somewhere.
+ TextView tv = new TextView(mLocalContext);
+ // TODO: move this error string and background color into resources
+ tv.setText("Error inflating gadget");
tv.setBackgroundColor(Color.argb(127, 0, 0, 0));
return tv;
}
diff --git a/core/java/android/gadget/GadgetManager.java b/core/java/android/gadget/GadgetManager.java
index d2c4055..a9a2c80 100644
--- a/core/java/android/gadget/GadgetManager.java
+++ b/core/java/android/gadget/GadgetManager.java
@@ -300,21 +300,5 @@ public class GadgetManager {
throw new RuntimeException("system server dead?", e);
}
}
-
- /**
- * Get the list of gadgetIds that have been bound to the given gadget
- * provider.
- *
- * @param provider The {@link android.content.BroadcastReceiver} that is the
- * gadget provider to find gadgetIds for.
- */
- public int[] getGadgetIds(ComponentName provider) {
- try {
- return sService.getGadgetIds(provider);
- }
- catch (RemoteException e) {
- throw new RuntimeException("system server dead?", e);
- }
- }
}
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index 106c920..40a5b47 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -48,6 +48,7 @@ public class Camera {
private static final int ERROR_CALLBACK = 5;
private int mNativeContext; // accessed by native methods
+ private int mListenerContext;
private EventHandler mEventHandler;
private ShutterCallback mShutterCallback;
private PictureCallback mRawImageCallback;
diff --git a/core/java/android/inputmethodservice/ExtractEditText.java b/core/java/android/inputmethodservice/ExtractEditText.java
index 0295f69..52f8209 100644
--- a/core/java/android/inputmethodservice/ExtractEditText.java
+++ b/core/java/android/inputmethodservice/ExtractEditText.java
@@ -98,13 +98,6 @@ public class ExtractEditText extends EditText {
}
/**
- * Return true if the edit text is currently showing a scroll bar.
- */
- public boolean hasVerticalScrollBar() {
- return computeVerticalScrollRange() > computeVerticalScrollExtent();
- }
-
- /**
* Pretend like the window this view is in always has focus, so its
* highlight and cursor will be displayed.
*/
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index 1e2e2f3..4be1fc7 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -26,9 +26,7 @@ import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.IBinder;
-import android.os.SystemClock;
import android.provider.Settings;
-import android.text.InputType;
import android.text.Layout;
import android.text.Spannable;
import android.text.method.MovementMethod;
@@ -51,7 +49,6 @@ import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethod;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.EditorInfo;
-import android.widget.Button;
import android.widget.FrameLayout;
import java.io.FileDescriptor;
@@ -244,8 +241,6 @@ public class InputMethodService extends AbstractInputMethodService {
boolean mIsFullscreen;
View mExtractView;
ExtractEditText mExtractEditText;
- ViewGroup mExtractAccessories;
- Button mExtractAction;
ExtractedText mExtractedText;
int mExtractedToken;
@@ -276,21 +271,6 @@ public class InputMethodService extends AbstractInputMethodService {
}
};
- final View.OnClickListener mActionClickListener = new View.OnClickListener() {
- public void onClick(View v) {
- final EditorInfo ei = getCurrentInputEditorInfo();
- final InputConnection ic = getCurrentInputConnection();
- if (ei != null && ic != null) {
- if (ei.actionId != 0) {
- ic.performEditorAction(ei.actionId);
- } else if ((ei.imeOptions&EditorInfo.IME_MASK_ACTION)
- != EditorInfo.IME_ACTION_NONE) {
- ic.performEditorAction(ei.imeOptions&EditorInfo.IME_MASK_ACTION);
- }
- }
- }
- };
-
/**
* Concrete implementation of
* {@link AbstractInputMethodService.AbstractInputMethodImpl} that provides
@@ -542,8 +522,6 @@ public class InputMethodService extends AbstractInputMethodService {
mExtractFrame = (FrameLayout)mRootView.findViewById(android.R.id.extractArea);
mExtractView = null;
mExtractEditText = null;
- mExtractAccessories = null;
- mExtractAction = null;
mFullscreenApplied = false;
mCandidatesFrame = (FrameLayout)mRootView.findViewById(android.R.id.candidatesArea);
@@ -725,7 +703,7 @@ public class InputMethodService extends AbstractInputMethodService {
setExtractView(v);
}
}
- startExtractingText(false);
+ startExtractingText();
}
}
@@ -929,17 +907,9 @@ public class InputMethodService extends AbstractInputMethodService {
mExtractEditText = (ExtractEditText)view.findViewById(
com.android.internal.R.id.inputExtractEditText);
mExtractEditText.setIME(this);
- mExtractAction = (Button)view.findViewById(
- com.android.internal.R.id.inputExtractAction);
- if (mExtractAction != null) {
- mExtractAccessories = (ViewGroup)view.findViewById(
- com.android.internal.R.id.inputExtractAccessories);
- }
- startExtractingText(false);
+ startExtractingText();
} else {
mExtractEditText = null;
- mExtractAccessories = null;
- mExtractAction = null;
}
}
@@ -1196,7 +1166,7 @@ public class InputMethodService extends AbstractInputMethodService {
}
if (doShowInput) {
- startExtractingText(false);
+ startExtractingText();
}
if (!wasVisible) {
@@ -1306,7 +1276,7 @@ public class InputMethodService extends AbstractInputMethodService {
if (DEBUG) Log.v(TAG, "CALL: onStartInputView");
mInputViewStarted = true;
onStartInputView(mInputEditorInfo, restarting);
- startExtractingText(true);
+ startExtractingText();
} else if (mCandidatesVisibility == View.VISIBLE) {
if (DEBUG) Log.v(TAG, "CALL: onStartCandidatesView");
mCandidatesViewStarted = true;
@@ -1483,25 +1453,6 @@ public class InputMethodService extends AbstractInputMethodService {
static final int MOVEMENT_DOWN = -1;
static final int MOVEMENT_UP = -2;
- void reportExtractedMovement(int keyCode, int count) {
- int dx = 0, dy = 0;
- switch (keyCode) {
- case KeyEvent.KEYCODE_DPAD_LEFT:
- dx = -count;
- break;
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- dx = count;
- break;
- case KeyEvent.KEYCODE_DPAD_UP:
- dy = -count;
- break;
- case KeyEvent.KEYCODE_DPAD_DOWN:
- dy = count;
- break;
- }
- onExtractedCursorMovement(dx, dy);
- }
-
boolean doMovementKey(int keyCode, KeyEvent event, int count) {
final ExtractEditText eet = mExtractEditText;
if (isFullscreenMode() && isInputViewShown() && eet != null) {
@@ -1516,7 +1467,6 @@ public class InputMethodService extends AbstractInputMethodService {
if (count == MOVEMENT_DOWN) {
if (movement.onKeyDown(eet,
(Spannable)eet.getText(), keyCode, event)) {
- reportExtractedMovement(keyCode, 1);
return true;
}
} else if (count == MOVEMENT_UP) {
@@ -1525,9 +1475,7 @@ public class InputMethodService extends AbstractInputMethodService {
return true;
}
} else {
- if (movement.onKeyOther(eet, (Spannable)eet.getText(), event)) {
- reportExtractedMovement(keyCode, count);
- } else {
+ if (!movement.onKeyOther(eet, (Spannable)eet.getText(), event)) {
KeyEvent down = new KeyEvent(event, KeyEvent.ACTION_DOWN);
if (movement.onKeyDown(eet,
(Spannable)eet.getText(), keyCode, down)) {
@@ -1540,7 +1488,6 @@ public class InputMethodService extends AbstractInputMethodService {
movement.onKeyUp(eet,
(Spannable)eet.getText(), keyCode, up);
}
- reportExtractedMovement(keyCode, count);
}
}
}
@@ -1560,97 +1507,6 @@ public class InputMethodService extends AbstractInputMethodService {
}
/**
- * Send the given key event code (as defined by {@link KeyEvent}) to the
- * current input connection is a key down + key up event pair. The sent
- * events have {@link KeyEvent#FLAG_SOFT_KEYBOARD KeyEvent.FLAG_SOFT_KEYBOARD}
- * set, so that the recipient can identify them as coming from a software
- * input method, and
- * {@link KeyEvent#FLAG_KEEP_TOUCH_MODE KeyEvent.FLAG_KEEP_TOUCH_MODE}, so
- * that they don't impact the current touch mode of the UI.
- *
- * @param keyEventCode The raw key code to send, as defined by
- * {@link KeyEvent}.
- */
- public void sendDownUpKeyEvents(int keyEventCode) {
- InputConnection ic = getCurrentInputConnection();
- if (ic == null) return;
- long eventTime = SystemClock.uptimeMillis();
- ic.sendKeyEvent(new KeyEvent(eventTime, eventTime,
- KeyEvent.ACTION_DOWN, keyEventCode, 0, 0, 0, 0,
- KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE));
- ic.sendKeyEvent(new KeyEvent(SystemClock.uptimeMillis(), eventTime,
- KeyEvent.ACTION_UP, keyEventCode, 0, 0, 0, 0,
- KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE));
- }
-
- /**
- * Ask the input target to execute its default action via
- * {@link InputConnection#performEditorAction
- * InputConnection.performEditorAction()}.
- *
- * @param fromEnterKey If true, this will be executed as if the user had
- * pressed an enter key on the keyboard, that is it will <em>not</em>
- * be done if the editor has set {@link EditorInfo#IME_FLAG_NO_ENTER_ACTION
- * EditorInfo.IME_FLAG_NO_ENTER_ACTION}. If false, the action will be
- * sent regardless of how the editor has set that flag.
- *
- * @return Returns a boolean indicating whether an action has been sent.
- * If false, either the editor did not specify a default action or it
- * does not want an action from the enter key. If true, the action was
- * sent (or there was no input connection at all).
- */
- public boolean sendDefaultEditorAction(boolean fromEnterKey) {
- EditorInfo ei = getCurrentInputEditorInfo();
- if (ei != null &&
- (!fromEnterKey || (ei.imeOptions &
- EditorInfo.IME_FLAG_NO_ENTER_ACTION) == 0) &&
- (ei.imeOptions & EditorInfo.IME_MASK_ACTION) !=
- EditorInfo.IME_ACTION_NONE) {
- // If the enter key was pressed, and the editor has a default
- // action associated with pressing enter, then send it that
- // explicit action instead of the key event.
- InputConnection ic = getCurrentInputConnection();
- if (ic != null) {
- ic.performEditorAction(ei.imeOptions&EditorInfo.IME_MASK_ACTION);
- }
- return true;
- }
-
- return false;
- }
-
- /**
- * Send the given UTF-16 character to the current input connection. Most
- * characters will be delivered simply by calling
- * {@link InputConnection#commitText InputConnection.commitText()} with
- * the character; some, however, may be handled different. In particular,
- * the enter character ('\n') will either be delivered as an action code
- * or a raw key event, as appropriate.
- *
- * @param charCode The UTF-16 character code to send.
- */
- public void sendKeyChar(char charCode) {
- switch (charCode) {
- case '\n': // Apps may be listening to an enter key to perform an action
- if (!sendDefaultEditorAction(true)) {
- sendDownUpKeyEvents(KeyEvent.KEYCODE_ENTER);
- }
- break;
- default:
- // Make sure that digits go through any text watcher on the client side.
- if (charCode >= '0' && charCode <= '9') {
- sendDownUpKeyEvents(charCode - '0' + KeyEvent.KEYCODE_0);
- } else {
- InputConnection ic = getCurrentInputConnection();
- if (ic != null) {
- ic.commitText(String.valueOf((char) charCode), 1);
- }
- }
- break;
- }
- }
-
- /**
* This is called when the user has moved the cursor in the extracted
* text view, when running in fullsreen mode. The default implementation
* performs the corresponding selection change on the underlying text
@@ -1666,36 +1522,11 @@ public class InputMethodService extends AbstractInputMethodService {
/**
* This is called when the user has clicked on the extracted text view,
* when running in fullscreen mode. The default implementation hides
- * the candidates view when this happens, but only if the extracted text
- * editor has a vertical scroll bar because its text doesn't fit.
- * Re-implement this to provide whatever behavior you want.
+ * the candidates view when this happens. Re-implement this to provide
+ * whatever behavior you want.
*/
public void onExtractedTextClicked() {
- if (mExtractEditText == null) {
- return;
- }
- if (mExtractEditText.hasVerticalScrollBar()) {
- setCandidatesViewShown(false);
- }
- }
-
- /**
- * This is called when the user has performed a cursor movement in the
- * extracted text view, when it is running in fullscreen mode. The default
- * implementation hides the candidates view when a vertical movement
- * happens, but only if the extracted text editor has a vertical scroll bar
- * because its text doesn't fit.
- * Re-implement this to provide whatever behavior you want.
- * @param dx The amount of cursor movement in the x dimension.
- * @param dy The amount of cursor movement in the y dimension.
- */
- public void onExtractedCursorMovement(int dx, int dy) {
- if (mExtractEditText == null || dy == 0) {
- return;
- }
- if (mExtractEditText.hasVerticalScrollBar()) {
- setCandidatesViewShown(false);
- }
+ setCandidatesViewShown(false);
}
/**
@@ -1714,74 +1545,7 @@ public class InputMethodService extends AbstractInputMethodService {
return true;
}
- /**
- * Return text that can be used as a button label for the given
- * {@link EditorInfo#imeOptions EditorInfo.imeOptions}. Returns null
- * if there is no action requested. Note that there is no guarantee that
- * the returned text will be relatively short, so you probably do not
- * want to use it as text on a soft keyboard key label.
- *
- * @param imeOptions The value from @link EditorInfo#imeOptions EditorInfo.imeOptions}.
- *
- * @return Returns a label to use, or null if there is no action.
- */
- public CharSequence getTextForImeAction(int imeOptions) {
- switch (imeOptions&EditorInfo.IME_MASK_ACTION) {
- case EditorInfo.IME_ACTION_NONE:
- return null;
- case EditorInfo.IME_ACTION_GO:
- return getText(com.android.internal.R.string.ime_action_go);
- case EditorInfo.IME_ACTION_SEARCH:
- return getText(com.android.internal.R.string.ime_action_search);
- case EditorInfo.IME_ACTION_SEND:
- return getText(com.android.internal.R.string.ime_action_send);
- case EditorInfo.IME_ACTION_NEXT:
- return getText(com.android.internal.R.string.ime_action_next);
- default:
- return getText(com.android.internal.R.string.ime_action_default);
- }
- }
-
- /**
- * Called when it is time to update the actions available from a full-screen
- * IME. You do not need to deal with this if you are using the standard
- * full screen extract UI. If replacing it, you will need to re-implement
- * this to put the action in your own UI and handle it.
- */
- public void onUpdateExtractingAccessories(EditorInfo ei) {
- if (mExtractAccessories == null) {
- return;
- }
- final boolean hasAction = ei.actionLabel != null || (
- (ei.imeOptions&EditorInfo.IME_MASK_ACTION) != EditorInfo.IME_ACTION_NONE &&
- (ei.imeOptions&EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0);
- if (hasAction) {
- mExtractAccessories.setVisibility(View.VISIBLE);
- if (ei.actionLabel != null) {
- mExtractAction.setText(ei.actionLabel);
- } else {
- mExtractAction.setText(getTextForImeAction(ei.imeOptions));
- }
- mExtractAction.setOnClickListener(mActionClickListener);
- } else {
- mExtractAccessories.setVisibility(View.GONE);
- mExtractAction.setOnClickListener(null);
- }
- }
-
- /**
- * This is called when, while currently displayed in extract mode, the
- * current input target changes. The default implementation will
- * auto-hide the IME if the new target is not a full editor, since this
- * can be an confusing experience for the user.
- */
- public void onExtractingInputChanged(EditorInfo ei) {
- if (ei.inputType == InputType.TYPE_NULL) {
- dismissSoftInput(InputMethodManager.HIDE_NOT_ALWAYS);
- }
- }
-
- void startExtractingText(boolean inputChanged) {
+ void startExtractingText() {
final ExtractEditText eet = mExtractEditText;
if (eet != null && getCurrentInputStarted()
&& isFullscreenMode()) {
@@ -1793,13 +1557,9 @@ public class InputMethodService extends AbstractInputMethodService {
req.hintMaxChars = 10000;
mExtractedText = getCurrentInputConnection().getExtractedText(req,
InputConnection.GET_EXTRACTED_TEXT_MONITOR);
-
- final EditorInfo ei = getCurrentInputEditorInfo();
-
try {
eet.startInternalChanges();
- onUpdateExtractingAccessories(ei);
- int inputType = ei.inputType;
+ int inputType = getCurrentInputEditorInfo().inputType;
if ((inputType&EditorInfo.TYPE_MASK_CLASS)
== EditorInfo.TYPE_CLASS_TEXT) {
if ((inputType&EditorInfo.TYPE_TEXT_FLAG_IME_MULTI_LINE) != 0) {
@@ -1807,7 +1567,7 @@ public class InputMethodService extends AbstractInputMethodService {
}
}
eet.setInputType(inputType);
- eet.setHint(ei.hintText);
+ eet.setHint(mInputEditorInfo.hintText);
if (mExtractedText != null) {
eet.setEnabled(true);
eet.setExtractedText(mExtractedText);
@@ -1818,10 +1578,6 @@ public class InputMethodService extends AbstractInputMethodService {
} finally {
eet.finishInternalChanges();
}
-
- if (inputChanged) {
- onExtractingInputChanged(ei);
- }
}
}
diff --git a/core/java/android/inputmethodservice/KeyboardView.java b/core/java/android/inputmethodservice/KeyboardView.java
index c838779..886e688 100755
--- a/core/java/android/inputmethodservice/KeyboardView.java
+++ b/core/java/android/inputmethodservice/KeyboardView.java
@@ -74,6 +74,7 @@ public class KeyboardView extends View implements View.OnClickListener {
* For keys that repeat, this is only called once.
* @param primaryCode the unicode of the key being pressed. If the touch is not on a valid
* key, the value will be zero.
+ * @hide Pending API Council approval
*/
void onPress(int primaryCode);
@@ -81,6 +82,7 @@ public class KeyboardView extends View implements View.OnClickListener {
* Called when the user releases a key. This is sent after the {@link #onKey} is called.
* For keys that repeat, this is only called once.
* @param primaryCode the code of the key that was released
+ * @hide Pending API Council approval
*/
void onRelease(int primaryCode);
@@ -97,12 +99,6 @@ public class KeyboardView extends View implements View.OnClickListener {
void onKey(int primaryCode, int[] keyCodes);
/**
- * Sends a sequence of characters to the listener.
- * @param text the sequence of characters to be displayed.
- */
- void onText(CharSequence text);
-
- /**
* Called when the user quickly moves the finger from right to left.
*/
void swipeLeft();
@@ -398,7 +394,6 @@ public class KeyboardView extends View implements View.OnClickListener {
requestLayout();
invalidate();
computeProximityThreshold(keyboard);
- mMiniKeyboardCache.clear(); // Not really necessary to do every time, but will free up views
}
/**
@@ -704,7 +699,9 @@ public class KeyboardView extends View implements View.OnClickListener {
if (index != NOT_A_KEY && index < mKeys.length) {
final Key key = mKeys[index];
if (key.text != null) {
- mKeyboardActionListener.onText(key.text);
+ for (int i = 0; i < key.text.length(); i++) {
+ mKeyboardActionListener.onKey(key.text.charAt(i), key.codes);
+ }
mKeyboardActionListener.onRelease(NOT_A_KEY);
} else {
int code = key.codes[0];
@@ -795,7 +792,7 @@ public class KeyboardView extends View implements View.OnClickListener {
mPreviewText.setCompoundDrawables(null, null, null, null);
mPreviewText.setText(getPreviewText(key));
if (key.label.length() > 1 && key.codes.length < 2) {
- mPreviewText.setTextSize(mKeyTextSize);
+ mPreviewText.setTextSize(mLabelTextSize);
mPreviewText.setTypeface(Typeface.DEFAULT_BOLD);
} else {
mPreviewText.setTextSize(mPreviewTextSizeLarge);
@@ -899,11 +896,6 @@ public class KeyboardView extends View implements View.OnClickListener {
dismissPopupKeyboard();
}
- public void onText(CharSequence text) {
- mKeyboardActionListener.onText(text);
- dismissPopupKeyboard();
- }
-
public void swipeLeft() { }
public void swipeRight() { }
public void swipeUp() { }
@@ -1110,8 +1102,6 @@ public class KeyboardView extends View implements View.OnClickListener {
mHandler.removeMessages(MSG_SHOW_PREVIEW);
dismissPopupKeyboard();
-
- mMiniKeyboardCache.clear();
}
@Override
diff --git a/core/java/android/net/SSLCertificateSocketFactory.java b/core/java/android/net/SSLCertificateSocketFactory.java
index ccef97e..f816caa 100644
--- a/core/java/android/net/SSLCertificateSocketFactory.java
+++ b/core/java/android/net/SSLCertificateSocketFactory.java
@@ -16,46 +16,39 @@
package android.net;
-import android.content.Context;
+import android.util.Log;
+import android.util.Config;
import android.net.http.DomainNameChecker;
import android.os.SystemProperties;
-import android.util.Config;
-import android.util.Log;
-import com.android.internal.net.SSLSessionCache;
+import javax.net.SocketFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
-import java.security.GeneralSecurityException;
+import java.security.NoSuchAlgorithmException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
+import java.security.GeneralSecurityException;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
-import javax.net.SocketFactory;
-import javax.net.ssl.SSLSocket;
-import javax.net.ssl.SSLSocketFactory;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.TrustManagerFactory;
-import javax.net.ssl.X509TrustManager;
-
-/**
- * SSLSocketFactory that allows skipping the certificate chain validation
- * based on system setting (socket.relaxsslcheck=yes, ro.secure=1 - for
- * testing only).
- *
- * It also adds a readTimeout that will be set on each created socket.
- * The factory will use SSL session persistence if enabled by config.
- */
public class SSLCertificateSocketFactory extends SSLSocketFactory {
+ private static final boolean DBG = true;
private static final String LOG_TAG = "SSLCertificateSocketFactory";
private static X509TrustManager sDefaultTrustManager;
+ private final int socketReadTimeoutForSslHandshake;
+
static {
try {
TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
@@ -90,36 +83,14 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory {
}
};
- private static SSLSocketFactory factory;
-
- /**
- * Initialize a single default factory to be used for all returned
- * sockets.
- *
- * Because of the signature of getDefault(int timeout) it needs to create
- * a new instance which encapsulates the timeout on each call. We want
- * to share a single SSLContext and SSLSessionCache.
- *
- * Can be called multiple times - but only the first will initialize the factory.
- *
- * @param androidContext will be used for SSL session persistence. Null for backward
- * compatibility, no SSL persistence.
- * @hide
- */
- public static synchronized void setupDefaultFactory(Context androidContext) {
- if ( factory != null) {
- // Can only be initialized once, to avoid having multiple caches.
- return;
- }
- factory = SSLSessionCache.getSocketFactory(androidContext, TRUST_MANAGER);
- }
-
- private final int socketReadTimeoutForSslHandshake;
+ private SSLSocketFactory factory;
public SSLCertificateSocketFactory(int socketReadTimeoutForSslHandshake)
throws NoSuchAlgorithmException, KeyManagementException {
- this.socketReadTimeoutForSslHandshake
- = socketReadTimeoutForSslHandshake;
+ SSLContext context = SSLContext.getInstance("TLS");
+ context.init(null, TRUST_MANAGER, new java.security.SecureRandom());
+ factory = (SSLSocketFactory) context.getSocketFactory();
+ this.socketReadTimeoutForSslHandshake = socketReadTimeoutForSslHandshake;
}
/**
@@ -132,11 +103,6 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory {
*/
public static SocketFactory getDefault(int socketReadTimeoutForSslHandshake) {
try {
- if (factory == null) {
- // The delegated factory was not initialized explicitely with a context.
- // Use a default one.
- setupDefaultFactory(null);
- }
return new SSLCertificateSocketFactory(socketReadTimeoutForSslHandshake);
} catch (NoSuchAlgorithmException e) {
Log.e(LOG_TAG,
diff --git a/core/java/android/net/http/AndroidHttpClient.java b/core/java/android/net/http/AndroidHttpClient.java
index 0c4fcda..4fb1499 100644
--- a/core/java/android/net/http/AndroidHttpClient.java
+++ b/core/java/android/net/http/AndroidHttpClient.java
@@ -47,8 +47,6 @@ import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.BasicHttpProcessor;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.BasicHttpContext;
-import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
-import org.apache.harmony.xnet.provider.jsse.SSLContextImpl;
import java.io.IOException;
import java.io.InputStream;
@@ -57,7 +55,6 @@ import java.io.OutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import java.net.URI;
-import java.security.KeyManagementException;
import android.util.Log;
import android.content.ContentResolver;
@@ -101,13 +98,10 @@ public final class AndroidHttpClient implements HttpClient {
/**
* Create a new HttpClient with reasonable defaults (which you can update).
- *
* @param userAgent to report in your HTTP requests.
- * @param sessionCache persistent session cache
* @return AndroidHttpClient for you to use for all your requests.
*/
- public static AndroidHttpClient newInstance(String userAgent,
- SSLClientSessionCache sessionCache) {
+ public static AndroidHttpClient newInstance(String userAgent) {
HttpParams params = new BasicHttpParams();
// Turn off stale checking. Our connections break all the time anyway,
@@ -129,8 +123,7 @@ public final class AndroidHttpClient implements HttpClient {
schemeRegistry.register(new Scheme("http",
PlainSocketFactory.getSocketFactory(), 80));
schemeRegistry.register(new Scheme("https",
- socketFactoryWithCache(sessionCache), 443));
-
+ SSLSocketFactory.getSocketFactory(), 443));
ClientConnectionManager manager =
new ThreadSafeClientConnManager(params, schemeRegistry);
@@ -139,41 +132,6 @@ public final class AndroidHttpClient implements HttpClient {
return new AndroidHttpClient(manager, params);
}
- /**
- * Returns a socket factory backed by the given persistent session cache.
- *
- * @param sessionCache to retrieve sessions from, null for no cache
- */
- private static SSLSocketFactory socketFactoryWithCache(
- SSLClientSessionCache sessionCache) {
- if (sessionCache == null) {
- // Use the default factory which doesn't support persistent
- // caching.
- return SSLSocketFactory.getSocketFactory();
- }
-
- // Create a new SSL context backed by the cache.
- // TODO: Keep a weak *identity* hash map of caches to engines. In the
- // mean time, if we have two engines for the same cache, they'll still
- // share sessions but will have to do so through the persistent cache.
- SSLContextImpl sslContext = new SSLContextImpl();
- try {
- sslContext.engineInit(null, null, null, sessionCache, null);
- } catch (KeyManagementException e) {
- throw new AssertionError(e);
- }
- return new SSLSocketFactory(sslContext.engineGetSocketFactory());
- }
-
- /**
- * Create a new HttpClient with reasonable defaults (which you can update).
- * @param userAgent to report in your HTTP requests.
- * @return AndroidHttpClient for you to use for all your requests.
- */
- public static AndroidHttpClient newInstance(String userAgent) {
- return newInstance(userAgent, null /* session cache */);
- }
-
private final HttpClient delegate;
private RuntimeException mLeakedException = new IllegalStateException(
diff --git a/core/java/android/net/http/CertificateChainValidator.java b/core/java/android/net/http/CertificateChainValidator.java
index 0edbe5b..b7f7368 100644
--- a/core/java/android/net/http/CertificateChainValidator.java
+++ b/core/java/android/net/http/CertificateChainValidator.java
@@ -16,6 +16,8 @@
package android.net.http;
+import android.os.SystemClock;
+
import java.io.IOException;
import java.security.cert.Certificate;
@@ -26,13 +28,23 @@ import java.security.cert.X509Certificate;
import java.security.GeneralSecurityException;
import java.security.KeyStore;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Enumeration;
+
+import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLHandshakeException;
+import javax.net.ssl.SSLPeerUnverifiedException;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
+import org.apache.http.HttpHost;
+
+import org.bouncycastle.asn1.x509.X509Name;
+
/**
* Class responsible for all server certificate validation functionality
*
@@ -40,6 +52,9 @@ import javax.net.ssl.X509TrustManager;
*/
class CertificateChainValidator {
+ private static long sTotal = 0;
+ private static long sTotalReused = 0;
+
/**
* The singleton instance of the certificate chain validator
*/
@@ -95,42 +110,91 @@ class CertificateChainValidator {
* @return An SSL error object if there is an error and null otherwise
*/
public SslError doHandshakeAndValidateServerCertificates(
- HttpsConnection connection, SSLSocket sslSocket, String domain)
- throws IOException {
- X509Certificate[] serverCertificates = null;
+ HttpsConnection connection, SSLSocket sslSocket, String domain)
+ throws SSLHandshakeException, IOException {
- // start handshake, close the socket if we fail
- try {
- sslSocket.setUseClientMode(true);
- sslSocket.startHandshake();
- } catch (IOException e) {
- closeSocketThrowException(
- sslSocket, e.getMessage(),
- "failed to perform SSL handshake");
+ ++sTotal;
+
+ SSLContext sslContext = HttpsConnection.getContext();
+ if (sslContext == null) {
+ closeSocketThrowException(sslSocket, "SSL context is null");
}
- // retrieve the chain of the server peer certificates
- Certificate[] peerCertificates =
- sslSocket.getSession().getPeerCertificates();
+ X509Certificate[] serverCertificates = null;
- if (peerCertificates == null || peerCertificates.length <= 0) {
- closeSocketThrowException(
- sslSocket, "failed to retrieve peer certificates");
- } else {
- serverCertificates =
- new X509Certificate[peerCertificates.length];
- for (int i = 0; i < peerCertificates.length; ++i) {
- serverCertificates[i] =
- (X509Certificate)(peerCertificates[i]);
+ long sessionBeforeHandshakeLastAccessedTime = 0;
+ byte[] sessionBeforeHandshakeId = null;
+
+ SSLSession sessionAfterHandshake = null;
+
+ synchronized(sslContext) {
+ // get SSL session before the handshake
+ SSLSession sessionBeforeHandshake =
+ getSSLSession(sslContext, connection.getHost());
+ if (sessionBeforeHandshake != null) {
+ sessionBeforeHandshakeLastAccessedTime =
+ sessionBeforeHandshake.getLastAccessedTime();
+
+ sessionBeforeHandshakeId =
+ sessionBeforeHandshake.getId();
+ }
+
+ // start handshake, close the socket if we fail
+ try {
+ sslSocket.setUseClientMode(true);
+ sslSocket.startHandshake();
+ } catch (IOException e) {
+ closeSocketThrowException(
+ sslSocket, e.getMessage(),
+ "failed to perform SSL handshake");
}
- // update the SSL certificate associated with the connection
- if (connection != null) {
- if (serverCertificates[0] != null) {
- connection.setCertificate(
- new SslCertificate(serverCertificates[0]));
+ // retrieve the chain of the server peer certificates
+ Certificate[] peerCertificates =
+ sslSocket.getSession().getPeerCertificates();
+
+ if (peerCertificates == null || peerCertificates.length <= 0) {
+ closeSocketThrowException(
+ sslSocket, "failed to retrieve peer certificates");
+ } else {
+ serverCertificates =
+ new X509Certificate[peerCertificates.length];
+ for (int i = 0; i < peerCertificates.length; ++i) {
+ serverCertificates[i] =
+ (X509Certificate)(peerCertificates[i]);
+ }
+
+ // update the SSL certificate associated with the connection
+ if (connection != null) {
+ if (serverCertificates[0] != null) {
+ connection.setCertificate(
+ new SslCertificate(serverCertificates[0]));
+ }
}
}
+
+ // get SSL session after the handshake
+ sessionAfterHandshake =
+ getSSLSession(sslContext, connection.getHost());
+ }
+
+ if (sessionBeforeHandshakeLastAccessedTime != 0 &&
+ sessionAfterHandshake != null &&
+ Arrays.equals(
+ sessionBeforeHandshakeId, sessionAfterHandshake.getId()) &&
+ sessionBeforeHandshakeLastAccessedTime <
+ sessionAfterHandshake.getLastAccessedTime()) {
+
+ if (HttpLog.LOGV) {
+ HttpLog.v("SSL session was reused: total reused: "
+ + sTotalReused
+ + " out of total of: " + sTotal);
+
+ ++sTotalReused;
+ }
+
+ // no errors!!!
+ return null;
}
// check if the first certificate in the chain is for this site
@@ -152,6 +216,7 @@ class CertificateChainValidator {
}
}
+ //
// first, we validate the chain using the standard validation
// solution; if we do not find any errors, we are done; if we
// fail the standard validation, we re-validate again below,
@@ -328,14 +393,14 @@ class CertificateChainValidator {
}
private void closeSocketThrowException(
- SSLSocket socket, String errorMessage, String defaultErrorMessage)
- throws IOException {
+ SSLSocket socket, String errorMessage, String defaultErrorMessage)
+ throws SSLHandshakeException, IOException {
closeSocketThrowException(
socket, errorMessage != null ? errorMessage : defaultErrorMessage);
}
- private void closeSocketThrowException(SSLSocket socket,
- String errorMessage) throws IOException {
+ private void closeSocketThrowException(SSLSocket socket, String errorMessage)
+ throws SSLHandshakeException, IOException {
if (HttpLog.LOGV) {
HttpLog.v("validation error: " + errorMessage);
}
@@ -351,4 +416,29 @@ class CertificateChainValidator {
throw new SSLHandshakeException(errorMessage);
}
+
+ /**
+ * @param sslContext The SSL context shared accross all the SSL sessions
+ * @param host The host associated with the session
+ * @return A suitable SSL session from the SSL context
+ */
+ private SSLSession getSSLSession(SSLContext sslContext, HttpHost host) {
+ if (sslContext != null && host != null) {
+ Enumeration en = sslContext.getClientSessionContext().getIds();
+ while (en.hasMoreElements()) {
+ byte[] id = (byte[]) en.nextElement();
+ if (id != null) {
+ SSLSession session =
+ sslContext.getClientSessionContext().getSession(id);
+ if (session.isValid() &&
+ host.getHostName().equals(session.getPeerHost()) &&
+ host.getPort() == session.getPeerPort()) {
+ return session;
+ }
+ }
+ }
+ }
+
+ return null;
+ }
}
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index 7590bfe..6f9d6c6 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -16,8 +16,6 @@ import android.util.SparseArray;
*/
public abstract class BatteryStats implements Parcelable {
- private static final boolean LOCAL_LOGV = false;
-
/**
* A constant indicating a partial wake lock timer.
*/
@@ -74,7 +72,6 @@ public abstract class BatteryStats implements Parcelable {
private static final String WAKELOCK_DATA = "wakelock";
private static final String NETWORK_DATA = "network";
private static final String BATTERY_DATA = "battery";
- private static final String MISC_DATA = "misc";
private final StringBuilder mFormatBuilder = new StringBuilder(8);
private final Formatter mFormatter = new Formatter(mFormatBuilder);
@@ -96,11 +93,11 @@ public abstract class BatteryStats implements Parcelable {
* Returns the total time in microseconds associated with this Timer for the
* selected type of statistics.
*
- * @param batteryRealtime system realtime on battery in microseconds
+ * @param now system uptime time in microseconds
* @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT
* @return a time in microseconds
*/
- public abstract long getTotalTime(long batteryRealtime, int which);
+ public abstract long getTotalTime(long now, int which);
/**
* Temporary for debugging.
@@ -225,11 +222,11 @@ public abstract class BatteryStats implements Parcelable {
/**
* Returns the amount of time spent started.
*
- * @param batteryUptime elapsed uptime on battery in microseconds.
+ * @param now elapsed realtime in microseconds.
* @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
* @return
*/
- public abstract long getStartTime(long batteryUptime, int which);
+ public abstract long getStartTime(long now, int which);
/**
* Returns the total number of times startService() has been called.
@@ -259,16 +256,16 @@ public abstract class BatteryStats implements Parcelable {
*
* {@hide}
*/
- public abstract long getScreenOnTime(long batteryRealtime, int which);
+ public abstract long getBatteryScreenOnTime();
/**
- * Returns the time in milliseconds that the phone has been on while the device was
- * running on battery.
+ * Returns the time in milliseconds that the screen has been on while the device was
+ * plugged in.
*
* {@hide}
*/
- public abstract long getPhoneOnTime(long batteryRealtime, int which);
-
+ public abstract long getPluggedScreenOnTime();
+
/**
* Return whether we are currently running on battery.
*/
@@ -385,18 +382,18 @@ public abstract class BatteryStats implements Parcelable {
*
* @param sb a StringBuilder object.
* @param timer a Timer object contining the wakelock times.
- * @param batteryRealtime the current on-battery time in microseconds.
+ * @param now the current time in microseconds.
* @param name the name of the wakelock.
* @param which which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
* @param linePrefix a String to be prepended to each line of output.
* @return the line prefix
*/
- private static final String printWakeLock(StringBuilder sb, Timer timer,
- long batteryRealtime, String name, int which, String linePrefix) {
+ private static final String printWakeLock(StringBuilder sb, Timer timer, long now,
+ String name, int which, String linePrefix) {
if (timer != null) {
// Convert from microseconds to milliseconds with rounding
- long totalTimeMicros = timer.getTotalTime(batteryRealtime, which);
+ long totalTimeMicros = timer.getTotalTime(now, which);
long totalTimeMillis = (totalTimeMicros + 500) / 1000;
int count = timer.getCount(which);
@@ -473,30 +470,26 @@ public abstract class BatteryStats implements Parcelable {
* @param which
*/
private final void dumpCheckinLocked(PrintWriter pw, int which) {
- final long rawUptime = SystemClock.uptimeMillis() * 1000;
- final long rawRealtime = SystemClock.elapsedRealtime() * 1000;
- final long batteryUptime = getBatteryUptime(rawUptime);
- final long batteryRealtime = getBatteryRealtime(rawRealtime);
- final long whichBatteryUptime = computeBatteryUptime(rawUptime, which);
- final long whichBatteryRealtime = computeBatteryRealtime(rawRealtime, which);
- final long totalRealtime = computeRealtime(rawRealtime, which);
- final long totalUptime = computeUptime(rawUptime, which);
- final long screenOnTime = getScreenOnTime(batteryRealtime, which);
- final long phoneOnTime = getPhoneOnTime(batteryRealtime, which);
+ long uSecTime = SystemClock.elapsedRealtime() * 1000;
+ final long uSecNow = getBatteryUptime(uSecTime);
StringBuilder sb = new StringBuilder(128);
+ long batteryUptime = computeBatteryUptime(uSecNow, which);
+ long batteryRealtime = computeBatteryRealtime(getBatteryRealtime(uSecTime), which);
+ long elapsedRealtime = computeRealtime(uSecTime, which);
+ long uptime = computeUptime(SystemClock.uptimeMillis() * 1000, which);
String category = STAT_NAMES[which];
// Dump "battery" stat
dumpLine(pw, 0 /* uid */, category, BATTERY_DATA,
which == STATS_TOTAL ? getStartCount() : "N/A",
- whichBatteryUptime / 1000, whichBatteryRealtime / 1000,
- totalUptime / 1000, totalRealtime / 1000);
-
- // Dump misc stats
- dumpLine(pw, 0 /* uid */, category, MISC_DATA,
- screenOnTime / 1000, phoneOnTime / 1000);
+ batteryUptime / 1000,
+ formatRatioLocked(batteryUptime, elapsedRealtime),
+ batteryRealtime / 1000,
+ formatRatioLocked(batteryRealtime, elapsedRealtime),
+ uptime / 1000,
+ elapsedRealtime / 1000);
SparseArray<? extends Uid> uidStats = getUidStats();
final int NU = uidStats.size();
@@ -515,11 +508,11 @@ public abstract class BatteryStats implements Parcelable {
Uid.Wakelock wl = ent.getValue();
String linePrefix = "";
sb.setLength(0);
- linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_FULL), batteryRealtime,
+ linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_FULL), uSecNow,
"full", which, linePrefix);
- linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), batteryRealtime,
+ linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), uSecNow,
"partial", which, linePrefix);
- linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), batteryRealtime,
+ linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), uSecNow,
"window", which, linePrefix);
// Only log if we had at lease one wakelock...
@@ -538,7 +531,7 @@ public abstract class BatteryStats implements Parcelable {
Timer timer = se.getSensorTime();
if (timer != null) {
// Convert from microseconds to milliseconds with rounding
- long totalTime = (timer.getTotalTime(batteryRealtime, which) + 500) / 1000;
+ long totalTime = (timer.getTotalTime(uSecNow, which) + 500) / 1000;
int count = timer.getCount(which);
if (totalTime != 0) {
dumpLine(pw, uid, category, SENSOR_DATA, sensorNumber, totalTime, count);
@@ -578,7 +571,7 @@ public abstract class BatteryStats implements Parcelable {
for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg.Serv> sent
: serviceStats.entrySet()) {
BatteryStats.Uid.Pkg.Serv ss = sent.getValue();
- long startTime = ss.getStartTime(batteryUptime, which);
+ long startTime = ss.getStartTime(uSecNow, which);
int starts = ss.getStarts(which);
int launches = ss.getLaunches(which);
if (startTime != 0 || starts != 0 || launches != 0) {
@@ -598,40 +591,29 @@ public abstract class BatteryStats implements Parcelable {
@SuppressWarnings("unused")
private final void dumpLocked(Printer pw, String prefix, int which) {
- final long rawUptime = SystemClock.uptimeMillis() * 1000;
- final long rawRealtime = SystemClock.elapsedRealtime() * 1000;
- final long batteryUptime = getBatteryUptime(rawUptime);
- final long batteryRealtime = getBatteryUptime(rawRealtime);
-
- final long whichBatteryUptime = computeBatteryUptime(rawUptime, which);
- final long whichBatteryRealtime = computeBatteryRealtime(rawRealtime, which);
- final long totalRealtime = computeRealtime(rawRealtime, which);
- final long totalUptime = computeUptime(rawUptime, which);
-
+ long uSecTime = SystemClock.elapsedRealtime() * 1000;
+ final long uSecNow = getBatteryUptime(uSecTime);
+
StringBuilder sb = new StringBuilder(128);
+ long batteryUptime = computeBatteryUptime(uSecNow, which);
+ long batteryRealtime = computeBatteryRealtime(getBatteryRealtime(uSecTime), which);
+ long elapsedRealtime = computeRealtime(uSecTime, which);
+ long uptime = computeUptime(SystemClock.uptimeMillis() * 1000, which);
pw.println(prefix
- + " Time on battery: " + formatTimeMs(whichBatteryUptime / 1000)
- + "(" + formatRatioLocked(whichBatteryUptime, totalRealtime)
+ + " Time on battery: " + formatTimeMs(batteryUptime / 1000) + "("
+ + formatRatioLocked(batteryUptime, elapsedRealtime)
+ ") uptime, "
- + formatTimeMs(whichBatteryRealtime / 1000) + "("
- + formatRatioLocked(whichBatteryRealtime, totalRealtime)
+ + formatTimeMs(batteryRealtime / 1000) + "("
+ + formatRatioLocked(batteryRealtime, elapsedRealtime)
+ ") realtime");
pw.println(prefix
+ " Total: "
- + formatTimeMs(totalUptime / 1000)
+ + formatTimeMs(uptime / 1000)
+ "uptime, "
- + formatTimeMs(totalRealtime / 1000)
+ + formatTimeMs(elapsedRealtime / 1000)
+ "realtime");
- long screenOnTime = getScreenOnTime(batteryRealtime, which);
- long phoneOnTime = getPhoneOnTime(batteryRealtime, which);
- pw.println(prefix
- + " Time with screen on: " + formatTimeMs(screenOnTime / 1000)
- + "(" + formatRatioLocked(screenOnTime, whichBatteryRealtime)
- + "), time with phone on: " + formatTimeMs(phoneOnTime / 1000)
- + "(" + formatRatioLocked(phoneOnTime, whichBatteryRealtime) + ")");
-
pw.println(" ");
SparseArray<? extends Uid> uidStats = getUidStats();
@@ -659,11 +641,11 @@ public abstract class BatteryStats implements Parcelable {
sb.append(prefix);
sb.append(" Wake lock ");
sb.append(ent.getKey());
- linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_FULL), batteryRealtime,
+ linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_FULL), uSecNow,
"full", which, linePrefix);
- linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), batteryRealtime,
+ linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), uSecNow,
"partial", which, linePrefix);
- linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), batteryRealtime,
+ linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), uSecNow,
"window", which, linePrefix);
if (!linePrefix.equals(": ")) {
sb.append(" realtime");
@@ -695,7 +677,7 @@ public abstract class BatteryStats implements Parcelable {
Timer timer = se.getSensorTime();
if (timer != null) {
// Convert from microseconds to milliseconds with rounding
- long totalTime = (timer.getTotalTime(batteryRealtime, which) + 500) / 1000;
+ long totalTime = (timer.getTotalTime(uSecNow, which) + 500) / 1000;
int count = timer.getCount(which);
//timer.logState();
if (totalTime != 0) {
@@ -755,7 +737,7 @@ public abstract class BatteryStats implements Parcelable {
for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg.Serv> sent
: serviceStats.entrySet()) {
BatteryStats.Uid.Pkg.Serv ss = sent.getValue();
- long startTime = ss.getStartTime(batteryUptime, which);
+ long startTime = ss.getStartTime(uSecNow, which);
int starts = ss.getStarts(which);
int launches = ss.getLaunches(which);
if (startTime != 0 || starts != 0 || launches != 0) {
@@ -805,24 +787,9 @@ public abstract class BatteryStats implements Parcelable {
@SuppressWarnings("unused")
public void dumpCheckinLocked(PrintWriter pw, String[] args) {
- boolean isUnpluggedOnly = false;
-
- for (String arg : args) {
- if ("-u".equals(arg)) {
- if (LOCAL_LOGV) Log.v("BatteryStats", "Dumping unplugged data");
- isUnpluggedOnly = true;
- }
- }
-
- if (isUnpluggedOnly) {
- dumpCheckinLocked(pw, STATS_UNPLUGGED);
- }
- else {
- dumpCheckinLocked(pw, STATS_TOTAL);
- dumpCheckinLocked(pw, STATS_LAST);
- dumpCheckinLocked(pw, STATS_UNPLUGGED);
- dumpCheckinLocked(pw, STATS_CURRENT);
- }
+ dumpCheckinLocked(pw, STATS_TOTAL);
+ dumpCheckinLocked(pw, STATS_LAST);
+ dumpCheckinLocked(pw, STATS_UNPLUGGED);
+ dumpCheckinLocked(pw, STATS_CURRENT);
}
-
}
diff --git a/core/java/android/os/ParcelFileDescriptor.java b/core/java/android/os/ParcelFileDescriptor.java
index 3fcb18e..ed138cb 100644
--- a/core/java/android/os/ParcelFileDescriptor.java
+++ b/core/java/android/os/ParcelFileDescriptor.java
@@ -76,11 +76,6 @@ public class ParcelFileDescriptor implements Parcelable {
public static final int MODE_TRUNCATE = 0x04000000;
/**
- * For use with {@link #open}: append to end of file while writing.
- */
- public static final int MODE_APPEND = 0x02000000;
-
- /**
* Create a new ParcelFileDescriptor accessing a given file.
*
* @param file The file to be opened.
@@ -143,19 +138,6 @@ public class ParcelFileDescriptor implements Parcelable {
}
/**
- * Return the total size of the file representing this fd, as determined
- * by stat(). Returns -1 if the fd is not a file.
- */
- public native long getStatSize();
-
- /**
- * This is needed for implementing AssetFileDescriptor.AutoCloseOutputStream,
- * and I really don't think we want it to be public.
- * @hide
- */
- public native long seekTo(long pos);
-
- /**
* Close the ParcelFileDescriptor. This implementation closes the underlying
* OS resources allocated to represent this stream.
*
diff --git a/core/java/android/pim/ICalendar.java b/core/java/android/pim/ICalendar.java
index cc0f45e..4a5d7e4 100644
--- a/core/java/android/pim/ICalendar.java
+++ b/core/java/android/pim/ICalendar.java
@@ -405,15 +405,13 @@ public class ICalendar {
// TODO: get rid of this -- handle all of the parsing in one pass through
// the text.
private static String normalizeText(String text) {
+ // first we deal with line folding, by replacing all "\r\n " strings
+ // with nothing
+ text = text.replaceAll("\r\n ", "");
+
// it's supposed to be \r\n, but not everyone does that
text = text.replaceAll("\r\n", "\n");
text = text.replaceAll("\r", "\n");
-
- // we deal with line folding, by replacing all "\n " strings
- // with nothing. The RFC specifies "\r\n " to be folded, but
- // we handle "\n " and "\r " too because we can get those.
- text = text.replaceAll("\n ", "");
-
return text;
}
@@ -442,7 +440,7 @@ public class ICalendar {
current = parseLine(line, state, current);
// if the provided component was null, we will return the root
// NOTE: in this case, if the first line is not a BEGIN, a
- // FormatException will get thrown.
+ // FormatException will get thrown.
if (component == null) {
component = current;
}
@@ -526,7 +524,8 @@ public class ICalendar {
private static String extractValue(ParserState state)
throws FormatException {
String line = state.line;
- if (state.index >= line.length() || line.charAt(state.index) != ':') {
+ char c = line.charAt(state.index);
+ if (c != ':') {
throw new FormatException("Expected ':' before end of line in "
+ line);
}
diff --git a/core/java/android/provider/Checkin.java b/core/java/android/provider/Checkin.java
index 1454089..0cdac53 100644
--- a/core/java/android/provider/Checkin.java
+++ b/core/java/android/provider/Checkin.java
@@ -62,9 +62,6 @@ public final class Checkin {
AUTOTEST_FAILURE,
AUTOTEST_SEQUENCE_BEGIN,
AUTOTEST_SUITE_BEGIN,
- AUTOTEST_TCPDUMP_BEGIN,
- AUTOTEST_TCPDUMP_DATA,
- AUTOTEST_TCPDUMP_END,
AUTOTEST_TEST_BEGIN,
AUTOTEST_TEST_FAILURE,
AUTOTEST_TEST_SUCCESS,
@@ -101,14 +98,14 @@ public final class Checkin {
SETUP_SERVER_ERROR,
SETUP_SERVER_TIMEOUT,
SETUP_NO_DATA_NETWORK,
+ SYSTEM_APP_NOT_RESPONDING,
SYSTEM_BOOT,
SYSTEM_LAST_KMSG,
SYSTEM_RECOVERY_LOG,
SYSTEM_RESTART,
SYSTEM_SERVICE_LOOPING,
SYSTEM_TOMBSTONE,
- TEST,
- BATTERY_DISCHARGE_INFO,
+ TEST,
}
}
@@ -193,9 +190,6 @@ public final class Checkin {
// The category is used for GTalk service messages
public static final String CATEGORY = "android.server.checkin.CHECKIN";
-
- // If true indicates that the checkin should only transfer market related data
- public static final String EXTRA_MARKET_ONLY = "market_only";
}
private static final String TAG = "Checkin";
diff --git a/core/java/android/provider/Im.java b/core/java/android/provider/Im.java
index 19ad158..bea857f 100644
--- a/core/java/android/provider/Im.java
+++ b/core/java/android/provider/Im.java
@@ -2044,37 +2044,4 @@ public class Im {
*/
public static final Uri CONTENT_URI = Uri.parse("content://im/lastRmqId");
}
-
- /**
- * Columns for IM branding resource map cache table. This table caches the result of
- * loading the branding resources to speed up IM landing page start.
- */
- public interface BrandingResourceMapCacheColumns {
- /**
- * The provider ID
- * <P>Type: INTEGER</P>
- */
- String PROVIDER_ID = "provider_id";
- /**
- * The application resource ID
- * <P>Type: INTEGER</P>
- */
- String APP_RES_ID = "app_res_id";
- /**
- * The plugin resource ID
- * <P>Type: INTEGER</P>
- */
- String PLUGIN_RES_ID = "plugin_res_id";
- }
-
- /**
- * The table for caching the result of loading IM branding resources.
- */
- public static final class BrandingResourceMapCache
- implements BaseColumns, BrandingResourceMapCacheColumns {
- /**
- * The content:// style URL for this table.
- */
- public static final Uri CONTENT_URI = Uri.parse("content://im/brandingResMapCache");
- }
}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 10ca5d5..4a784c8 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -2183,12 +2183,6 @@ public final class Settings {
public static final String CHECKIN_INTERVAL = "checkin_interval";
/**
- * Boolean indicating if the market app should force market only checkins on
- * install/uninstall. Any non-0 value is considered true.
- */
- public static final String MARKET_FORCE_CHECKIN = "market_force_checkin";
-
- /**
* How frequently (in seconds) to check the memory status of the
* device.
*/
@@ -2461,14 +2455,6 @@ public final class Settings {
"gtalk_ssl_handshake_timeout_ms";
/**
- * Enable use of ssl session caching.
- * 'db' - save each session in a per-process database
- * not set or any other value - normal java in-memory caching.
- * Other cache types may be added.
- */
- public static final String SSL_SESSION_CACHE = "ssl_session_cache";
-
- /**
* How many bytes long a message has to be, in order to be gzipped.
*/
public static final String SYNC_MIN_GZIP_BYTES =
@@ -2780,29 +2766,11 @@ public final class Settings {
public static final String VOICE_SEARCH_ENCODING_WIFI = "voice_search_encoding_wifi";
/**
- * Whether to use automatic gain control in voice search (0 = disable, 1 = enable).
- * To be factored out of this class.
+ * Prefix for rules that launch automatic instrumentation test cycles.
+ * The format is the InstrumentationTestRunner (or compatible) package and class,
+ * followed optionally by space-separated key value pairs to pass to it.
*/
- public static final String VOICE_SEARCH_ENABLE_AGC = "voice_search_enable_agc";
-
- /**
- * Whether to use noise suppression in voice search (0 = disable, 1 = enable).
- * To be factored out of this class.
- */
- public static final String VOICE_SEARCH_ENABLE_NS = "voice_search_enable_ns";
-
- /**
- * Whether to use the IIR filter in voice search (0 = disable, 1 = enable).
- * To be factored out of this class.
- */
- public static final String VOICE_SEARCH_ENABLE_IIR = "voice_search_enable_iir";
-
- /**
- * List of test suites (local disk filename) for the automatic instrumentation test runner.
- * The file format is similar to automated_suites.xml, see AutoTesterService.
- * If this setting is missing or empty, the automatic test runner will not start.
- */
- public static final String AUTOTEST_SUITES_FILE = "autotest_suites_file";
+ public static final String AUTOTEST_PREFIX = "autotest:";
/**
* Interval between synchronous checkins forced by the automatic test runner.
@@ -2817,15 +2785,6 @@ public final class Settings {
*/
public static final String AUTOTEST_REBOOT_SECONDS = "autotest_reboot_seconds";
-
- /**
- * Threshold values for the duration and level of a discharge cycle, under
- * which we log discharge cycle info.
- */
- public static final String BATTERY_DISCHARGE_DURATION_THRESHOLD =
- "battery_discharge_duration_threshold";
- public static final String BATTERY_DISCHARGE_THRESHOLD = "battery_discharge_threshold";
-
/**
* @deprecated
* @hide
diff --git a/core/java/android/server/BluetoothA2dpService.java b/core/java/android/server/BluetoothA2dpService.java
index f8bc765..58f9491 100644
--- a/core/java/android/server/BluetoothA2dpService.java
+++ b/core/java/android/server/BluetoothA2dpService.java
@@ -15,7 +15,8 @@
*/
/**
- * TODO: Move this to services.jar
+ * TODO: Move this to
+ * java/services/com/android/server/BluetoothA2dpService.java
* and make the contructor package private again.
* @hide
*/
@@ -34,16 +35,15 @@ import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.media.AudioManager;
import android.os.Binder;
-import android.os.Handler;
-import android.os.Message;
import android.provider.Settings;
import android.util.Log;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
+import java.util.HashMap;
+import java.util.Iterator;
public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
private static final String TAG = "BluetoothA2dpService";
@@ -57,8 +57,6 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
private static final String A2DP_SINK_ADDRESS = "a2dp_sink_address";
private static final String BLUETOOTH_ENABLED = "bluetooth_enabled";
- private static final int MESSAGE_CONNECT_TO = 1;
-
private final Context mContext;
private final IntentFilter mIntentFilter;
private HashMap<String, SinkState> mAudioDevices;
@@ -88,7 +86,6 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
mIntentFilter = new IntentFilter(BluetoothIntent.ENABLED_ACTION);
mIntentFilter.addAction(BluetoothIntent.DISABLED_ACTION);
mIntentFilter.addAction(BluetoothIntent.BOND_STATE_CHANGED_ACTION);
- mIntentFilter.addAction(BluetoothIntent.REMOTE_DEVICE_CONNECTED_ACTION);
mContext.registerReceiver(mReceiver, mIntentFilter);
if (device.isEnabled()) {
@@ -126,37 +123,6 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
setSinkPriority(address, BluetoothA2dp.PRIORITY_OFF);
break;
}
- } else if (action.equals(BluetoothIntent.REMOTE_DEVICE_CONNECTED_ACTION)) {
- if (getSinkPriority(address) > BluetoothA2dp.PRIORITY_OFF) {
- // This device is a preferred sink. Make an A2DP connection
- // after a delay. We delay to avoid connection collisions,
- // and to give other profiles such as HFP a chance to
- // connect first.
- Message msg = Message.obtain(mHandler, MESSAGE_CONNECT_TO, address);
- mHandler.sendMessageDelayed(msg, 6000);
- }
- }
- }
- };
-
- private final Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MESSAGE_CONNECT_TO:
- String address = (String)msg.obj;
- // check device is still preferred, and nothing is currently
- // connected
- if (getSinkPriority(address) > BluetoothA2dp.PRIORITY_OFF &&
- lookupSinksMatchingStates(new int[] {
- BluetoothA2dp.STATE_CONNECTING,
- BluetoothA2dp.STATE_CONNECTED,
- BluetoothA2dp.STATE_PLAYING,
- BluetoothA2dp.STATE_DISCONNECTING}).size() == 0) {
- log("Auto-connecting A2DP to sink " + address);
- connectSink(address);
- }
- break;
}
}
};
@@ -176,10 +142,7 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
private synchronized void onBluetoothDisable() {
if (mAudioDevices != null) {
- // copy to allow modification during iteration
- String[] paths = new String[mAudioDevices.size()];
- paths = mAudioDevices.keySet().toArray(paths);
- for (String path : paths) {
+ for (String path : mAudioDevices.keySet()) {
switch (mAudioDevices.get(path).state) {
case BluetoothA2dp.STATE_CONNECTING:
case BluetoothA2dp.STATE_CONNECTED:
@@ -271,8 +234,17 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
public synchronized List<String> listConnectedSinks() {
mContext.enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");
- return lookupSinksMatchingStates(new int[] {BluetoothA2dp.STATE_CONNECTED,
- BluetoothA2dp.STATE_PLAYING});
+ List<String> connectedSinks = new ArrayList<String>();
+ if (mAudioDevices == null) {
+ return connectedSinks;
+ }
+ for (SinkState sink : mAudioDevices.values()) {
+ if (sink.state == BluetoothA2dp.STATE_CONNECTED ||
+ sink.state == BluetoothA2dp.STATE_PLAYING) {
+ connectedSinks.add(sink.address);
+ }
+ }
+ return connectedSinks;
}
public synchronized int getSinkState(String address) {
@@ -326,11 +298,7 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
// bluez 3.36 quietly disconnects the previous sink when a new sink
// is connected, so we need to mark all previously connected sinks as
// disconnected
-
- // copy to allow modification during iteration
- String[] paths = new String[mAudioDevices.size()];
- paths = mAudioDevices.keySet().toArray(paths);
- for (String oldPath : paths) {
+ for (String oldPath : mAudioDevices.keySet()) {
if (path.equals(oldPath)) {
continue;
}
@@ -382,22 +350,6 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
return null;
}
- private synchronized List<String> lookupSinksMatchingStates(int[] states) {
- List<String> sinks = new ArrayList<String>();
- if (mAudioDevices == null) {
- return sinks;
- }
- for (SinkState sink : mAudioDevices.values()) {
- for (int state : states) {
- if (sink.state == state) {
- sinks.add(sink.address);
- break;
- }
- }
- }
- return sinks;
- }
-
private synchronized void updateState(String path, int state) {
if (mAudioDevices == null) return;
diff --git a/core/java/android/server/BluetoothDeviceService.java b/core/java/android/server/BluetoothDeviceService.java
index 950ff3a..fa53a60 100644
--- a/core/java/android/server/BluetoothDeviceService.java
+++ b/core/java/android/server/BluetoothDeviceService.java
@@ -141,20 +141,6 @@ public class BluetoothDeviceService extends IBluetoothDevice.Stub {
mBondState.setBondState(address, BluetoothDevice.BOND_NOT_BONDED,
BluetoothDevice.UNBOND_REASON_AUTH_CANCELED);
}
-
- // Remove remoteServiceChannelCallbacks
- HashMap<String, IBluetoothDeviceCallback> callbacksMap =
- mEventLoop.getRemoteServiceChannelCallbacks();
- IBluetoothDeviceCallback callback;
-
- for (String address : callbacksMap.keySet()) {
- callback = callbacksMap.get(address);
- try {
- callback.onGetRemoteServiceChannelResult(address, BluetoothError.ERROR_DISABLED);
- } catch (RemoteException e) {}
- callbacksMap.remove(address);
- }
-
// update mode
Intent intent = new Intent(BluetoothIntent.SCAN_MODE_CHANGED_ACTION);
intent.putExtra(BluetoothIntent.SCAN_MODE, BluetoothDevice.SCAN_MODE_NONE);
@@ -583,18 +569,10 @@ public class BluetoothDeviceService extends IBluetoothDevice.Stub {
}
address = address.toUpperCase();
- String[] bonding = mBondState.listInState(BluetoothDevice.BOND_BONDING);
- if (bonding.length > 0 && !bonding[0].equals(address)) {
- log("Ignoring createBond(): another device is bonding");
- // a different device is currently bonding, fail
- return false;
- }
-
// Check for bond state only if we are not performing auto
// pairing exponential back-off attempts.
if (!mBondState.isAutoPairingAttemptsInProgress(address) &&
- mBondState.getBondState(address) != BluetoothDevice.BOND_NOT_BONDED) {
- log("Ignoring createBond(): this device is already bonding or bonded");
+ mBondState.getBondState(address) != BluetoothDevice.BOND_NOT_BONDED) {
return false;
}
diff --git a/core/java/android/server/search/SearchableInfo.java b/core/java/android/server/search/SearchableInfo.java
index 0c04839..c18675e 100644
--- a/core/java/android/server/search/SearchableInfo.java
+++ b/core/java/android/server/search/SearchableInfo.java
@@ -35,7 +35,6 @@ import android.text.InputType;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Xml;
-import android.view.inputmethod.EditorInfo;
import java.io.IOException;
import java.util.ArrayList;
@@ -78,7 +77,6 @@ public final class SearchableInfo implements Parcelable {
private int mIconId = 0;
private int mSearchButtonText = 0;
private int mSearchInputType = 0;
- private int mSearchImeOptions = 0;
private String mSuggestAuthority = null;
private String mSuggestPath = null;
private String mSuggestSelection = null;
@@ -431,9 +429,8 @@ public final class SearchableInfo implements Parcelable {
com.android.internal.R.styleable.Searchable_searchButtonText, 0);
mSearchInputType = a.getInt(com.android.internal.R.styleable.Searchable_inputType,
InputType.TYPE_CLASS_TEXT |
+ InputType.TYPE_TEXT_FLAG_SEARCH |
InputType.TYPE_TEXT_VARIATION_NORMAL);
- mSearchImeOptions = a.getInt(com.android.internal.R.styleable.Searchable_imeOptions,
- EditorInfo.IME_ACTION_SEARCH);
setSearchModeFlags();
if (DBG_INHIBIT_SUGGESTIONS == 0) {
@@ -746,17 +743,6 @@ public final class SearchableInfo implements Parcelable {
}
/**
- * Return the input method options specified in the searchable attributes.
- * This will default to EditorInfo.ACTION_SEARCH if not specified (which is
- * appropriate for a search box).
- *
- * @return the input type
- */
- public int getImeOptions() {
- return mSearchImeOptions;
- }
-
- /**
* Return the list of searchable activities, for use in the drop-down.
*/
public static ArrayList<SearchableInfo> getSearchablesList() {
@@ -796,7 +782,6 @@ public final class SearchableInfo implements Parcelable {
mIconId = in.readInt();
mSearchButtonText = in.readInt();
mSearchInputType = in.readInt();
- mSearchImeOptions = in.readInt();
setSearchModeFlags();
mSuggestAuthority = in.readString();
@@ -833,7 +818,6 @@ public final class SearchableInfo implements Parcelable {
dest.writeInt(mIconId);
dest.writeInt(mSearchButtonText);
dest.writeInt(mSearchInputType);
- dest.writeInt(mSearchImeOptions);
dest.writeString(mSuggestAuthority);
dest.writeString(mSuggestPath);
diff --git a/core/java/android/speech/srec/package.html b/core/java/android/speech/srec/package.html
index 9a99df8..723b30b 100644
--- a/core/java/android/speech/srec/package.html
+++ b/core/java/android/speech/srec/package.html
@@ -1,6 +1,5 @@
<HTML>
<BODY>
Simple, synchronous SREC speech recognition API.
-@hide
</BODY>
</HTML>
diff --git a/core/java/android/text/InputType.java b/core/java/android/text/InputType.java
index f643f92..a073cf4 100644
--- a/core/java/android/text/InputType.java
+++ b/core/java/android/text/InputType.java
@@ -128,6 +128,11 @@ public interface InputType {
*/
public static final int TYPE_TEXT_FLAG_IME_MULTI_LINE = 0x00040000;
+ /**
+ * Flag for {@link #TYPE_CLASS_TEXT}: flags any text being used as a search string
+ */
+ public static final int TYPE_TEXT_FLAG_SEARCH = 0x00080000;
+
// ----------------------------------------------------------------------
/**
diff --git a/core/java/android/text/Styled.java b/core/java/android/text/Styled.java
index 0aa2004..05c27ea 100644
--- a/core/java/android/text/Styled.java
+++ b/core/java/android/text/Styled.java
@@ -16,26 +16,25 @@
package android.text;
-import android.graphics.Canvas;
import android.graphics.Paint;
-import android.text.style.CharacterStyle;
-import android.text.style.MetricAffectingSpan;
-import android.text.style.ReplacementSpan;
-
-/**
- * This class provides static methods for drawing and measuring styled texts, like
- * {@link android.text.Spanned} object with {@link android.text.style.ReplacementSpan}.
- * @hide
- */
-public class Styled
+import android.graphics.Canvas;
+import android.graphics.Path;
+import android.graphics.RectF;
+import android.graphics.Typeface;
+import android.graphics.MaskFilter;
+import android.graphics.Rasterizer;
+import android.graphics.LayerRasterizer;
+import android.text.style.*;
+
+/* package */ class Styled
{
private static float each(Canvas canvas,
Spanned text, int start, int end,
int dir, boolean reverse,
float x, int top, int y, int bottom,
- Paint.FontMetricsInt fmi,
+ Paint.FontMetricsInt fm,
+ TextPaint realPaint,
TextPaint paint,
- TextPaint workPaint,
boolean needwid) {
boolean havewid = false;
@@ -44,9 +43,9 @@ public class Styled
ReplacementSpan replacement = null;
- paint.bgColor = 0;
- paint.baselineShift = 0;
- workPaint.set(paint);
+ realPaint.bgColor = 0;
+ realPaint.baselineShift = 0;
+ paint.set(realPaint);
if (spans.length > 0) {
for (int i = 0; i < spans.length; i++) {
@@ -56,7 +55,7 @@ public class Styled
replacement = (ReplacementSpan)span;
}
else {
- span.updateDrawState(workPaint);
+ span.updateDrawState(paint);
}
}
}
@@ -75,66 +74,66 @@ public class Styled
tmpend = end;
}
- if (fmi != null) {
- workPaint.getFontMetricsInt(fmi);
+ if (fm != null) {
+ paint.getFontMetricsInt(fm);
}
if (canvas != null) {
- if (workPaint.bgColor != 0) {
- int c = workPaint.getColor();
- Paint.Style s = workPaint.getStyle();
- workPaint.setColor(workPaint.bgColor);
- workPaint.setStyle(Paint.Style.FILL);
+ if (paint.bgColor != 0) {
+ int c = paint.getColor();
+ Paint.Style s = paint.getStyle();
+ paint.setColor(paint.bgColor);
+ paint.setStyle(Paint.Style.FILL);
if (!havewid) {
- ret = workPaint.measureText(tmp, tmpstart, tmpend);
+ ret = paint.measureText(tmp, tmpstart, tmpend);
havewid = true;
}
if (dir == Layout.DIR_RIGHT_TO_LEFT)
- canvas.drawRect(x - ret, top, x, bottom, workPaint);
+ canvas.drawRect(x - ret, top, x, bottom, paint);
else
- canvas.drawRect(x, top, x + ret, bottom, workPaint);
+ canvas.drawRect(x, top, x + ret, bottom, paint);
- workPaint.setStyle(s);
- workPaint.setColor(c);
+ paint.setStyle(s);
+ paint.setColor(c);
}
if (dir == Layout.DIR_RIGHT_TO_LEFT) {
if (!havewid) {
- ret = workPaint.measureText(tmp, tmpstart, tmpend);
+ ret = paint.measureText(tmp, tmpstart, tmpend);
havewid = true;
}
canvas.drawText(tmp, tmpstart, tmpend,
- x - ret, y + workPaint.baselineShift, workPaint);
+ x - ret, y + paint.baselineShift, paint);
} else {
if (needwid) {
if (!havewid) {
- ret = workPaint.measureText(tmp, tmpstart, tmpend);
+ ret = paint.measureText(tmp, tmpstart, tmpend);
havewid = true;
}
}
canvas.drawText(tmp, tmpstart, tmpend,
- x, y + workPaint.baselineShift, workPaint);
+ x, y + paint.baselineShift, paint);
}
} else {
if (needwid && !havewid) {
- ret = workPaint.measureText(tmp, tmpstart, tmpend);
+ ret = paint.measureText(tmp, tmpstart, tmpend);
havewid = true;
}
}
} else {
- ret = replacement.getSize(workPaint, text, start, end, fmi);
+ ret = replacement.getSize(paint, text, start, end, fm);
if (canvas != null) {
if (dir == Layout.DIR_RIGHT_TO_LEFT)
replacement.draw(canvas, text, start, end,
- x - ret, top, y, bottom, workPaint);
+ x - ret, top, y, bottom, paint);
else
replacement.draw(canvas, text, start, end,
- x, top, y, bottom, workPaint);
+ x, top, y, bottom, paint);
}
}
@@ -144,29 +143,15 @@ public class Styled
return ret;
}
- /**
- * Return the advance widths for the characters in the string.
- * See also {@link android.graphics.Paint#getTextWidths(CharSequence, int, int, float[])}.
- *
- * @param paint The main {@link TextPaint} object.
- * @param workPaint The {@link TextPaint} object used for temporal workspace.
- * @param text The text to measure
- * @param start The index of the first char to to measure
- * @param end The end of the text slice to measure
- * @param widths Array to receive the advance widths of the characters.
- * Must be at least a large as (end - start).
- * @param fmi FontMetrics information. Can be null.
- * @return The actual number of widths returned.
- */
- public static int getTextWidths(TextPaint paint,
- TextPaint workPaint,
- Spanned text, int start, int end,
- float[] widths, Paint.FontMetricsInt fmi) {
- // Keep workPaint as is so that developers reuse the workspace.
+ public static int getTextWidths(TextPaint realPaint,
+ TextPaint paint,
+ Spanned text, int start, int end,
+ float[] widths, Paint.FontMetricsInt fm) {
+
MetricAffectingSpan[] spans = text.getSpans(start, end, MetricAffectingSpan.class);
ReplacementSpan replacement = null;
- workPaint.set(paint);
+ paint.set(realPaint);
for (int i = 0; i < spans.length; i++) {
MetricAffectingSpan span = spans[i];
@@ -174,15 +159,15 @@ public class Styled
replacement = (ReplacementSpan)span;
}
else {
- span.updateMeasureState(workPaint);
+ span.updateMeasureState(paint);
}
}
if (replacement == null) {
- workPaint.getFontMetricsInt(fmi);
- workPaint.getTextWidths(text, start, end, widths);
+ paint.getFontMetricsInt(fm);
+ paint.getTextWidths(text, start, end, widths);
} else {
- int wid = replacement.getSize(workPaint, text, start, end, fmi);
+ int wid = replacement.getSize(paint, text, start, end, fm);
if (end > start) {
widths[0] = wid;
@@ -198,10 +183,10 @@ public class Styled
CharSequence text, int start, int end,
int dir, boolean reverse,
float x, int top, int y, int bottom,
- Paint.FontMetricsInt fmi,
+ Paint.FontMetricsInt fm,
TextPaint paint,
TextPaint workPaint,
- boolean needWidth) {
+ boolean needwid) {
if (! (text instanceof Spanned)) {
float ret = 0;
@@ -209,22 +194,22 @@ public class Styled
CharSequence tmp = TextUtils.getReverse(text, start, end);
int tmpend = end - start;
- if (canvas != null || needWidth)
+ if (canvas != null || needwid)
ret = paint.measureText(tmp, 0, tmpend);
if (canvas != null)
canvas.drawText(tmp, 0, tmpend,
x - ret, y, paint);
} else {
- if (needWidth)
+ if (needwid)
ret = paint.measureText(text, start, end);
if (canvas != null)
canvas.drawText(text, start, end, x, y, paint);
}
- if (fmi != null) {
- paint.getFontMetricsInt(fmi);
+ if (fm != null) {
+ paint.getFontMetricsInt(fm);
}
return ret * dir; //Layout.DIR_RIGHT_TO_LEFT == -1
@@ -247,129 +232,67 @@ public class Styled
next = sp.nextSpanTransition(i, end, division);
x += each(canvas, sp, i, next, dir, reverse,
- x, top, y, bottom, fmi, paint, workPaint,
- needWidth || next != end);
-
- if (fmi != null) {
- if (fmi.ascent < asc)
- asc = fmi.ascent;
- if (fmi.descent > desc)
- desc = fmi.descent;
-
- if (fmi.top < ftop)
- ftop = fmi.top;
- if (fmi.bottom > fbot)
- fbot = fmi.bottom;
+ x, top, y, bottom, fm, paint, workPaint,
+ needwid || next != end);
+
+ if (fm != null) {
+ if (fm.ascent < asc)
+ asc = fm.ascent;
+ if (fm.descent > desc)
+ desc = fm.descent;
+
+ if (fm.top < ftop)
+ ftop = fm.top;
+ if (fm.bottom > fbot)
+ fbot = fm.bottom;
}
}
- if (fmi != null) {
+ if (fm != null) {
if (start == end) {
- paint.getFontMetricsInt(fmi);
+ paint.getFontMetricsInt(fm);
} else {
- fmi.ascent = asc;
- fmi.descent = desc;
- fmi.top = ftop;
- fmi.bottom = fbot;
+ fm.ascent = asc;
+ fm.descent = desc;
+ fm.top = ftop;
+ fm.bottom = fbot;
}
}
return x - ox;
}
-
- /* package */ static float drawText(Canvas canvas,
- CharSequence text, int start, int end,
- int direction, boolean reverse,
- float x, int top, int y, int bottom,
- TextPaint paint,
- TextPaint workPaint,
- boolean needWidth) {
- if ((direction == Layout.DIR_RIGHT_TO_LEFT && !reverse) ||
- (reverse && direction == Layout.DIR_LEFT_TO_RIGHT)) {
+ public static float drawText(Canvas canvas,
+ CharSequence text, int start, int end,
+ int dir, boolean reverse,
+ float x, int top, int y, int bottom,
+ TextPaint paint,
+ TextPaint workPaint,
+ boolean needwid) {
+ if ((dir == Layout.DIR_RIGHT_TO_LEFT && !reverse)||(reverse && dir == Layout.DIR_LEFT_TO_RIGHT)) {
float ch = foreach(null, text, start, end, Layout.DIR_LEFT_TO_RIGHT,
false, 0, 0, 0, 0, null, paint, workPaint,
true);
- ch *= direction; // DIR_RIGHT_TO_LEFT == -1
- foreach(canvas, text, start, end, -direction,
+ ch *= dir; // DIR_RIGHT_TO_LEFT == -1
+ foreach(canvas, text, start, end, -dir,
reverse, x + ch, top, y, bottom, null, paint,
workPaint, true);
return ch;
}
- return foreach(canvas, text, start, end, direction, reverse,
+ return foreach(canvas, text, start, end, dir, reverse,
x, top, y, bottom, null, paint, workPaint,
- needWidth);
- }
-
- /**
- * Draw the specified range of text, specified by start/end, with its origin at (x,y),
- * in the specified Paint. The origin is interpreted based on the Align setting in the
- * Paint.
- *
- * This method considers style information in the text
- * (e.g. Even when text is an instance of {@link android.text.Spanned}, this method
- * correctly draws the text).
- * See also
- * {@link android.graphics.Canvas#drawText(CharSequence, int, int, float, float, Paint)}
- * and
- * {@link android.graphics.Canvas#drawRect(float, float, float, float, Paint)}.
- *
- * @param canvas The target canvas.
- * @param text The text to be drawn
- * @param start The index of the first character in text to draw
- * @param end (end - 1) is the index of the last character in text to draw
- * @param direction The direction of the text. This must be
- * {@link android.text.Layout#DIR_LEFT_TO_RIGHT} or
- * {@link android.text.Layout#DIR_RIGHT_TO_LEFT}.
- * @param x The x-coordinate of origin for where to draw the text
- * @param top The top side of the rectangle to be drawn
- * @param y The y-coordinate of origin for where to draw the text
- * @param bottom The bottom side of the rectangle to be drawn
- * @param paint The main {@link TextPaint} object.
- * @param workPaint The {@link TextPaint} object used for temporal workspace.
- * @param needWidth If true, this method returns the width of drawn text.
- * @return Width of the drawn text if needWidth is true.
- */
- public static float drawText(Canvas canvas,
- CharSequence text, int start, int end,
- int direction,
- float x, int top, int y, int bottom,
- TextPaint paint,
- TextPaint workPaint,
- boolean needWidth) {
- // For safety.
- direction = direction >= 0 ? Layout.DIR_LEFT_TO_RIGHT : Layout.DIR_RIGHT_TO_LEFT;
- /*
- * Hided "reverse" parameter since it is meaningless for external developers.
- * Kept workPaint as is so that developers reuse the workspace.
- */
- return drawText(canvas, text, start, end, direction, false,
- x, top, y, bottom, paint, workPaint, needWidth);
+ needwid);
}
-
- /**
- * Return the width of the text, considering style information in the text
- * (e.g. Even when text is an instance of {@link android.text.Spanned}, this method
- * correctly mesures the width of the text).
- *
- * @param paint The main {@link TextPaint} object.
- * @param workPaint The {@link TextPaint} object used for temporal workspace.
- * @param text The text to measure
- * @param start The index of the first character to start measuring
- * @param end 1 beyond the index of the last character to measure
- * @param fmi FontMetrics information. Can be null
- * @return The width of the text
- */
+
public static float measureText(TextPaint paint,
TextPaint workPaint,
CharSequence text, int start, int end,
- Paint.FontMetricsInt fmi) {
- // Keep workPaint as is so that developers reuse the workspace.
+ Paint.FontMetricsInt fm) {
return foreach(null, text, start, end,
Layout.DIR_LEFT_TO_RIGHT, false,
- 0, 0, 0, 0, fmi, paint, workPaint, true);
+ 0, 0, 0, 0, fm, paint, workPaint, true);
}
}
diff --git a/core/java/android/text/format/DateUtils.java b/core/java/android/text/format/DateUtils.java
index 8a7cdd9..feae6cf 100644
--- a/core/java/android/text/format/DateUtils.java
+++ b/core/java/android/text/format/DateUtils.java
@@ -595,17 +595,6 @@ public class DateUtils
* @param elapsedSeconds the elapsed time in seconds.
*/
public static String formatElapsedTime(long elapsedSeconds) {
- return formatElapsedTime(null, elapsedSeconds);
- }
-
- /**
- * Formats an elapsed time in the form "MM:SS" or "H:MM:SS"
- * for display on the call-in-progress screen.
- *
- * @param recycle {@link StringBuilder} to recycle, if possible
- * @param elapsedSeconds the elapsed time in seconds.
- */
- public static String formatElapsedTime(StringBuilder recycle, long elapsedSeconds) {
initFormatStrings();
long hours = 0;
@@ -624,24 +613,18 @@ public class DateUtils
String result;
if (hours > 0) {
- return formatElapsedTime(recycle, sElapsedFormatHMMSS, hours, minutes, seconds);
+ return formatElapsedTime(sElapsedFormatHMMSS, hours, minutes, seconds);
} else {
- return formatElapsedTime(recycle, sElapsedFormatMMSS, minutes, seconds);
+ return formatElapsedTime(sElapsedFormatMMSS, minutes, seconds);
}
}
/**
* Fast formatting of h:mm:ss
*/
- private static String formatElapsedTime(StringBuilder recycle, String format, long hours,
- long minutes, long seconds) {
+ private static String formatElapsedTime(String format, long hours, long minutes, long seconds) {
if (FAST_FORMAT_HMMSS.equals(format)) {
- StringBuilder sb = recycle;
- if (sb == null) {
- sb = new StringBuilder(8);
- } else {
- sb.setLength(0);
- }
+ StringBuffer sb = new StringBuffer(16);
sb.append(hours);
sb.append(TIME_SEPARATOR);
if (minutes < 10) {
@@ -666,15 +649,9 @@ public class DateUtils
/**
* Fast formatting of m:ss
*/
- private static String formatElapsedTime(StringBuilder recycle, String format, long minutes,
- long seconds) {
+ private static String formatElapsedTime(String format, long minutes, long seconds) {
if (FAST_FORMAT_MMSS.equals(format)) {
- StringBuilder sb = recycle;
- if (sb == null) {
- sb = new StringBuilder(8);
- } else {
- sb.setLength(0);
- }
+ StringBuffer sb = new StringBuffer(16);
if (minutes < 10) {
sb.append(TIME_PADDING);
} else {
@@ -1051,9 +1028,8 @@ public class DateUtils
* If FORMAT_NO_YEAR is set, then the year is not shown.
* If neither FORMAT_SHOW_YEAR nor FORMAT_NO_YEAR are set, then the year
* is shown only if it is different from the current year, or if the start
- * and end dates fall on different years. If both are set,
- * FORMAT_SHOW_YEAR takes precedence.
- *
+ * and end dates fall on different years.
+ *
* <p>
* Normally the date is shown unless the start and end day are the same.
* If FORMAT_SHOW_DATE is set, then the date is always shown, even for
@@ -1144,28 +1120,24 @@ public class DateUtils
boolean abbrevMonth = (flags & (FORMAT_ABBREV_MONTH | FORMAT_ABBREV_ALL)) != 0;
boolean noMonthDay = (flags & FORMAT_NO_MONTH_DAY) != 0;
boolean numericDate = (flags & FORMAT_NUMERIC_DATE) != 0;
-
- // If we're getting called with a single instant in time (from
- // e.g. formatDateTime(), below), then we can skip a lot of
- // computation below that'd otherwise be thrown out.
- boolean isInstant = (startMillis == endMillis);
-
- Time startDate = useUTC ? new Time(Time.TIMEZONE_UTC) : new Time();
- startDate.set(startMillis);
-
+
+ Time startDate;
Time endDate;
- int dayDistance;
- if (isInstant) {
- endDate = startDate;
- dayDistance = 0;
+
+ if (useUTC) {
+ startDate = new Time(Time.TIMEZONE_UTC);
+ endDate = new Time(Time.TIMEZONE_UTC);
} else {
- endDate = useUTC ? new Time(Time.TIMEZONE_UTC) : new Time();
- endDate.set(endMillis);
- int startJulianDay = Time.getJulianDay(startMillis, startDate.gmtoff);
- int endJulianDay = Time.getJulianDay(endMillis, endDate.gmtoff);
- dayDistance = endJulianDay - startJulianDay;
+ startDate = new Time();
+ endDate = new Time();
}
-
+
+ startDate.set(startMillis);
+ endDate.set(endMillis);
+ int startJulianDay = Time.getJulianDay(startMillis, startDate.gmtoff);
+ int endJulianDay = Time.getJulianDay(endMillis, endDate.gmtoff);
+ int dayDistance = endJulianDay - startJulianDay;
+
// If the end date ends at 12am at the beginning of a day,
// then modify it to make it look like it ends at midnight on
// the previous day. This will allow us to display "8pm - midnight",
@@ -1180,21 +1152,20 @@ public class DateUtils
// and an end date of Nov 12 at 00:00.
// If the start and end time are the same, then skip this and don't
// adjust the date.
- if (!isInstant
- && (endDate.hour | endDate.minute | endDate.second) == 0
- && (!showTime || dayDistance <= 1)) {
+ if ((endDate.hour | endDate.minute | endDate.second) == 0
+ && (!showTime || dayDistance <= 1) && (startMillis != endMillis)) {
endDate.monthDay -= 1;
endDate.normalize(true /* ignore isDst */);
}
-
+
int startDay = startDate.monthDay;
int startMonthNum = startDate.month;
int startYear = startDate.year;
-
+
int endDay = endDate.monthDay;
int endMonthNum = endDate.month;
int endYear = endDate.year;
-
+
String startWeekDayString = "";
String endWeekDayString = "";
if (showWeekDay) {
@@ -1205,9 +1176,9 @@ public class DateUtils
weekDayFormat = WEEKDAY_FORMAT;
}
startWeekDayString = startDate.format(weekDayFormat);
- endWeekDayString = isInstant ? startWeekDayString : endDate.format(weekDayFormat);
+ endWeekDayString = endDate.format(weekDayFormat);
}
-
+
String startTimeString = "";
String endTimeString = "";
if (showTime) {
@@ -1233,7 +1204,7 @@ public class DateUtils
boolean capNoon = (flags & FORMAT_CAP_NOON) != 0;
boolean noMidnight = (flags & FORMAT_NO_MIDNIGHT) != 0;
boolean capMidnight = (flags & FORMAT_CAP_MIDNIGHT) != 0;
-
+
boolean startOnTheHour = startDate.minute == 0 && startDate.second == 0;
boolean endOnTheHour = endDate.minute == 0 && endDate.second == 0;
if (abbrevTime && startOnTheHour) {
@@ -1249,41 +1220,20 @@ public class DateUtils
startTimeFormat = res.getString(com.android.internal.R.string.hour_minute_ampm);
}
}
-
- // Don't waste time on setting endTimeFormat when
- // we're dealing with an instant, where we'll never
- // need the end point. (It's the same as the start
- // point)
- if (!isInstant) {
- if (abbrevTime && endOnTheHour) {
- if (capAMPM) {
- endTimeFormat = res.getString(com.android.internal.R.string.hour_cap_ampm);
- } else {
- endTimeFormat = res.getString(com.android.internal.R.string.hour_ampm);
- }
+ if (abbrevTime && endOnTheHour) {
+ if (capAMPM) {
+ endTimeFormat = res.getString(com.android.internal.R.string.hour_cap_ampm);
} else {
- if (capAMPM) {
- endTimeFormat = res.getString(com.android.internal.R.string.hour_minute_cap_ampm);
- } else {
- endTimeFormat = res.getString(com.android.internal.R.string.hour_minute_ampm);
- }
+ endTimeFormat = res.getString(com.android.internal.R.string.hour_ampm);
}
-
- if (endDate.hour == 12 && endOnTheHour && !noNoon) {
- if (capNoon) {
- endTimeFormat = res.getString(com.android.internal.R.string.Noon);
- } else {
- endTimeFormat = res.getString(com.android.internal.R.string.noon);
- }
- } else if (endDate.hour == 0 && endOnTheHour && !noMidnight) {
- if (capMidnight) {
- endTimeFormat = res.getString(com.android.internal.R.string.Midnight);
- } else {
- endTimeFormat = res.getString(com.android.internal.R.string.midnight);
- }
+ } else {
+ if (capAMPM) {
+ endTimeFormat = res.getString(com.android.internal.R.string.hour_minute_cap_ampm);
+ } else {
+ endTimeFormat = res.getString(com.android.internal.R.string.hour_minute_ampm);
}
}
-
+
if (startDate.hour == 12 && startOnTheHour && !noNoon) {
if (capNoon) {
startTimeFormat = res.getString(com.android.internal.R.string.Noon);
@@ -1293,32 +1243,37 @@ public class DateUtils
// Don't show the start time starting at midnight. Show
// 12am instead.
}
+
+ if (endDate.hour == 12 && endOnTheHour && !noNoon) {
+ if (capNoon) {
+ endTimeFormat = res.getString(com.android.internal.R.string.Noon);
+ } else {
+ endTimeFormat = res.getString(com.android.internal.R.string.noon);
+ }
+ } else if (endDate.hour == 0 && endOnTheHour && !noMidnight) {
+ if (capMidnight) {
+ endTimeFormat = res.getString(com.android.internal.R.string.Midnight);
+ } else {
+ endTimeFormat = res.getString(com.android.internal.R.string.midnight);
+ }
+ }
}
-
startTimeString = startDate.format(startTimeFormat);
- endTimeString = isInstant ? startTimeString : endDate.format(endTimeFormat);
+ endTimeString = endDate.format(endTimeFormat);
}
-
+
+ // Get the current year
+ long millis = System.currentTimeMillis();
+ Time time = new Time();
+ time.set(millis);
+ int currentYear = time.year;
+
// Show the year if the user specified FORMAT_SHOW_YEAR or if
// the starting and end years are different from each other
// or from the current year. But don't show the year if the
- // user specified FORMAT_NO_YEAR.
- if (showYear) {
- // No code... just a comment for clarity. Keep showYear
- // on, as they enabled it with FORMAT_SHOW_YEAR. This
- // takes precedence over them setting FORMAT_NO_YEAR.
- } else if (noYear) {
- // They explicitly didn't want a year.
- showYear = false;
- } else if (startYear != endYear) {
- showYear = true;
- } else {
- // Show the year if it's not equal to the current year.
- Time currentTime = new Time();
- currentTime.setToNow();
- showYear = startYear != currentTime.year;
- }
-
+ // user specified FORMAT_NO_YEAR;
+ showYear = showYear || (!noYear && (startYear != endYear || startYear != currentYear));
+
String defaultDateFormat, fullFormat, dateRange;
if (numericDate) {
defaultDateFormat = res.getString(com.android.internal.R.string.numeric_date);
@@ -1351,7 +1306,7 @@ public class DateUtils
}
}
}
-
+
if (showWeekDay) {
if (showTime) {
fullFormat = res.getString(com.android.internal.R.string.wday1_date1_time1_wday2_date2_time2);
@@ -1365,20 +1320,20 @@ public class DateUtils
fullFormat = res.getString(com.android.internal.R.string.date1_date2);
}
}
-
+
if (noMonthDay && startMonthNum == endMonthNum) {
// Example: "January, 2008"
String startDateString = startDate.format(defaultDateFormat);
return startDateString;
}
-
+
if (startYear != endYear || noMonthDay) {
// Different year or we are not showing the month day number.
// Example: "December 31, 2007 - January 1, 2008"
// Or: "January - February, 2008"
String startDateString = startDate.format(defaultDateFormat);
String endDateString = endDate.format(defaultDateFormat);
-
+
// The values that are used in a fullFormat string are specified
// by position.
dateRange = String.format(fullFormat,
@@ -1386,7 +1341,7 @@ public class DateUtils
endWeekDayString, endDateString, endTimeString);
return dateRange;
}
-
+
// Get the month, day, and year strings for the start and end dates
String monthFormat;
if (numericDate) {
@@ -1399,17 +1354,16 @@ public class DateUtils
String startMonthString = startDate.format(monthFormat);
String startMonthDayString = startDate.format(MONTH_DAY_FORMAT);
String startYearString = startDate.format(YEAR_FORMAT);
-
- String endMonthString = isInstant ? null : endDate.format(monthFormat);
- String endMonthDayString = isInstant ? null : endDate.format(MONTH_DAY_FORMAT);
- String endYearString = isInstant ? null : endDate.format(YEAR_FORMAT);
-
+ String endMonthString = endDate.format(monthFormat);
+ String endMonthDayString = endDate.format(MONTH_DAY_FORMAT);
+ String endYearString = endDate.format(YEAR_FORMAT);
+
if (startMonthNum != endMonthNum) {
// Same year, different month.
// Example: "October 28 - November 3"
// or: "Wed, Oct 31 - Sat, Nov 3, 2007"
// or: "Oct 31, 8am - Sat, Nov 3, 2007, 5pm"
-
+
int index = 0;
if (showWeekDay) index = 1;
if (showYear) index += 2;
@@ -1417,7 +1371,7 @@ public class DateUtils
if (numericDate) index += 8;
int resId = sameYearTable[index];
fullFormat = res.getString(resId);
-
+
// The values that are used in a fullFormat string are specified
// by position.
dateRange = String.format(fullFormat,
@@ -1427,7 +1381,7 @@ public class DateUtils
endYearString, endTimeString);
return dateRange;
}
-
+
if (startDay != endDay) {
// Same month, different day.
int index = 0;
@@ -1437,7 +1391,7 @@ public class DateUtils
if (numericDate) index += 8;
int resId = sameMonthTable[index];
fullFormat = res.getString(resId);
-
+
// The values that are used in a fullFormat string are specified
// by position.
dateRange = String.format(fullFormat,
@@ -1447,19 +1401,19 @@ public class DateUtils
endYearString, endTimeString);
return dateRange;
}
-
+
// Same start and end day
boolean showDate = (flags & FORMAT_SHOW_DATE) != 0;
-
+
// If nothing was specified, then show the date.
if (!showTime && !showDate && !showWeekDay) showDate = true;
-
+
// Compute the time string (example: "10:00 - 11:00 am")
String timeString = "";
if (showTime) {
// If the start and end time are the same, then just show the
// start time.
- if (isInstant) {
+ if (startMillis == endMillis) {
// Same start and end time.
// Example: "10:15 AM"
timeString = startTimeString;
@@ -1469,7 +1423,7 @@ public class DateUtils
timeString = String.format(timeFormat, startTimeString, endTimeString);
}
}
-
+
// Figure out which full format to use.
fullFormat = "";
String dateString = "";
@@ -1503,7 +1457,7 @@ public class DateUtils
} else if (showTime) {
return timeString;
}
-
+
// The values that are used in a fullFormat string are specified
// by position.
dateRange = String.format(fullFormat, timeString, startWeekDayString, dateString);
diff --git a/core/java/android/text/method/NumberKeyListener.java b/core/java/android/text/method/NumberKeyListener.java
index 9270ca5..e500fae 100644
--- a/core/java/android/text/method/NumberKeyListener.java
+++ b/core/java/android/text/method/NumberKeyListener.java
@@ -101,11 +101,6 @@ public abstract class NumberKeyListener extends BaseKeyListener
selEnd = Math.max(a, b);
}
- if (selStart < 0 || selEnd < 0) {
- selStart = selEnd = 0;
- Selection.setSelection(content, 0);
- }
-
int i = event != null ? lookup(event, content) : 0;
int repeatCount = event != null ? event.getRepeatCount() : 0;
if (repeatCount == 0) {
diff --git a/core/java/android/view/GestureDetector.java b/core/java/android/view/GestureDetector.java
index e0231a7..679c683 100644
--- a/core/java/android/view/GestureDetector.java
+++ b/core/java/android/view/GestureDetector.java
@@ -113,48 +113,20 @@ public class GestureDetector {
}
/**
- * The listener that is used to notify when a double-tap or a confirmed
- * single-tap occur.
+ * @hide pending API council
*/
public interface OnDoubleTapListener {
- /**
- * Notified when a single-tap occurs.
- * <p>
- * Unlike {@link OnGestureListener#onSingleTapUp(MotionEvent)}, this
- * will only be called after the detector is confident that the user's
- * first tap is not followed by a second tap leading to a double-tap
- * gesture.
- *
- * @param e The down motion event of the single-tap.
- * @return true if the event is consumed, else false
- */
boolean onSingleTapConfirmed(MotionEvent e);
-
- /**
- * Notified when a double-tap occurs.
- *
- * @param e The down motion event of the first tap of the double-tap.
- * @return true if the event is consumed, else false
- */
- boolean onDoubleTap(MotionEvent e);
-
- /**
- * Notified when an event within a double-tap gesture occurs, including
- * the down, move, and up events.
- *
- * @param e The motion event that occurred during the double-tap gesture.
- * @return true if the event is consumed, else false
- */
boolean onDoubleTapEvent(MotionEvent e);
}
-
+
/**
- * A convenience class to extend when you only want to listen for a subset
- * of all the gestures. This implements all methods in the
- * {@link OnGestureListener} and {@link OnDoubleTapListener} but does
- * nothing and return {@code false} for all applicable methods.
+ * A convenience class to extend when you only want to listen for a
+ * subset of all the gestures. This implements all methods in the
+ * {@link OnGestureListener} but does nothing and return {@code false}
+ * for all applicable methods.
*/
- public static class SimpleOnGestureListener implements OnGestureListener, OnDoubleTapListener {
+ public static class SimpleOnGestureListener implements OnGestureListener {
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@@ -178,25 +150,13 @@ public class GestureDetector {
public boolean onDown(MotionEvent e) {
return false;
}
-
- public boolean onDoubleTap(MotionEvent e) {
- return false;
- }
-
- public boolean onDoubleTapEvent(MotionEvent e) {
- return false;
- }
-
- public boolean onSingleTapConfirmed(MotionEvent e) {
- return false;
- }
}
// TODO: ViewConfiguration
private int mBiggerTouchSlopSquare = 20 * 20;
-
+
private int mTouchSlopSquare;
- private int mDoubleTapSlopSquare;
+ private int mDoubleTapSlopSquare;
private int mMinimumFlingVelocity;
private static final int LONGPRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout();
@@ -204,7 +164,7 @@ public class GestureDetector {
// TODO make new double-tap timeout, and define its events (i.e. either time
// between down-down or time between up-down)
private static final int DOUBLE_TAP_TIMEOUT = ViewConfiguration.getDoubleTapTimeout();
-
+
// constants for Message.what used by GestureHandler below
private static final int SHOW_PRESS = 1;
private static final int LONG_PRESS = 2;
@@ -221,13 +181,13 @@ public class GestureDetector {
private MotionEvent mCurrentDownEvent;
private MotionEvent mPreviousUpEvent;
-
+
/**
* True when the user is still touching for the second tap (down, move, and
* up events). Can only be true if there is a double tap listener attached.
*/
private boolean mIsDoubleTapping;
-
+
private float mLastMotionY;
private float mLastMotionX;
@@ -266,7 +226,7 @@ public class GestureDetector {
break;
default:
- throw new RuntimeException("Unknown message " + msg); //never
+ throw new RuntimeException("Unknown message " + msg); //never
}
}
}
@@ -343,9 +303,6 @@ public class GestureDetector {
mHandler = new GestureHandler();
}
mListener = listener;
- if (listener instanceof OnDoubleTapListener) {
- setOnDoubleTapListener((OnDoubleTapListener) listener);
- }
init(context);
}
@@ -374,11 +331,8 @@ public class GestureDetector {
}
/**
- * Sets the listener which will be called for double-tap and related
- * gestures.
- *
- * @param onDoubleTapListener the listener invoked for all the callbacks, or
- * null to stop listening for double-tap gestures.
+ * @hide pending API council
+ * @param onDoubleTapListener
*/
public void setOnDoubleTapListener(OnDoubleTapListener onDoubleTapListener) {
mDoubleTapListener = onDoubleTapListener;
@@ -433,10 +387,7 @@ public class GestureDetector {
isConsideredDoubleTap(mCurrentDownEvent, mPreviousUpEvent, ev)) {
// This is a second tap
mIsDoubleTapping = true;
- // Give a callback with the first tap of the double-tap
- handled |= mDoubleTapListener.onDoubleTap(mCurrentDownEvent);
- // Give a callback with down event of the double-tap
- handled |= mDoubleTapListener.onDoubleTapEvent(ev);
+ handled = mDoubleTapListener.onDoubleTapEvent(ev);
} else {
// This is a first tap
mHandler.sendEmptyMessageDelayed(TAP, DOUBLE_TAP_TIMEOUT);
@@ -467,8 +418,7 @@ public class GestureDetector {
final float scrollX = mLastMotionX - x;
final float scrollY = mLastMotionY - y;
if (mIsDoubleTapping) {
- // Give the move events of the double-tap
- handled |= mDoubleTapListener.onDoubleTapEvent(ev);
+ handled = mDoubleTapListener.onDoubleTapEvent(ev);
} else if (mAlwaysInTapRegion) {
final int deltaX = (int) (x - mCurrentDownEvent.getX());
final int deltaY = (int) (y - mCurrentDownEvent.getY());
@@ -496,8 +446,7 @@ public class GestureDetector {
mStillDown = false;
MotionEvent currentUpEvent = MotionEvent.obtain(ev);
if (mIsDoubleTapping) {
- // Finally, give the up event of the double-tap
- handled |= mDoubleTapListener.onDoubleTapEvent(ev);
+ handled = mDoubleTapListener.onDoubleTapEvent(ev);
mIsDoubleTapping = false;
break;
} else if (mInLongPress) {
@@ -546,7 +495,7 @@ public class GestureDetector {
if (!mAlwaysInBiggerTapRegion) {
return false;
}
-
+
if (secondDown.getEventTime() - firstUp.getEventTime() > DOUBLE_TAP_TIMEOUT) {
return false;
}
@@ -555,7 +504,7 @@ public class GestureDetector {
int deltaY = (int) firstDown.getY() - (int) secondDown.getY();
return (deltaX * deltaX + deltaY * deltaY < mDoubleTapSlopSquare);
}
-
+
private void dispatchLongPress() {
mHandler.removeMessages(TAP);
mInLongPress = true;
diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
index 430cc71..d6ea91c 100644
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
@@ -229,12 +229,6 @@ public class KeyEvent implements Parcelable {
public static final int FLAG_SOFT_KEYBOARD = 0x2;
/**
- * This mask is set if we don't want the key event to cause us to leave
- * touch mode.
- */
- public static final int FLAG_KEEP_TOUCH_MODE = 0x4;
-
- /**
* Returns the maximum keycode.
*/
public static int getMaxKeyCode() {
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 406fad8..5ed3a7e 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -57,7 +57,6 @@ import com.android.internal.view.menu.MenuBuilder;
import java.util.ArrayList;
import java.util.Arrays;
-import java.lang.ref.SoftReference;
/**
* <p>
@@ -1564,7 +1563,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback {
private int[] mDrawableState = null;
- private SoftReference<Bitmap> mDrawingCache;
+ private Bitmap mDrawingCache;
/**
* When this view has focus and the next focus is {@link #FOCUS_LEFT},
@@ -3951,16 +3950,25 @@ public class View implements Drawable.Callback, KeyEvent.Callback {
}
if ((changed & WILL_NOT_CACHE_DRAWING) != 0) {
- destroyDrawingCache();
+ if (mDrawingCache != null) {
+ mDrawingCache.recycle();
+ }
+ mDrawingCache = null;
}
if ((changed & DRAWING_CACHE_ENABLED) != 0) {
- destroyDrawingCache();
+ if (mDrawingCache != null) {
+ mDrawingCache.recycle();
+ }
+ mDrawingCache = null;
mPrivateFlags &= ~DRAWING_CACHE_VALID;
}
if ((changed & DRAWING_CACHE_QUALITY_MASK) != 0) {
- destroyDrawingCache();
+ if (mDrawingCache != null) {
+ mDrawingCache.recycle();
+ }
+ mDrawingCache = null;
mPrivateFlags &= ~DRAWING_CACHE_VALID;
}
@@ -5407,10 +5415,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback {
if ((mViewFlags & WILL_NOT_CACHE_DRAWING) == WILL_NOT_CACHE_DRAWING) {
return null;
}
- if ((mViewFlags & DRAWING_CACHE_ENABLED) == DRAWING_CACHE_ENABLED) {
+ if ((mViewFlags & DRAWING_CACHE_ENABLED) == DRAWING_CACHE_ENABLED &&
+ ((mPrivateFlags & DRAWING_CACHE_VALID) == 0 || mDrawingCache == null)) {
buildDrawingCache();
}
- return mDrawingCache == null ? null : mDrawingCache.get();
+ return mDrawingCache;
}
/**
@@ -5425,8 +5434,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback {
*/
public void destroyDrawingCache() {
if (mDrawingCache != null) {
- final Bitmap bitmap = mDrawingCache.get();
- if (bitmap != null) bitmap.recycle();
+ mDrawingCache.recycle();
mDrawingCache = null;
}
}
@@ -5466,9 +5474,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback {
* @see #destroyDrawingCache()
*/
public void buildDrawingCache() {
- if ((mPrivateFlags & DRAWING_CACHE_VALID) == 0 || mDrawingCache == null ||
- mDrawingCache.get() == null) {
-
+ if ((mPrivateFlags & DRAWING_CACHE_VALID) == 0 || mDrawingCache == null) {
if (ViewDebug.TRACE_HIERARCHY) {
ViewDebug.trace(this, ViewDebug.HierarchyTraceType.BUILD_CACHE);
}
@@ -5486,12 +5492,15 @@ public class View implements Drawable.Callback, KeyEvent.Callback {
if (width <= 0 || height <= 0 ||
(width * height * (opaque ? 2 : 4) >= // Projected bitmap size in bytes
ViewConfiguration.get(mContext).getScaledMaximumDrawingCacheSize())) {
- destroyDrawingCache();
+ if (mDrawingCache != null) {
+ mDrawingCache.recycle();
+ }
+ mDrawingCache = null;
return;
}
boolean clear = true;
- Bitmap bitmap = mDrawingCache == null ? null : mDrawingCache.get();
+ Bitmap bitmap = mDrawingCache;
if (bitmap == null || bitmap.getWidth() != width || bitmap.getHeight() != height) {
@@ -5516,11 +5525,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback {
}
// Try to cleanup memory
- if (bitmap != null) bitmap.recycle();
+ if (mDrawingCache != null) {
+ mDrawingCache.recycle();
+ }
try {
- bitmap = Bitmap.createBitmap(width, height, quality);
- mDrawingCache = new SoftReference<Bitmap>(bitmap);
+ mDrawingCache = bitmap = Bitmap.createBitmap(width, height, quality);
} catch (OutOfMemoryError e) {
// If there is not enough memory to create the bitmap cache, just
// ignore the issue as bitmap caches are not required to draw the
@@ -8050,8 +8060,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback {
shader = new LinearGradient(0, 0, 0, 1, color, 0, Shader.TileMode.CLAMP);
paint.setShader(shader);
- // Restore the default transfer mode (src_over)
- paint.setXfermode(null);
+ paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER));
}
}
}
diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java
index d3f48c6..2f7b0d1 100644
--- a/core/java/android/view/ViewConfiguration.java
+++ b/core/java/android/view/ViewConfiguration.java
@@ -56,7 +56,7 @@ public class ViewConfiguration {
/**
* Defines the duration in milliseconds we will wait to see if a touch event
- * is a tap or a scroll. If the user does not move within this interval, it is
+ * is a top or a scroll. If the user does not move within this interval, it is
* considered to be a tap.
*/
private static final int TAP_TIMEOUT = 100;
@@ -213,7 +213,7 @@ public class ViewConfiguration {
}
/**
- * @return the length of the fading edges in pixels
+ * @return Defines the length of the fading edges in pixels
*
* @deprecated Use {@link #getScaledFadingEdgeLength()} instead.
*/
@@ -223,14 +223,14 @@ public class ViewConfiguration {
}
/**
- * @return the length of the fading edges in pixels
+ * @return Defines the length of the fading edges in pixels
*/
public int getScaledFadingEdgeLength() {
return mFadingEdgeLength;
}
/**
- * @return the duration in milliseconds of the pressed state in child
+ * @return Defines the duration in milliseconds of the pressed state in child
* components.
*/
public static int getPressedStateDuration() {
@@ -238,7 +238,7 @@ public class ViewConfiguration {
}
/**
- * @return the duration in milliseconds before a press turns into
+ * @return Defines the duration in milliseconds before a press turns into
* a long press
*/
public static int getLongPressTimeout() {
@@ -246,8 +246,8 @@ public class ViewConfiguration {
}
/**
- * @return the duration in milliseconds we will wait to see if a touch event
- * is a tap or a scroll. If the user does not move within this interval, it is
+ * @return Defines the duration in milliseconds we will wait to see if a touch event
+ * is a top or a scroll. If the user does not move within this interval, it is
* considered to be a tap.
*/
public static int getTapTimeout() {
@@ -255,7 +255,7 @@ public class ViewConfiguration {
}
/**
- * @return the duration in milliseconds we will wait to see if a touch event
+ * @return Defines the duration in milliseconds we will wait to see if a touch event
* is a jump tap. If the user does not move within this interval, it is
* considered to be a tap.
*/
@@ -264,7 +264,7 @@ public class ViewConfiguration {
}
/**
- * @return the duration in milliseconds between the first tap's up event and
+ * @return Defines the duration in milliseconds between the first tap's up event and
* the second tap's down event for an interaction to be considered a
* double-tap.
* @hide pending API council
diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java
index de64d0e..3cfaf1b 100644
--- a/core/java/android/view/ViewRoot.java
+++ b/core/java/android/view/ViewRoot.java
@@ -143,7 +143,6 @@ public final class ViewRoot extends Handler implements ViewParent,
boolean mFullRedrawNeeded;
boolean mNewSurfaceNeeded;
boolean mHasHadWindowFocus;
- boolean mLastWasImTarget;
boolean mWindowAttributesChanged = false;
@@ -999,21 +998,6 @@ public final class ViewRoot extends Handler implements ViewParent,
mNewSurfaceNeeded = false;
mViewVisibility = viewVisibility;
- if (mAttachInfo.mHasWindowFocus) {
- final boolean imTarget = WindowManager.LayoutParams
- .mayUseInputMethod(mWindowAttributes.flags);
- if (imTarget != mLastWasImTarget) {
- mLastWasImTarget = imTarget;
- InputMethodManager imm = InputMethodManager.peekInstance();
- if (imm != null && imTarget) {
- imm.startGettingWindowFocus(mView);
- imm.onWindowFocus(mView, mView.findFocus(),
- mWindowAttributes.softInputMode,
- !mHasHadWindowFocus, mWindowAttributes.flags);
- }
- }
- }
-
boolean cancelDraw = attachInfo.mTreeObserver.dispatchOnPreDraw();
if (!cancelDraw && !newSurface) {
@@ -1192,7 +1176,7 @@ public final class ViewRoot extends Handler implements ViewParent,
// properly re-composite its drawing on a transparent
// background. This automatically respects the clip/dirty region
if (!canvas.isOpaque()) {
- canvas.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
+ canvas.drawColor(0xff0000ff, PorterDuff.Mode.CLEAR);
} else if (yoff != 0) {
// If we are applying an offset, we need to clear the area
// where the offset doesn't appear to avoid having garbage
@@ -1624,13 +1608,10 @@ public final class ViewRoot extends Handler implements ViewParent,
}
}
- mLastWasImTarget = WindowManager.LayoutParams
- .mayUseInputMethod(mWindowAttributes.flags);
-
InputMethodManager imm = InputMethodManager.peekInstance();
if (mView != null) {
- if (hasWindowFocus && imm != null && mLastWasImTarget) {
- imm.startGettingWindowFocus(mView);
+ if (hasWindowFocus && imm != null) {
+ imm.startGettingWindowFocus();
}
mView.dispatchWindowFocusChanged(hasWindowFocus);
}
@@ -1638,7 +1619,7 @@ public final class ViewRoot extends Handler implements ViewParent,
// Note: must be done after the focus change callbacks,
// so all of the view state is set up correctly.
if (hasWindowFocus) {
- if (imm != null && mLastWasImTarget) {
+ if (imm != null) {
imm.onWindowFocus(mView, mView.findFocus(),
mWindowAttributes.softInputMode,
!mHasHadWindowFocus, mWindowAttributes.flags);
@@ -1995,9 +1976,6 @@ public final class ViewRoot extends Handler implements ViewParent,
if (event.getAction() != KeyEvent.ACTION_DOWN) {
return false;
}
- if ((event.getFlags()&KeyEvent.FLAG_KEEP_TOUCH_MODE) != 0) {
- return false;
- }
// only relevant if we are in touch mode
if (!mAttachInfo.mInTouchMode) {
@@ -2117,7 +2095,8 @@ public final class ViewRoot extends Handler implements ViewParent,
// If it is possible for this window to interact with the input
// method window, then we want to first dispatch our key events
// to the input method.
- if (mLastWasImTarget) {
+ if (WindowManager.LayoutParams.mayUseInputMethod(
+ mWindowAttributes.flags)) {
InputMethodManager imm = InputMethodManager.peekInstance();
if (imm != null && mView != null) {
int seq = enqueuePendingEvent(event, sendDone);
@@ -2147,10 +2126,6 @@ public final class ViewRoot extends Handler implements ViewParent,
sWindowSession.finishKey(mWindow);
} catch (RemoteException e) {
}
- } else {
- Log.w("ViewRoot", "handleFinishedEvent(seq=" + seq
- + " handled=" + handled + " ev=" + event
- + ") neither delivering nor finishing key");
}
}
}
@@ -2473,8 +2448,6 @@ public final class ViewRoot extends Handler implements ViewParent,
final ViewRoot viewRoot = mViewRoot.get();
if (viewRoot != null) {
viewRoot.dispatchKey(event);
- } else {
- Log.w("ViewRoot.W", "Key event " + event + " but no ViewRoot available!");
}
}
diff --git a/core/java/android/view/inputmethod/BaseInputConnection.java b/core/java/android/view/inputmethod/BaseInputConnection.java
index 52b4107..6fbc174 100644
--- a/core/java/android/view/inputmethod/BaseInputConnection.java
+++ b/core/java/android/view/inputmethod/BaseInputConnection.java
@@ -341,13 +341,6 @@ public class BaseInputConnection implements InputConnection {
/**
* The default implementation does nothing.
*/
- public boolean performEditorAction(int actionCode) {
- return false;
- }
-
- /**
- * The default implementation does nothing.
- */
public boolean performContextMenuAction(int id) {
return false;
}
diff --git a/core/java/android/view/inputmethod/EditorInfo.java b/core/java/android/view/inputmethod/EditorInfo.java
index 0405371..b2f26d7 100644
--- a/core/java/android/view/inputmethod/EditorInfo.java
+++ b/core/java/android/view/inputmethod/EditorInfo.java
@@ -25,100 +25,17 @@ public class EditorInfo implements InputType, Parcelable {
public int inputType = TYPE_NULL;
/**
- * Set of bits in {@link #imeOptions} that provide alternative actions
- * associated with the "enter" key. This both helps the IME provide
- * better feedback about what the enter key will do, and also allows it
- * to provide alternative mechanisms for providing that command.
- */
- public static final int IME_MASK_ACTION = 0x000000ff;
-
- /**
- * Bits of {@link #IME_MASK_ACTION}: there is no special action
- * associated with this editor.
- */
- public static final int IME_ACTION_NONE = 0x00000000;
-
- /**
- * Bits of {@link #IME_MASK_ACTION}: the action key performs a "go"
- * operation to take the user to the target of the text they typed.
- * Typically used, for example, when entering a URL.
- */
- public static final int IME_ACTION_GO = 0x00000001;
-
- /**
- * Bits of {@link #IME_MASK_ACTION}: the action key performs a "search"
- * operation, taking the user to the results of searching for the text
- * the have typed (in whatever context is appropriate).
- */
- public static final int IME_ACTION_SEARCH = 0x00000002;
-
- /**
- * Bits of {@link #IME_MASK_ACTION}: the action key performs a "send"
- * operation, delivering the text to its target. This is typically used
- * when composing a message.
- */
- public static final int IME_ACTION_SEND = 0x00000003;
-
- /**
- * Bits of {@link #IME_MASK_ACTION}: the action key performs a "next"
- * operation, taking the user to the next field that will accept text.
- */
- public static final int IME_ACTION_NEXT = 0x00000004;
-
- /**
- * Flag of {@link #imeOptions}: used in conjunction with
- * {@link #IME_MASK_ACTION}, this indicates that the action should not
- * be available in-line as the same as a "enter" key. Typically this is
- * because the action has such a significant impact or is not recoverable
- * enough that accidentally hitting it should be avoided, such as sending
- * a message.
- */
- public static final int IME_FLAG_NO_ENTER_ACTION = 0x40000000;
-
- /**
- * Generic non-special type for {@link #imeOptions}.
- */
- public static final int IME_NORMAL = 0x00000000;
-
- /**
- * Special code for when the ime option has been undefined. This is not
- * used with the EditorInfo structure, but can be used elsewhere.
- */
- public static final int IME_UNDEFINED = 0x80000000;
-
- /**
- * Extended type information for the editor, to help the IME better
- * integrate with it.
- */
- public int imeOptions = IME_NORMAL;
-
- /**
- * A string supplying additional information options that are
- * private to a particular IME implementation. The string must be
+ * A string supplying additional information about the content type that
+ * is private to a particular IME implementation. The string must be
* scoped to a package owned by the implementation, to ensure there are
* no conflicts between implementations, but other than that you can put
* whatever you want in it to communicate with the IME. For example,
* you could have a string that supplies an argument like
* <code>"com.example.myapp.SpecialMode=3"</code>. This field is can be
- * filled in from the {@link android.R.attr#privateImeOptions}
+ * filled in from the {@link android.R.attr#editorPrivateContentType}
* attribute of a TextView.
*/
- public String privateImeOptions = null;
-
- /**
- * In some cases an IME may be able to display an arbitrary label for
- * a command the user can perform, which you can specify here. You can
- * not count on this being used.
- */
- public CharSequence actionLabel = null;
-
- /**
- * If {@link #actionLabel} has been given, this is the id for that command
- * when the user presses its button that is delivered back with
- * {@link InputConnection#performEditorAction(int)
- * InputConnection.performEditorAction()}.
- */
- public int actionId = 0;
+ public String privateContentType = null;
/**
* The text offset of the start of the selection at the time editing
@@ -189,10 +106,7 @@ public class EditorInfo implements InputType, Parcelable {
*/
public void dump(Printer pw, String prefix) {
pw.println(prefix + "inputType=0x" + Integer.toHexString(inputType)
- + " imeOptions=0x" + Integer.toHexString(imeOptions)
- + " privateImeOptions=" + privateImeOptions);
- pw.println(prefix + "actionLabel=" + actionLabel
- + " actionId=" + actionId);
+ + " privateContentType=" + privateContentType);
pw.println(prefix + "initialSelStart=" + initialSelStart
+ " initialSelEnd=" + initialSelEnd
+ " initialCapsMode=0x"
@@ -213,10 +127,7 @@ public class EditorInfo implements InputType, Parcelable {
*/
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(inputType);
- dest.writeInt(imeOptions);
- dest.writeString(privateImeOptions);
- TextUtils.writeToParcel(actionLabel, dest, flags);
- dest.writeInt(actionId);
+ dest.writeString(privateContentType);
dest.writeInt(initialSelStart);
dest.writeInt(initialSelEnd);
dest.writeInt(initialCapsMode);
@@ -235,10 +146,7 @@ public class EditorInfo implements InputType, Parcelable {
public EditorInfo createFromParcel(Parcel source) {
EditorInfo res = new EditorInfo();
res.inputType = source.readInt();
- res.imeOptions = source.readInt();
- res.privateImeOptions = source.readString();
- res.actionLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
- res.actionId = source.readInt();
+ res.privateContentType = source.readString();
res.initialSelStart = source.readInt();
res.initialSelEnd = source.readInt();
res.initialCapsMode = source.readInt();
diff --git a/core/java/android/view/inputmethod/InputConnection.java b/core/java/android/view/inputmethod/InputConnection.java
index 32cce35..530127d 100644
--- a/core/java/android/view/inputmethod/InputConnection.java
+++ b/core/java/android/view/inputmethod/InputConnection.java
@@ -208,24 +208,10 @@ public interface InputConnection {
/**
* Set the selection of the text editor. To set the cursor position,
* start and end should have the same value.
- * @return Returns true on success, false if the input connection is no longer
- * valid.
*/
public boolean setSelection(int start, int end);
/**
- * Have the editor perform an action it has said it can do.
- *
- * @param editorAction This must be one of the action constants for
- * {@link EditorInfo#imeOptions EditorInfo.editorType}, such as
- * {@link EditorInfo#IME_ACTION_GO EditorInfo.EDITOR_ACTION_GO}.
- *
- * @return Returns true on success, false if the input connection is no longer
- * valid.
- */
- public boolean performEditorAction(int editorAction);
-
- /**
* Perform a context menu action on the field. The given id may be one of:
* {@link android.R.id#selectAll},
* {@link android.R.id#startSelectingText}, {@link android.R.id#stopSelectingText},
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index e9e4703..91fa211 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -222,11 +222,6 @@ public final class InputMethodManager {
// -----------------------------------------------------------
/**
- * This is the root view of the overall window that currently has input
- * method focus.
- */
- View mCurRootView;
- /**
* This is the view that should currently be served by an input method,
* regardless of the state of setting that up.
*/
@@ -845,13 +840,6 @@ public final class InputMethodManager {
void focusInLocked(View view) {
if (DEBUG) Log.v(TAG, "focusIn: " + view);
-
- if (mCurRootView != view.getRootView()) {
- // This is a request from a window that isn't in the window with
- // IME focus, so ignore it.
- return;
- }
-
// Okay we have a new view that is being served.
if (mServedView != view) {
mCurrentTextBoxAttribute = null;
@@ -925,7 +913,7 @@ public final class InputMethodManager {
}
/**
- * Called by ViewRoot when its window gets input focus.
+ * Called by ViewRoot the first time it gets window focus.
* @hide
*/
public void onWindowFocus(View rootView, View focusedView, int softInputMode,
@@ -958,10 +946,9 @@ public final class InputMethodManager {
}
/** @hide */
- public void startGettingWindowFocus(View rootView) {
+ public void startGettingWindowFocus() {
synchronized (mH) {
mWindowFocusedView = null;
- mCurRootView = rootView;
}
}
@@ -1178,7 +1165,6 @@ public final class InputMethodManager {
+ " mBindSequence=" + mBindSequence
+ " mCurId=" + mCurId);
p.println(" mCurMethod=" + mCurMethod);
- p.println(" mCurRootView=" + mCurRootView);
p.println(" mServedView=" + mServedView);
p.println(" mLastServedView=" + mLastServedView);
p.println(" mServedConnecting=" + mServedConnecting);
diff --git a/core/java/android/webkit/CallbackProxy.java b/core/java/android/webkit/CallbackProxy.java
index 84aeb83..4f8e5e4 100644
--- a/core/java/android/webkit/CallbackProxy.java
+++ b/core/java/android/webkit/CallbackProxy.java
@@ -907,12 +907,10 @@ class CallbackProxy extends Handler {
}
public void onReceivedIcon(Bitmap icon) {
- // The current item might be null if the icon was already stored in the
- // database and this is a new WebView.
- WebHistoryItem i = mBackForwardList.getCurrentItem();
- if (i != null) {
- i.setFavicon(icon);
+ if (Config.DEBUG && mBackForwardList.getCurrentItem() == null) {
+ throw new AssertionError();
}
+ mBackForwardList.getCurrentItem().setFavicon(icon);
// Do an unsynchronized quick check to avoid posting if no callback has
// been set.
if (mWebChromeClient == null) {
diff --git a/core/java/android/webkit/TextDialog.java b/core/java/android/webkit/TextDialog.java
index 8a82411..c2620a5 100644
--- a/core/java/android/webkit/TextDialog.java
+++ b/core/java/android/webkit/TextDialog.java
@@ -25,6 +25,8 @@ import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.RectShape;
+import android.os.Handler;
+import android.os.Message;
import android.text.Editable;
import android.text.InputFilter;
import android.text.Selection;
@@ -41,6 +43,7 @@ import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ViewConfiguration;
import android.widget.AbsoluteLayout.LayoutParams;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
@@ -79,6 +82,22 @@ import java.util.ArrayList;
// FIXME: This can be replaced with TextView.NO_FILTERS if that
// is made public/protected.
private static final InputFilter[] NO_FILTERS = new InputFilter[0];
+ // The time of the last enter down, so we know whether to perform a long
+ // press.
+ private long mDownTime;
+
+ private boolean mTrackballDown = false;
+ private static int LONGPRESS = 1;
+ private Handler mHandler = new Handler() {
+ public void handleMessage(Message msg) {
+ if (msg.what == LONGPRESS) {
+ if (mTrackballDown) {
+ performLongClick();
+ mTrackballDown = false;
+ }
+ }
+ }
+ };
/**
* Create a new TextDialog.
@@ -116,13 +135,6 @@ import java.util.ArrayList;
}
@Override
- protected boolean shouldAdvanceFocusOnEnter() {
- // In the browser, single line textfields use enter as a form submit,
- // so we never want to advance the focus on enter.
- return false;
- }
-
- @Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.isSystem()) {
return super.dispatchKeyEvent(event);
@@ -140,33 +152,43 @@ import java.util.ArrayList;
return true;
}
- if ((mSingle && KeyEvent.KEYCODE_ENTER == keyCode)) {
+ // For single-line textfields, return key should not be handled
+ // here. Instead, the WebView is passed the key up, so it may fire a
+ // submit/onClick.
+ // Center key should always be passed to a potential onClick
+ if ((mSingle && KeyEvent.KEYCODE_ENTER == keyCode)
+ || KeyEvent.KEYCODE_DPAD_CENTER == keyCode) {
if (isPopupShowing()) {
- return super.dispatchKeyEvent(event);
+ super.dispatchKeyEvent(event);
+ return true;
}
- if (!down) {
- // Hide the keyboard, since the user has just submitted this
- // form. The submission happens thanks to the two calls
- // to sendDomEvent.
+ if (down) {
+ if (event.getRepeatCount() == 0) {
+ mGotEnterDown = true;
+ mDownTime = event.getEventTime();
+ // Send the keydown when the up comes, so that we have
+ // a chance to handle a long press.
+ } else if (mGotEnterDown && event.getEventTime() - mDownTime >
+ ViewConfiguration.getLongPressTimeout()) {
+ performLongClick();
+ mGotEnterDown = false;
+ }
+ } else if (mGotEnterDown) {
+ mGotEnterDown = false;
+ if (KeyEvent.KEYCODE_DPAD_CENTER == keyCode) {
+ mWebView.shortPressOnTextField();
+ return true;
+ }
+ // If we reached here, then this is a single line textfield, and
+ // the user pressed ENTER. In this case, we want to hide the
+ // soft input method.
InputMethodManager.getInstance(mContext)
.hideSoftInputFromWindow(getWindowToken(), 0);
sendDomEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keyCode));
sendDomEvent(event);
}
- return super.dispatchKeyEvent(event);
- } else if (KeyEvent.KEYCODE_DPAD_CENTER == keyCode) {
- // Note that this handles center key and trackball.
- if (isPopupShowing()) {
- return super.dispatchKeyEvent(event);
- }
- // Center key should be passed to a potential onClick
- if (!down) {
- mWebView.shortPressOnTextField();
- }
- // Pass to super to handle longpress.
- return super.dispatchKeyEvent(event);
+ return true;
}
-
// Ensure there is a layout so arrow keys are handled properly.
if (getLayout() == null) {
measure(mWidthSpec, mHeightSpec);
@@ -203,8 +225,9 @@ import java.util.ArrayList;
case KeyEvent.KEYCODE_DPAD_DOWN:
isArrowKey = true;
break;
+ case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
- // For multi-line text boxes, newlines will
+ // For multi-line text boxes, newlines and dpad center will
// trigger onTextChanged for key down (which will send both
// key up and key down) but not key up.
mGotEnterDown = true;
@@ -246,7 +269,7 @@ import java.util.ArrayList;
// with WebCore's notion of the current selection, reset the selection
// to what it was before the key event.
Selection.setSelection(text, oldStart, oldEnd);
- // Ignore the key up event for newlines. This prevents
+ // Ignore the key up event for newlines or dpad center. This prevents
// multiple newlines in the native textarea.
if (mGotEnterDown && !down) {
return true;
@@ -368,8 +391,27 @@ import java.util.ArrayList;
if (isPopupShowing()) {
return super.onTrackballEvent(event);
}
- if (event.getAction() != MotionEvent.ACTION_MOVE) {
- return false;
+ int action = event.getAction();
+ switch (action) {
+ case MotionEvent.ACTION_DOWN:
+ if (!mTrackballDown) {
+ mTrackballDown = true;
+ mHandler.sendEmptyMessageDelayed(LONGPRESS,
+ ViewConfiguration.getLongPressTimeout());
+ }
+ return true;
+ case MotionEvent.ACTION_UP:
+ if (mTrackballDown) {
+ mWebView.shortPressOnTextField();
+ mTrackballDown = false;
+ mHandler.removeMessages(LONGPRESS);
+ }
+ return true;
+ case MotionEvent.ACTION_CANCEL:
+ mTrackballDown = false;
+ return true;
+ case MotionEvent.ACTION_MOVE:
+ // fall through
}
Spannable text = (Spannable) getText();
MovementMethod move = getMovementMethod();
@@ -400,6 +442,7 @@ import java.util.ArrayList;
// hide the soft keyboard when the edit text is out of focus
InputMethodManager.getInstance(mContext).hideSoftInputFromWindow(
getWindowToken(), 0);
+ mHandler.removeMessages(LONGPRESS);
mWebView.removeView(this);
mWebView.requestFocus();
mScrollToAccommodateCursor = false;
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 5126ef0..417b657 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -71,7 +71,6 @@ import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.Scroller;
import android.widget.Toast;
-import android.widget.ZoomButtonsController;
import android.widget.ZoomControls;
import android.widget.ZoomRingController;
import android.widget.FrameLayout;
@@ -285,10 +284,8 @@ public class WebView extends AbsoluteLayout
/**
* Customizable constant
*/
- // pre-computed square of ViewConfiguration.getScaledTouchSlop()
+ // pre-computed square of ViewConfiguration.getTouchSlop()
private int mTouchSlopSquare;
- // pre-computed square of ViewConfiguration.getScaledDoubleTapSlop()
- private int mDoubleTapSlopSquare;
// This should be ViewConfiguration.getTapTimeout()
// But system time out is 100ms, which is too short for the browser.
// In the browser, if it switches out of tap too soon, jump tap won't work.
@@ -324,8 +321,6 @@ public class WebView extends AbsoluteLayout
private int mContentHeight; // cache of value from WebViewCore
static int MAX_FLOAT_CONTENT_WIDTH = 480;
- // the calculated minimum content width for calculating the minimum scale.
- // If it is 0, it means don't use it.
private int mMinContentWidth;
// Need to have the separate control for horizontal and vertical scrollbar
@@ -558,9 +553,7 @@ public class WebView extends AbsoluteLayout
return mExtra;
}
}
-
- private ZoomButtonsController mZoomButtonsController;
-
+
private ZoomRingController mZoomRingController;
private ImageView mZoomRingOverview;
private Animation mZoomRingOverviewExitAnimation;
@@ -624,9 +617,6 @@ public class WebView extends AbsoluteLayout
/ ZOOM_RING_STEPS;
}
mZoomRingController.setThumbAngle(angle * MAX_ZOOM_RING_ANGLE);
-
- // Don't show a thumb if the user cannot zoom
- mZoomRingController.setThumbVisible(mMinZoomScale != mMaxZoomScale);
// Show the zoom overview tab on the ring
setZoomOverviewVisible(true);
@@ -743,26 +733,6 @@ public class WebView extends AbsoluteLayout
mZoomRingController.setPannerAcceleration(160);
mZoomRingController.setPannerStartAcceleratingDuration(700);
createZoomRingOverviewTab();
- mZoomButtonsController = new ZoomButtonsController(context, this);
- mZoomButtonsController.setOverviewVisible(true);
- mZoomButtonsController.setCallback(new ZoomButtonsController.OnZoomListener() {
- public void onCenter(int x, int y) {
- mZoomListener.onCenter(x, y);
- }
-
- public void onOverview() {
- mZoomButtonsController.setVisible(false);
- zoomScrollOut();
- }
-
- public void onVisibilityChanged(boolean visible) {
- mZoomListener.onVisibilityChanged(visible);
- }
-
- public void onZoom(boolean zoomIn) {
- mZoomListener.onSimpleZoom(zoomIn);
- }
- });
}
private void init() {
@@ -775,9 +745,6 @@ public class WebView extends AbsoluteLayout
final int slop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
mTouchSlopSquare = slop * slop;
mMinLockSnapReverseDistance = slop;
- final int doubleTapslop = ViewConfiguration.get(getContext())
- .getScaledDoubleTapSlop();
- mDoubleTapSlopSquare = doubleTapslop * doubleTapslop;
}
private void createZoomRingOverviewTab() {
@@ -796,7 +763,7 @@ public class WebView extends AbsoluteLayout
FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.CENTER);
// TODO: magic constant that's based on the zoom ring radius + some offset
- lp.topMargin = 200;
+ lp.topMargin = 208;
mZoomRingOverview.setLayoutParams(lp);
mZoomRingOverview.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
@@ -2338,19 +2305,8 @@ public class WebView extends AbsoluteLayout
/**
* Use this function to bind an object to Javascript so that the
* methods can be accessed from Javascript.
- * <p><strong>IMPORTANT:</strong>
- * <ul>
- * <li> Using addJavascriptInterface() allows JavaScript to control your
- * application. This can be a very useful feature or a dangerous security
- * issue. When the HTML in the WebView is untrustworthy (for example, part
- * or all of the HTML is provided by some person or process), then an
- * attacker could inject HTML that will execute your code and possibly any
- * code of the attacker's choosing.<br>
- * Do not use addJavascriptInterface() unless all of the HTML in this
- * WebView was written by you.</li>
- * <li> The Java object that is bound runs in another thread and not in
- * the thread that it was constructed in.</li>
- * </ul></p>
+ * IMPORTANT, the object that is bound runs in another thread and
+ * not in the thread that it was constructed in.
* @param obj The class instance to bind to Javascript
* @param interfaceName The name to used to expose the class in Javascript
*/
@@ -3013,8 +2969,8 @@ public class WebView extends AbsoluteLayout
if (lp != null) {
// Take the last touch and adjust for the location of the
// TextDialog.
- float x = mLastTouchX + (float) (mScrollX - lp.x);
- float y = mLastTouchY + (float) (mScrollY - lp.y);
+ float x = mLastTouchX - lp.x;
+ float y = mLastTouchY - lp.y;
mTextEntry.fakeTouchEvent(x, y);
}
}
@@ -3208,9 +3164,6 @@ public class WebView extends AbsoluteLayout
mSelectX = mScrollX + (int) mLastTouchX;
mSelectY = mScrollY + (int) mLastTouchY;
}
- int contentX = viewToContent((int) mLastTouchX + mScrollX);
- int contentY = viewToContent((int) mLastTouchY + mScrollY);
- nativeClearFocus(contentX, contentY);
}
if (keyCode >= KeyEvent.KEYCODE_DPAD_UP
@@ -3402,9 +3355,6 @@ public class WebView extends AbsoluteLayout
public void emulateShiftHeld() {
mExtendSelection = false;
mShiftIsPressed = true;
- int contentX = viewToContent((int) mLastTouchX + mScrollX);
- int contentY = viewToContent((int) mLastTouchY + mScrollY);
- nativeClearFocus(contentX, contentY);
}
private boolean commitCopy() {
@@ -3451,7 +3401,6 @@ public class WebView extends AbsoluteLayout
// Clean up the zoom ring
mZoomRingController.setVisible(false);
- mZoomButtonsController.setVisible(false);
}
// Implementation for OnHierarchyChangeListener
@@ -3500,17 +3449,8 @@ public class WebView extends AbsoluteLayout
// false for the first parameter
}
} else {
- if (!mZoomButtonsController.isVisible()) {
- /*
- * The zoom controls come in their own window, so our window
- * loses focus. Our policy is to not draw the focus ring if
- * our window is not focused, but this is an exception since
- * the user can still navigate the web page with the zoom
- * controls showing.
- */
- // If our window has lost focus, stop drawing the focus ring
- mDrawFocusRing = false;
- }
+ // If our window has lost focus, stop drawing the focus ring
+ mDrawFocusRing = false;
mGotKeyDown = false;
mShiftIsPressed = false;
if (mNativeClass != 0) {
@@ -3652,8 +3592,7 @@ public class WebView extends AbsoluteLayout
+ mTouchMode);
}
- if ((mZoomRingController.isVisible() || mZoomButtonsController.isVisible())
- && mInZoomTapDragMode) {
+ if (mZoomRingController.isVisible() && mInZoomTapDragMode) {
if (ev.getAction() == MotionEvent.ACTION_UP) {
// Just released the second tap, no longer in tap-drag mode
mInZoomTapDragMode = false;
@@ -3691,9 +3630,6 @@ public class WebView extends AbsoluteLayout
mLastSentTouchTime = eventTime;
}
- int deltaX = (int) (mLastTouchX - x);
- int deltaY = (int) (mLastTouchY - y);
-
switch (action) {
case MotionEvent.ACTION_DOWN: {
if (mTouchMode == SCROLL_ZOOM_ANIMATION_IN
@@ -3719,23 +3655,16 @@ public class WebView extends AbsoluteLayout
, viewToContent(mSelectY), false);
mTouchSelection = mExtendSelection = true;
} else if (!ZoomRingController.useOldZoom(mContext) &&
- mPrivateHandler.hasMessages(RELEASE_SINGLE_TAP) &&
- (deltaX * deltaX + deltaY * deltaY < mDoubleTapSlopSquare)) {
+ mPrivateHandler.hasMessages(RELEASE_SINGLE_TAP)) {
// Found doubletap, invoke the zoom controller
mPrivateHandler.removeMessages(RELEASE_SINGLE_TAP);
- int contentX = viewToContent((int) mLastTouchX + mScrollX);
- int contentY = viewToContent((int) mLastTouchY + mScrollY);
- if (inEditingMode()) {
- mTextEntry.updateCachedTextfield();
- }
- nativeClearFocus(contentX, contentY);
+ mZoomRingController.setVisible(true);
mInZoomTapDragMode = true;
if (mLogEvent) {
EventLog.writeEvent(EVENT_LOG_DOUBLE_TAP_DURATION,
(eventTime - mLastTouchUpTime), eventTime);
}
- return mZoomRingController.handleDoubleTapEvent(ev) ||
- mZoomButtonsController.handleDoubleTapEvent(ev);
+ return mZoomRingController.handleDoubleTapEvent(ev);
} else {
mTouchMode = TOUCH_INIT_MODE;
mPreventDrag = mForwardTouchEvents;
@@ -3772,6 +3701,9 @@ public class WebView extends AbsoluteLayout
}
mVelocityTracker.addMovement(ev);
+ int deltaX = (int) (mLastTouchX - x);
+ int deltaY = (int) (mLastTouchY - y);
+
if (mTouchMode != TOUCH_DRAG_MODE) {
if (mTouchMode == TOUCH_SELECT_MODE) {
mSelectX = mScrollX + (int) x;
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 6ab088d..a7261c5 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -1294,9 +1294,7 @@ final class WebViewCore {
draw.mViewPoint = new Point(mCurrentViewWidth, mCurrentViewHeight);
if (LOGV_ENABLED) Log.v(LOGTAG, "webkitDraw NEW_PICTURE_MSG_ID");
Message.obtain(mWebView.mPrivateHandler,
- WebView.NEW_PICTURE_MSG_ID,
- mViewportMinimumScale == 0 ? nativeGetContentMinPrefWidth()
- : 0,
+ WebView.NEW_PICTURE_MSG_ID, nativeGetContentMinPrefWidth(),
0, draw).sendToTarget();
nativeCheckNavCache();
if (mWebkitScrollX != 0 || mWebkitScrollY != 0) {
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 9da78d0..f362e22 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -17,6 +17,7 @@
package android.widget;
import android.content.Context;
+import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
@@ -27,7 +28,6 @@ import android.os.Handler;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.Editable;
-import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.Gravity;
@@ -893,16 +893,25 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
mSyncMode = SYNC_FIRST_POSITION;
}
- setFilterText(ss.filter);
+ // Don't restore the type filter window when there is no keyboard
+ if (acceptFilter()) {
+ String filterText = ss.filter;
+ setFilterText(filterText);
+ }
requestLayout();
}
private boolean acceptFilter() {
final Context context = mContext;
+ final Configuration configuration = context.getResources().getConfiguration();
+ final boolean keyboardShowing = configuration.keyboardHidden !=
+ Configuration.KEYBOARDHIDDEN_YES;
+ final boolean hasKeyboard = configuration.keyboard != Configuration.KEYBOARD_NOKEYS;
final InputMethodManager inputManager = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
- return !inputManager.isFullscreenMode();
+ return (hasKeyboard && keyboardShowing) ||
+ (!hasKeyboard && !inputManager.isFullscreenMode());
}
/**
@@ -913,7 +922,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
*/
public void setFilterText(String filterText) {
// TODO: Should we check for acceptFilter()?
- if (mTextFilterEnabled && !TextUtils.isEmpty(filterText)) {
+ if (mTextFilterEnabled && filterText != null && filterText.length() > 0) {
createTextFilter(false);
// This is going to call our listener onTextChanged, but we might not
// be ready to bring up a window yet
@@ -933,18 +942,6 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
}
}
- /**
- * Returns the list's text filter, if available.
- * @return the list's text filter or null if filtering isn't enabled
- * @hide pending API Council approval
- */
- public CharSequence getTextFilter() {
- if (mTextFilterEnabled && mTextFilter != null) {
- return mTextFilter.getText();
- }
- return null;
- }
-
@Override
protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) {
super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
diff --git a/core/java/android/widget/AbsSeekBar.java b/core/java/android/widget/AbsSeekBar.java
index 1d553f1..b046a6b 100644
--- a/core/java/android/widget/AbsSeekBar.java
+++ b/core/java/android/widget/AbsSeekBar.java
@@ -40,15 +40,9 @@ public abstract class AbsSeekBar extends ProgressBar {
* Whether this is user seekable.
*/
boolean mIsUserSeekable = true;
-
- /**
- * On key presses (right or left), the amount to increment/decrement the
- * progress.
- */
- private int mKeyProgressIncrement = 1;
private static final int NO_ALPHA = 0xFF;
- private float mDisabledAlpha;
+ float mDisabledAlpha;
public AbsSeekBar(Context context) {
super(context);
@@ -107,39 +101,6 @@ public abstract class AbsSeekBar extends ProgressBar {
invalidate();
}
- /**
- * Sets the amount of progress changed via the arrow keys.
- *
- * @param increment The amount to increment or decrement when the user
- * presses the arrow keys.
- */
- public void setKeyProgressIncrement(int increment) {
- mKeyProgressIncrement = increment < 0 ? -increment : increment;
- }
-
- /**
- * Returns the amount of progress changed via the arrow keys.
- * <p>
- * By default, this will be a value that is derived from the max progress.
- *
- * @return The amount to increment or decrement when the user presses the
- * arrow keys. This will be positive.
- */
- public int getKeyProgressIncrement() {
- return mKeyProgressIncrement;
- }
-
- @Override
- public synchronized void setMax(int max) {
- super.setMax(max);
-
- if ((mKeyProgressIncrement == 0) || (getMax() / mKeyProgressIncrement > 20)) {
- // It will take the user too long to change this via keys, change it
- // to something more reasonable
- setKeyProgressIncrement(Math.max(1, Math.round((float) getMax() / 20)));
- }
- }
-
@Override
protected boolean verifyDrawable(Drawable who) {
return who == mThumb || super.verifyDrawable(who);
@@ -360,12 +321,12 @@ public abstract class AbsSeekBar extends ProgressBar {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_LEFT:
if (progress <= 0) break;
- setProgress(progress - mKeyProgressIncrement, true);
+ setProgress(progress - 1, true);
return true;
case KeyEvent.KEYCODE_DPAD_RIGHT:
if (progress >= getMax()) break;
- setProgress(progress + mKeyProgressIncrement, true);
+ setProgress(progress + 1, true);
return true;
}
diff --git a/core/java/android/widget/AnalogClock.java b/core/java/android/widget/AnalogClock.java
index f847bc3..cf9c588 100644
--- a/core/java/android/widget/AnalogClock.java
+++ b/core/java/android/widget/AnalogClock.java
@@ -48,6 +48,7 @@ public class AnalogClock extends View {
private int mDialHeight;
private boolean mAttached;
+ private long mLastTime;
private final Handler mHandler = new Handler();
private float mMinutes;
@@ -95,6 +96,7 @@ public class AnalogClock extends View {
protected void onAttachedToWindow() {
super.onAttachedToWindow();
+ onTimeChanged();
if (!mAttached) {
mAttached = true;
IntentFilter filter = new IntentFilter();
@@ -105,15 +107,6 @@ public class AnalogClock extends View {
getContext().registerReceiver(mIntentReceiver, filter, null, mHandler);
}
-
- // NOTE: It's safe to do these after registering the receiver since the receiver always runs
- // in the main thread, therefore the receiver can't run before this method returns.
-
- // The time zone may have changed while the receiver wasn't registered, so update the Time
- mCalendar = new Time();
-
- // Make sure we update to the current time
- onTimeChanged();
}
@Override
@@ -219,7 +212,9 @@ public class AnalogClock extends View {
}
private void onTimeChanged() {
- mCalendar.setToNow();
+ long time = System.currentTimeMillis();
+ mCalendar.set(time);
+ mLastTime = time;
int hour = mCalendar.hour;
int minute = mCalendar.minute;
@@ -236,6 +231,8 @@ public class AnalogClock extends View {
if (intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED)) {
String tz = intent.getStringExtra("time-zone");
mCalendar = new Time(TimeZone.getTimeZone(tz).getID());
+ } else {
+ mCalendar = new Time();
}
onTimeChanged();
diff --git a/core/java/android/widget/AutoCompleteTextView.java b/core/java/android/widget/AutoCompleteTextView.java
index 0c1c72a..7a51676 100644
--- a/core/java/android/widget/AutoCompleteTextView.java
+++ b/core/java/android/widget/AutoCompleteTextView.java
@@ -78,8 +78,6 @@ import com.android.internal.R;
* @attr ref android.R.styleable#AutoCompleteTextView_completionThreshold
* @attr ref android.R.styleable#AutoCompleteTextView_completionHintView
* @attr ref android.R.styleable#AutoCompleteTextView_dropDownSelector
- * @attr ref android.R.styleable#AutoCompleteTextView_dropDownAnchor
- * @attr ref android.R.styleable#AutoCompleteTextView_dropDownWidth
*/
public class AutoCompleteTextView extends EditText implements Filter.FilterListener {
static final boolean DEBUG = false;
@@ -98,9 +96,6 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
private DropDownListView mDropDownList;
private int mDropDownVerticalOffset;
private int mDropDownHorizontalOffset;
- private int mDropDownAnchorId;
- private View mDropDownAnchorView; // view is retrieved lazily from id once needed
- private int mDropDownWidth;
private Drawable mDropDownListHighlight;
@@ -152,18 +147,6 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
a.getDimension(R.styleable.AutoCompleteTextView_dropDownVerticalOffset, 0.0f);
mDropDownHorizontalOffset = (int)
a.getDimension(R.styleable.AutoCompleteTextView_dropDownHorizontalOffset, 0.0f);
-
- // Get the anchor's id now, but the view won't be ready, so wait to actually get the
- // view and store it in mDropDownAnchorView lazily in getDropDownAnchorView later.
- // Defaults to NO_ID, in which case the getDropDownAnchorView method will simply return
- // this TextView, as a default anchoring point.
- mDropDownAnchorId = a.getResourceId(R.styleable.AutoCompleteTextView_dropDownAnchor,
- View.NO_ID);
-
- // For dropdown width, the developer can specify a specific width, or FILL_PARENT
- // (for full screen width) or WRAP_CONTENT (to match the width of the anchored view).
- mDropDownWidth = a.getLayoutDimension(R.styleable.AutoCompleteTextView_dropDownWidth,
- ViewGroup.LayoutParams.WRAP_CONTENT);
mHintResource = a.getResourceId(R.styleable.AutoCompleteTextView_completionHintView,
R.layout.simple_dropdown_hint);
@@ -204,49 +187,6 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
public void setCompletionHint(CharSequence hint) {
mHintText = hint;
}
-
- /**
- * <p>Returns the current width for the auto-complete drop down list. This can
- * be a fixed width, or {@link ViewGroup.LayoutParams#FILL_PARENT} to fill the screen, or
- * {@link ViewGroup.LayoutParams#WRAP_CONTENT} to fit the width of its anchor view.</p>
- *
- * @return the width for the drop down list
- */
- public int getDropDownWidth() {
- return mDropDownWidth;
- }
-
- /**
- * <p>Sets the current width for the auto-complete drop down list. This can
- * be a fixed width, or {@link ViewGroup.LayoutParams#FILL_PARENT} to fill the screen, or
- * {@link ViewGroup.LayoutParams#WRAP_CONTENT} to fit the width of its anchor view.</p>
- *
- * @param width the width to use
- */
- public void setDropDownWidth(int width) {
- mDropDownWidth = width;
- }
-
- /**
- * <p>Returns the id for the view that the auto-complete drop down list is anchored to.</p>
- *
- * @return the view's id, or {@link View#NO_ID} if none specified
- */
- public int getDropDownAnchor() {
- return mDropDownAnchorId;
- }
-
- /**
- * <p>Sets the view to which the auto-complete drop down list should anchor. The view
- * corresponding to this id will not be loaded until the next time it is needed to avoid
- * loading a view which is not yet instantiated.</p>
- *
- * @param id the id to anchor the drop down list view to
- */
- public void setDropDownAnchor(int id) {
- mDropDownAnchorId = id;
- mDropDownAnchorView = null;
- }
/**
* <p>Returns the number of characters the user must type before the drop
@@ -801,18 +741,6 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
return result;
}
-
- /**
- * <p>Used for lazy instantiation of the anchor view from the id we have. If the value of
- * the id is NO_ID or we can't find a view for the given id, we return this TextView as
- * the default anchoring point.</p>
- */
- private View getDropDownAnchorView() {
- if (mDropDownAnchorView == null && mDropDownAnchorId != View.NO_ID) {
- mDropDownAnchorView = getRootView().findViewById(mDropDownAnchorId);
- }
- return mDropDownAnchorView == null ? this : mDropDownAnchorView;
- }
/**
* <p>Displays the drop down on screen.</p>
@@ -820,37 +748,16 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
public void showDropDown() {
int height = buildDropDown();
if (mPopup.isShowing()) {
- int widthSpec;
- if (mDropDownWidth == ViewGroup.LayoutParams.FILL_PARENT) {
- // The call to PopupWindow's update method below can accept -1 for any
- // value you do not want to update.
- widthSpec = -1;
- } else if (mDropDownWidth == ViewGroup.LayoutParams.WRAP_CONTENT) {
- widthSpec = getDropDownAnchorView().getWidth();
- } else {
- widthSpec = mDropDownWidth;
- }
- mPopup.update(getDropDownAnchorView(), mDropDownHorizontalOffset,
- mDropDownVerticalOffset, widthSpec, height);
+ mPopup.update(this, mDropDownHorizontalOffset, mDropDownVerticalOffset,
+ getWidth(), height);
} else {
- int widthSpec;
- if (mDropDownWidth == ViewGroup.LayoutParams.FILL_PARENT) {
- mPopup.setWindowLayoutMode(ViewGroup.LayoutParams.FILL_PARENT,
- ViewGroup.LayoutParams.WRAP_CONTENT);
- } else {
- mPopup.setWindowLayoutMode(0, ViewGroup.LayoutParams.WRAP_CONTENT);
- if (mDropDownWidth == ViewGroup.LayoutParams.WRAP_CONTENT) {
- mPopup.setWidth(getDropDownAnchorView().getWidth());
- } else {
- mPopup.setWidth(mDropDownWidth);
- }
- }
+ mPopup.setWindowLayoutMode(0, ViewGroup.LayoutParams.WRAP_CONTENT);
+ mPopup.setWidth(getWidth());
mPopup.setHeight(height);
mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
mPopup.setOutsideTouchable(true);
mPopup.setTouchInterceptor(new PopupTouchIntercepter());
- mPopup.showAsDropDown(getDropDownAnchorView(),
- mDropDownHorizontalOffset, mDropDownVerticalOffset);
+ mPopup.showAsDropDown(this, mDropDownHorizontalOffset, mDropDownVerticalOffset);
mDropDownList.setSelection(ListView.INVALID_POSITION);
mDropDownList.hideSelector();
mDropDownList.requestFocus();
diff --git a/core/java/android/widget/BaseAdapter.java b/core/java/android/widget/BaseAdapter.java
index 532fd76..1921d73 100644
--- a/core/java/android/widget/BaseAdapter.java
+++ b/core/java/android/widget/BaseAdapter.java
@@ -42,10 +42,6 @@ public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter {
mDataSetObservable.unregisterObserver(observer);
}
- /**
- * Notifies the attached View that the underlying data has been changed
- * and it should refresh itself.
- */
public void notifyDataSetChanged() {
mDataSetObservable.notifyChanged();
}
diff --git a/core/java/android/widget/Chronometer.java b/core/java/android/widget/Chronometer.java
index 91add58..369221e 100644
--- a/core/java/android/widget/Chronometer.java
+++ b/core/java/android/widget/Chronometer.java
@@ -69,10 +69,7 @@ public class Chronometer extends TextView {
private Object[] mFormatterArgs = new Object[1];
private StringBuilder mFormatBuilder;
private OnChronometerTickListener mOnChronometerTickListener;
- private StringBuilder mRecycle = new StringBuilder(8);
-
- private static final int TICK_WHAT = 2;
-
+
/**
* Initialize this Chronometer object.
* Sets the base to the current time.
@@ -118,7 +115,6 @@ public class Chronometer extends TextView {
@android.view.RemotableViewMethod
public void setBase(long base) {
mBase = base;
- dispatchChronometerTick();
updateText(SystemClock.elapsedRealtime());
}
@@ -220,10 +216,10 @@ public class Chronometer extends TextView {
updateRunning();
}
- private synchronized void updateText(long now) {
+ private void updateText(long now) {
long seconds = now - mBase;
seconds /= 1000;
- String text = DateUtils.formatElapsedTime(mRecycle, seconds);
+ String text = DateUtils.formatElapsedTime(seconds);
if (mFormat != null) {
Locale loc = Locale.getDefault();
@@ -251,10 +247,7 @@ public class Chronometer extends TextView {
if (running != mRunning) {
if (running) {
updateText(SystemClock.elapsedRealtime());
- dispatchChronometerTick();
- mHandler.sendMessageDelayed(Message.obtain(mHandler, TICK_WHAT), 1000);
- } else {
- mHandler.removeMessages(TICK_WHAT);
+ mHandler.sendMessageDelayed(Message.obtain(), 1000);
}
mRunning = running;
}
@@ -262,10 +255,10 @@ public class Chronometer extends TextView {
private Handler mHandler = new Handler() {
public void handleMessage(Message m) {
- if (mRunning) {
+ if (mStarted) {
updateText(SystemClock.elapsedRealtime());
dispatchChronometerTick();
- sendMessageDelayed(Message.obtain(this, TICK_WHAT), 1000);
+ sendMessageDelayed(Message.obtain(), 1000);
}
}
};
diff --git a/core/java/android/widget/CursorAdapter.java b/core/java/android/widget/CursorAdapter.java
index 898e501..3d758e7 100644
--- a/core/java/android/widget/CursorAdapter.java
+++ b/core/java/android/widget/CursorAdapter.java
@@ -348,21 +348,6 @@ public abstract class CursorAdapter extends BaseAdapter implements Filterable,
mFilterQueryProvider = filterQueryProvider;
}
- /**
- * Called when the {@link ContentObserver} on the cursor receives a change notification.
- * The default implementation provides the auto-requery logic, but may be overridden by
- * sub classes.
- *
- * @see ContentObserver#onChange(boolean)
- * @hide pending API Council approval
- */
- protected void onContentChanged() {
- if (mAutoRequery && mCursor != null && !mCursor.isClosed()) {
- if (Config.LOGV) Log.v("Cursor", "Auto requerying " + mCursor + " due to update");
- mDataValid = mCursor.requery();
- }
- }
-
private class ChangeObserver extends ContentObserver {
public ChangeObserver() {
super(new Handler());
@@ -375,7 +360,10 @@ public abstract class CursorAdapter extends BaseAdapter implements Filterable,
@Override
public void onChange(boolean selfChange) {
- onContentChanged();
+ if (mAutoRequery && mCursor != null && !mCursor.isClosed()) {
+ if (Config.LOGV) Log.v("Cursor", "Auto requerying " + mCursor + " due to update");
+ mDataValid = mCursor.requery();
+ }
}
}
diff --git a/core/java/android/widget/Filter.java b/core/java/android/widget/Filter.java
index 1d0fd5e..a2316cf 100644
--- a/core/java/android/widget/Filter.java
+++ b/core/java/android/widget/Filter.java
@@ -45,6 +45,8 @@ public abstract class Filter {
private Handler mThreadHandler;
private Handler mResultHandler;
+ private String mConstraint;
+ private boolean mConstraintIsValid = false;
/**
* <p>Creates a new asynchronous filter.</p>
@@ -82,6 +84,13 @@ public abstract class Filter {
*/
public final void filter(CharSequence constraint, FilterListener listener) {
synchronized (this) {
+ String constraintAsString = constraint != null ? constraint.toString() : null;
+ if (mConstraintIsValid && (
+ (constraintAsString == null && mConstraint == null) ||
+ (constraintAsString != null && constraintAsString.equals(mConstraint)))) {
+ // nothing to do
+ return;
+ }
if (mThreadHandler == null) {
HandlerThread thread = new HandlerThread(THREAD_NAME);
@@ -94,13 +103,16 @@ public abstract class Filter {
RequestArguments args = new RequestArguments();
// make sure we use an immutable copy of the constraint, so that
// it doesn't change while the filter operation is in progress
- args.constraint = constraint != null ? constraint.toString() : null;
+ args.constraint = constraintAsString;
args.listener = listener;
message.obj = args;
mThreadHandler.removeMessages(FILTER_TOKEN);
mThreadHandler.removeMessages(FINISH_TOKEN);
mThreadHandler.sendMessage(message);
+
+ mConstraint = constraintAsString;
+ mConstraintIsValid = true;
}
}
diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java
index 6bbf062..38bfc7c 100644
--- a/core/java/android/widget/GridView.java
+++ b/core/java/android/widget/GridView.java
@@ -924,23 +924,32 @@ public class GridView extends AbsListView {
final int count = mItemCount;
if (count > 0) {
final View child = obtainView(0);
+ final int childViewType = mAdapter.getItemViewType(0);
- AbsListView.LayoutParams p = (AbsListView.LayoutParams)child.getLayoutParams();
- if (p == null) {
- p = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
+ AbsListView.LayoutParams lp = (AbsListView.LayoutParams) child.getLayoutParams();
+ if (lp == null) {
+ lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 0);
+ child.setLayoutParams(lp);
}
- p.viewType = mAdapter.getItemViewType(0);
+ lp.viewType = childViewType;
- int childHeightSpec = getChildMeasureSpec(
- MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 0, p.height);
- int childWidthSpec = getChildMeasureSpec(
- MeasureSpec.makeMeasureSpec(mColumnWidth, MeasureSpec.EXACTLY), 0, p.width);
- child.measure(childWidthSpec, childHeightSpec);
+ final int childWidthSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec,
+ mListPadding.left + mListPadding.right, lp.width);
+
+ int lpHeight = lp.height;
+ int childHeightSpec;
+ if (lpHeight > 0) {
+ childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY);
+ } else {
+ childHeightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
+ }
+
+ child.measure(childWidthSpec, childHeightSpec);
childHeight = child.getMeasuredHeight();
- if (mRecycler.shouldRecycleViewType(p.viewType)) {
+ if (mRecycler.shouldRecycleViewType(childViewType)) {
mRecycler.addScrapView(child);
}
}
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index 652e30c..96fe595 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -875,7 +875,7 @@ public class HorizontalScrollView extends FrameLayout {
int parentHeightMeasureSpec, int heightUsed) {
final MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams();
- final int childHeightMeasureSpec = getChildMeasureSpec(parentHeightMeasureSpec,
+ final int childHeightMeasureSpec = getChildMeasureSpec(parentWidthMeasureSpec,
mPaddingTop + mPaddingBottom + lp.topMargin + lp.bottomMargin
+ heightUsed, lp.height);
final int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index a4523b9..94d1bd1 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -840,7 +840,7 @@ public class ImageView extends View {
@Override
public int getBaseline() {
- return mBaselineAligned ? getMeasuredHeight() : -1;
+ return mBaselineAligned ? getHeight() : -1;
}
/**
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index 6df72d4..4e5989c 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -1011,13 +1011,34 @@ public class ListView extends AbsListView {
if (mItemCount > 0 && (widthMode == MeasureSpec.UNSPECIFIED ||
heightMode == MeasureSpec.UNSPECIFIED)) {
final View child = obtainView(0);
+ final int childViewType = mAdapter.getItemViewType(0);
- measureScrapChild(child, 0, widthMeasureSpec);
+ AbsListView.LayoutParams lp = (AbsListView.LayoutParams) child.getLayoutParams();
+ if (lp == null) {
+ lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT, 0);
+ child.setLayoutParams(lp);
+ }
+ lp.viewType = childViewType;
+
+ final int childWidthSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec,
+ mListPadding.left + mListPadding.right, lp.width);
+
+ int lpHeight = lp.height;
+
+ int childHeightSpec;
+ if (lpHeight > 0) {
+ childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY);
+ } else {
+ childHeightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
+ }
+
+ child.measure(childWidthSpec, childHeightSpec);
childWidth = child.getMeasuredWidth();
childHeight = child.getMeasuredHeight();
- if (recycleOnMeasure()) {
+ if (mRecycler.shouldRecycleViewType(childViewType)) {
mRecycler.addScrapView(child);
}
}
@@ -1034,40 +1055,13 @@ public class ListView extends AbsListView {
if (heightMode == MeasureSpec.AT_MOST) {
// TODO: after first layout we should maybe start at the first visible position, not 0
- heightSize = measureHeightOfChildren(widthMeasureSpec, 0, NO_POSITION, heightSize, -1);
+ heightSize = measureHeightOfChildren(
+ MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.EXACTLY),
+ 0, NO_POSITION, heightSize, -1);
}
setMeasuredDimension(widthSize, heightSize);
- mWidthMeasureSpec = widthMeasureSpec;
- }
-
- private void measureScrapChild(View child, int position, int widthMeasureSpec) {
- LayoutParams p = (LayoutParams) child.getLayoutParams();
- if (p == null) {
- p = new LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
- ViewGroup.LayoutParams.WRAP_CONTENT, 0);
- }
- p.viewType = mAdapter.getItemViewType(position);
-
- int childWidthSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec,
- mListPadding.left + mListPadding.right, p.width);
- int lpHeight = p.height;
- int childHeightSpec;
- if (lpHeight > 0) {
- childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY);
- } else {
- childHeightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
- }
- child.measure(childWidthSpec, childHeightSpec);
- }
-
- /**
- * @return True to recycle the views used to measure this ListView in
- * UNSPECIFIED/AT_MOST modes, false otherwise.
- * @hide
- */
- protected boolean recycleOnMeasure() {
- return true;
+ mWidthMeasureSpec = widthMeasureSpec;
}
/**
@@ -1096,8 +1090,8 @@ public class ListView extends AbsListView {
* startPosition is 0).
* @return The height of this ListView with the given children.
*/
- final int measureHeightOfChildren(int widthMeasureSpec, int startPosition, int endPosition,
- final int maxHeight, int disallowPartialChildPosition) {
+ final int measureHeightOfChildren(final int widthMeasureSpec, final int startPosition,
+ int endPosition, final int maxHeight, int disallowPartialChildPosition) {
final ListAdapter adapter = mAdapter;
if (adapter == null) {
@@ -1116,20 +1110,29 @@ public class ListView extends AbsListView {
// mItemCount - 1 since endPosition parameter is inclusive
endPosition = (endPosition == NO_POSITION) ? adapter.getCount() - 1 : endPosition;
final AbsListView.RecycleBin recycleBin = mRecycler;
- final boolean recyle = recycleOnMeasure();
-
for (i = startPosition; i <= endPosition; ++i) {
child = obtainView(i);
+ final int childViewType = adapter.getItemViewType(i);
- measureScrapChild(child, i, widthMeasureSpec);
+ AbsListView.LayoutParams lp = (AbsListView.LayoutParams) child.getLayoutParams();
+ if (lp == null) {
+ lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT, 0);
+ child.setLayoutParams(lp);
+ }
+ lp.viewType = childViewType;
if (i > 0) {
// Count the divider for all but one child
returnedHeight += dividerHeight;
}
+ child.measure(widthMeasureSpec, lp.height >= 0
+ ? MeasureSpec.makeMeasureSpec(lp.height, MeasureSpec.EXACTLY)
+ : MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+
// Recycle the view before we possibly return from the method
- if (recyle) {
+ if (recycleBin.shouldRecycleViewType(childViewType)) {
recycleBin.addScrapView(child);
}
@@ -1653,7 +1656,7 @@ public class ListView extends AbsListView {
// Respect layout params that are already in the view. Otherwise make some up...
// noinspection unchecked
- AbsListView.LayoutParams p = (AbsListView.LayoutParams) child.getLayoutParams();
+ AbsListView.LayoutParams p = (AbsListView.LayoutParams)child.getLayoutParams();
if (p == null) {
p = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 0);
@@ -1672,7 +1675,7 @@ public class ListView extends AbsListView {
if (mChoiceMode != CHOICE_MODE_NONE && mCheckStates != null) {
if (child instanceof Checkable) {
- ((Checkable) child).setChecked(mCheckStates.get(position));
+ ((Checkable)child).setChecked(mCheckStates.get(position));
}
}
diff --git a/core/java/android/widget/MultiAutoCompleteTextView.java b/core/java/android/widget/MultiAutoCompleteTextView.java
index 05abc26..59a9310 100644
--- a/core/java/android/widget/MultiAutoCompleteTextView.java
+++ b/core/java/android/widget/MultiAutoCompleteTextView.java
@@ -126,7 +126,7 @@ public class MultiAutoCompleteTextView extends AutoCompleteTextView {
Editable text = getText();
int end = getSelectionEnd();
- if (end < 0 || mTokenizer == null) {
+ if (end < 0) {
return false;
}
@@ -147,7 +147,7 @@ public class MultiAutoCompleteTextView extends AutoCompleteTextView {
public void performValidation() {
Validator v = getValidator();
- if (v == null || mTokenizer == null) {
+ if (v == null) {
return;
}
diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java
index 53db77e..4a5cea1 100644
--- a/core/java/android/widget/PopupWindow.java
+++ b/core/java/android/widget/PopupWindow.java
@@ -30,7 +30,6 @@ import android.view.View.OnTouchListener;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
-import android.graphics.drawable.StateListDrawable;
import android.os.IBinder;
import android.content.Context;
import android.content.res.TypedArray;
@@ -103,8 +102,6 @@ public class PopupWindow {
private Rect mTempRect = new Rect();
private Drawable mBackground;
- private Drawable mAboveAnchorBackgroundDrawable;
- private Drawable mBelowAnchorBackgroundDrawable;
private boolean mAboveAnchor;
@@ -167,43 +164,6 @@ public class PopupWindow {
mBackground = a.getDrawable(R.styleable.PopupWindow_popupBackground);
- // If this is a StateListDrawable, try to find and store the drawable to be
- // used when the drop-down is placed above its anchor view, and the one to be
- // used when the drop-down is placed below its anchor view. We extract
- // the drawables ourselves to work around a problem with using refreshDrawableState
- // that it will take into account the padding of all drawables specified in a
- // StateListDrawable, thus adding superfluous padding to drop-down views.
- //
- // We assume a StateListDrawable will have a drawable for ABOVE_ANCHOR_STATE_SET and
- // at least one other drawable, intended for the 'below-anchor state'.
- if (mBackground instanceof StateListDrawable) {
- StateListDrawable background = (StateListDrawable) mBackground;
-
- // Find the above-anchor view - this one's easy, it should be labeled as such.
- int aboveAnchorStateIndex = background.getStateDrawableIndex(ABOVE_ANCHOR_STATE_SET);
-
- // Now, for the below-anchor view, look for any other drawable specified in the
- // StateListDrawable which is not for the above-anchor state and use that.
- int count = background.getStateCount();
- int belowAnchorStateIndex = -1;
- for (int i = 0; i < count; i++) {
- if (i != aboveAnchorStateIndex) {
- belowAnchorStateIndex = i;
- break;
- }
- }
-
- // Store the drawables we found, if we found them. Otherwise, set them both
- // to null so that we'll just use refreshDrawableState.
- if (aboveAnchorStateIndex != -1 && belowAnchorStateIndex != -1) {
- mAboveAnchorBackgroundDrawable = background.getStateDrawable(aboveAnchorStateIndex);
- mBelowAnchorBackgroundDrawable = background.getStateDrawable(belowAnchorStateIndex);
- } else {
- mBelowAnchorBackgroundDrawable = null;
- mAboveAnchorBackgroundDrawable = null;
- }
- }
-
a.recycle();
}
@@ -701,18 +661,7 @@ public class PopupWindow {
mAboveAnchor = findDropDownPosition(anchor, p, xoff, yoff);
if (mBackground != null) {
- // If the background drawable provided was a StateListDrawable with above-anchor
- // and below-anchor states, use those. Otherwise rely on refreshDrawableState to
- // do the job.
- if (mAboveAnchorBackgroundDrawable != null) {
- if (mAboveAnchor) {
- mPopupView.setBackgroundDrawable(mAboveAnchorBackgroundDrawable);
- } else {
- mPopupView.setBackgroundDrawable(mBelowAnchorBackgroundDrawable);
- }
- } else {
- mPopupView.refreshDrawableState();
- }
+ mPopupView.refreshDrawableState();
}
if (mHeightMode < 0) p.height = mLastHeight = mHeightMode;
@@ -748,18 +697,12 @@ public class PopupWindow {
*/
private void preparePopup(WindowManager.LayoutParams p) {
if (mBackground != null) {
- final ViewGroup.LayoutParams layoutParams = mContentView.getLayoutParams();
- int height = ViewGroup.LayoutParams.FILL_PARENT;
- if (layoutParams != null &&
- layoutParams.height == ViewGroup.LayoutParams.WRAP_CONTENT) {
- height = ViewGroup.LayoutParams.WRAP_CONTENT;
- }
-
// when a background is available, we embed the content view
// within another view that owns the background drawable
PopupViewContainer popupViewContainer = new PopupViewContainer(mContext);
PopupViewContainer.LayoutParams listParams = new PopupViewContainer.LayoutParams(
- ViewGroup.LayoutParams.FILL_PARENT, height
+ ViewGroup.LayoutParams.FILL_PARENT,
+ ViewGroup.LayoutParams.FILL_PARENT
);
popupViewContainer.setBackgroundDrawable(mBackground);
popupViewContainer.addView(mContentView, listParams);
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index f646ab5..dd2570a 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -526,7 +526,6 @@ public class ProgressBar extends View {
* @see #getProgress()
* @see #incrementProgressBy(int)
*/
- @android.view.RemotableViewMethod
public synchronized void setProgress(int progress) {
setProgress(progress, false);
}
diff --git a/core/java/android/widget/ResourceCursorAdapter.java b/core/java/android/widget/ResourceCursorAdapter.java
index a5dbd98..9052ae3 100644
--- a/core/java/android/widget/ResourceCursorAdapter.java
+++ b/core/java/android/widget/ResourceCursorAdapter.java
@@ -46,30 +46,10 @@ public abstract class ResourceCursorAdapter extends CursorAdapter {
public ResourceCursorAdapter(Context context, int layout, Cursor c) {
super(context, c);
mLayout = mDropDownLayout = layout;
- mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
/**
- * Constructor.
- *
- * @param context The context where the ListView associated with this
- * SimpleListItemFactory is running
- * @param layout resource identifier of a layout file that defines the views
- * for this list item. Unless you override them later, this will
- * define both the item views and the drop down views.
- * @param c The cursor from which to get the data.
- * @param autoRequery If true the adapter will call requery() on the
- * cursor whenever it changes so the most recent
- * data is always displayed.
- * @hide Pending API Council approval
- */
- public ResourceCursorAdapter(Context context, int layout, Cursor c, boolean autoRequery) {
- super(context, c, autoRequery);
- mLayout = mDropDownLayout = layout;
- mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- }
-
- /**
* Inflates view(s) from the specified XML file.
*
* @see android.widget.CursorAdapter#newView(android.content.Context,
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 88b2a01..c852be5 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -84,7 +84,6 @@ import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewDebug;
-import android.view.ViewRoot;
import android.view.ViewTreeObserver;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AnimationUtils;
@@ -216,7 +215,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
int mDrawableSizeTop, mDrawableSizeBottom, mDrawableSizeLeft, mDrawableSizeRight;
int mDrawableWidthTop, mDrawableWidthBottom, mDrawableHeightLeft, mDrawableHeightRight;
int mDrawablePadding;
- }
+ };
private Drawables mDrawables;
private CharSequence mError;
@@ -240,13 +239,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
private int mMarqueeRepeatLimit = 3;
class InputContentType {
- int imeOptions = EditorInfo.IME_UNDEFINED;
- String privateImeOptions;
- CharSequence imeActionLabel;
- int imeActionId;
+ String privateContentType;
Bundle extras;
- OnEditorActionListener onEditorActionListener;
- boolean enterDown;
}
InputContentType mInputContentType;
@@ -274,26 +268,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
p.measureText("H");
}
- /**
- * Interface definition for a callback to be invoked when an action is
- * performed on the editor.
- */
- public interface OnEditorActionListener {
- /**
- * Called when an action is being performed.
- *
- * @param v The view that was clicked.
- * @param actionId Identifier of the action. This will be either the
- * identifier you supplied, or {@link EditorInfo#IME_UNDEFINED
- * EditorInfo.IME_UNDEFINED} if being called due to the enter key
- * being pressed.
- * @param event If triggered by an enter key, this is the event;
- * otherwise, this is null.
- * @return Return true if you have consumed the action, else false.
- */
- boolean onEditorAction(TextView v, int actionId, KeyEvent event);
- }
-
public TextView(Context context) {
this(context, null);
}
@@ -402,7 +376,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
int shadowcolor = 0;
float dx = 0, dy = 0, r = 0;
boolean password = false;
- int inputType = EditorInfo.TYPE_NULL;
+ int contentType = EditorInfo.TYPE_NULL;
int n = a.getIndexCount();
for (int i = 0; i < n; i++) {
@@ -636,34 +610,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
break;
case com.android.internal.R.styleable.TextView_inputType:
- inputType = a.getInt(attr, mInputType);
+ contentType = a.getInt(attr, mInputType);
break;
- case com.android.internal.R.styleable.TextView_imeOptions:
- if (mInputContentType == null) {
- mInputContentType = new InputContentType();
- }
- mInputContentType.imeOptions = a.getInt(attr,
- mInputContentType.imeOptions);
- break;
-
- case com.android.internal.R.styleable.TextView_imeActionLabel:
- if (mInputContentType == null) {
- mInputContentType = new InputContentType();
- }
- mInputContentType.imeActionLabel = a.getText(attr);
- break;
-
- case com.android.internal.R.styleable.TextView_imeActionId:
- if (mInputContentType == null) {
- mInputContentType = new InputContentType();
- }
- mInputContentType.imeActionId = a.getInt(attr,
- mInputContentType.imeActionId);
- break;
-
- case com.android.internal.R.styleable.TextView_privateImeOptions:
- setPrivateImeOptions(a.getString(attr));
+ case com.android.internal.R.styleable.TextView_editorPrivateContentType:
+ setPrivateContentType(a.getString(attr));
break;
case com.android.internal.R.styleable.TextView_editorExtras:
@@ -681,7 +632,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
BufferType bufferType = BufferType.EDITABLE;
- if ((inputType&(EditorInfo.TYPE_MASK_CLASS
+ if ((contentType&(EditorInfo.TYPE_MASK_CLASS
|EditorInfo.TYPE_MASK_VARIATION))
== (EditorInfo.TYPE_CLASS_TEXT
|EditorInfo.TYPE_TEXT_VARIATION_PASSWORD)) {
@@ -705,57 +656,57 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
throw new RuntimeException(ex);
}
try {
- mInputType = inputType != EditorInfo.TYPE_NULL
- ? inputType
+ mInputType = contentType != EditorInfo.TYPE_NULL
+ ? contentType
: mInput.getInputType();
} catch (IncompatibleClassChangeError e) {
mInputType = EditorInfo.TYPE_CLASS_TEXT;
}
} else if (digits != null) {
mInput = DigitsKeyListener.getInstance(digits.toString());
- mInputType = inputType;
- } else if (inputType != EditorInfo.TYPE_NULL) {
- setInputType(inputType, true);
- singleLine = (inputType&(EditorInfo.TYPE_MASK_CLASS
+ mInputType = contentType;
+ } else if (contentType != EditorInfo.TYPE_NULL) {
+ setInputType(contentType, true);
+ singleLine = (contentType&(EditorInfo.TYPE_MASK_CLASS
| EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE)) !=
(EditorInfo.TYPE_CLASS_TEXT
| EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE);
} else if (phone) {
mInput = DialerKeyListener.getInstance();
- inputType = EditorInfo.TYPE_CLASS_PHONE;
+ contentType = EditorInfo.TYPE_CLASS_PHONE;
} else if (numeric != 0) {
mInput = DigitsKeyListener.getInstance((numeric & SIGNED) != 0,
(numeric & DECIMAL) != 0);
- inputType = EditorInfo.TYPE_CLASS_NUMBER;
+ contentType = EditorInfo.TYPE_CLASS_NUMBER;
if ((numeric & SIGNED) != 0) {
- inputType |= EditorInfo.TYPE_NUMBER_FLAG_SIGNED;
+ contentType |= EditorInfo.TYPE_NUMBER_FLAG_SIGNED;
}
if ((numeric & DECIMAL) != 0) {
- inputType |= EditorInfo.TYPE_NUMBER_FLAG_DECIMAL;
+ contentType |= EditorInfo.TYPE_NUMBER_FLAG_DECIMAL;
}
- mInputType = inputType;
+ mInputType = contentType;
} else if (autotext || autocap != -1) {
TextKeyListener.Capitalize cap;
- inputType = EditorInfo.TYPE_CLASS_TEXT;
+ contentType = EditorInfo.TYPE_CLASS_TEXT;
if (!singleLine) {
- inputType |= EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE;
+ contentType |= EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE;
}
switch (autocap) {
case 1:
cap = TextKeyListener.Capitalize.SENTENCES;
- inputType |= EditorInfo.TYPE_TEXT_FLAG_CAP_SENTENCES;
+ contentType |= EditorInfo.TYPE_TEXT_FLAG_CAP_SENTENCES;
break;
case 2:
cap = TextKeyListener.Capitalize.WORDS;
- inputType |= EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS;
+ contentType |= EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS;
break;
case 3:
cap = TextKeyListener.Capitalize.CHARACTERS;
- inputType |= EditorInfo.TYPE_TEXT_FLAG_CAP_CHARACTERS;
+ contentType |= EditorInfo.TYPE_TEXT_FLAG_CAP_CHARACTERS;
break;
default:
@@ -764,7 +715,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
mInput = TextKeyListener.getInstance(autotext, cap);
- mInputType = inputType;
+ mInputType = contentType;
} else if (editable) {
mInput = TextKeyListener.getInstance();
mInputType = EditorInfo.TYPE_CLASS_TEXT;
@@ -1124,11 +1075,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
* @attr ref android.R.styleable#TextView_singleLine
*/
public final void setTransformationMethod(TransformationMethod method) {
- if (method == mTransformation) {
- // Avoid the setText() below if the transformation is
- // the same.
- return;
- }
if (mTransformation != null) {
if (mText instanceof Spannable) {
((Spannable) mText).removeSpan(mTransformation);
@@ -2832,7 +2778,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
/**
* Directly change the content type integer of the text view, without
* modifying any other state.
- * @see #setInputType(int)
+ * @see #setContentType
* @see android.text.InputType
* @attr ref android.R.styleable#TextView_inputType
*/
@@ -2896,159 +2842,28 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
/**
- * Change the editor type integer associated with the text view, which
- * will be reported to an IME with {@link EditorInfo#imeOptions} when it
- * has focus.
- * @see #getImeOptions
- * @see android.view.inputmethod.EditorInfo
- * @attr ref android.R.styleable#TextView_imeOptions
- */
- public void setImeOptions(int imeOptions) {
- if (mInputContentType == null) {
- mInputContentType = new InputContentType();
- }
- mInputContentType.imeOptions = imeOptions;
- }
-
- /**
- * Get the type of the IME editor.
- *
- * @see #setImeOptions(int)
- * @see android.view.inputmethod.EditorInfo
- */
- public int getImeOptions() {
- return mInputContentType != null
- ? mInputContentType.imeOptions : EditorInfo.IME_UNDEFINED;
- }
-
- /**
- * Change the custom IME action associated with the text view, which
- * will be reported to an IME with {@link EditorInfo#actionLabel}
- * and {@link EditorInfo#actionId} when it has focus.
- * @see #getImeActionLabel
- * @see #getImeActionId
- * @see android.view.inputmethod.EditorInfo
- * @attr ref android.R.styleable#TextView_imeActionLabel
- * @attr ref android.R.styleable#TextView_imeActionId
- */
- public void setImeActionLabel(CharSequence label, int actionId) {
- if (mInputContentType == null) {
- mInputContentType = new InputContentType();
- }
- mInputContentType.imeActionLabel = label;
- mInputContentType.imeActionId = actionId;
- }
-
- /**
- * Get the IME action label previous set with {@link #setImeActionLabel}.
- *
- * @see #setImeActionLabel
- * @see android.view.inputmethod.EditorInfo
- */
- public CharSequence getImeActionLabel() {
- return mInputContentType != null
- ? mInputContentType.imeActionLabel : null;
- }
-
- /**
- * Get the IME action ID previous set with {@link #setImeActionLabel}.
- *
- * @see #setImeActionLabel
- * @see android.view.inputmethod.EditorInfo
- */
- public int getImeActionId() {
- return mInputContentType != null
- ? mInputContentType.imeActionId : 0;
- }
-
- /**
- * Set a special OnClickListener to be called when an action is performed
- * on the text view. This will be called when the enter key is pressed,
- * or when an action supplied to the IME is selected by the user.
- */
- public void setOnEditorActionListener(OnEditorActionListener l) {
- if (mInputContentType == null) {
- mInputContentType = new InputContentType();
- }
- mInputContentType.onEditorActionListener = l;
- }
-
- /**
- * Called when an attached input method calls
- * {@link InputConnection#performEditorAction(int)
- * InputConnection.performEditorAction()}
- * for this text view. The default implementation will call your click
- * listener supplied to {@link #setOnEditorActionListener},
- * or generate an enter key down/up pair to invoke the action if not.
- *
- * @param actionCode The code of the action being performed.
- *
- * @see #setOnEditorActionListener
- */
- public void onEditorAction(int actionCode) {
- final InputContentType ict = mInputContentType;
- if (ict != null) {
- if (ict.onEditorActionListener != null) {
- if (ict.onEditorActionListener.onEditorAction(this,
- actionCode, null)) {
- return;
- }
- }
- }
-
- if (actionCode == EditorInfo.IME_ACTION_NEXT &&
- (ict != null || !shouldAdvanceFocusOnEnter())) {
- // This is the default handling for the NEXT action, to advance
- // focus. Note that for backwards compatibility we don't do this
- // default handling if explicit ime options have not been given,
- // and we do not advance by default on an enter key -- in that
- // case, we want to turn this into the normal enter key codes that
- // an app may be expecting.
- View v = focusSearch(FOCUS_DOWN);
- if (v != null) {
- if (!v.requestFocus(FOCUS_DOWN)) {
- throw new IllegalStateException("focus search returned a view " +
- "that wasn't able to take focus!");
- }
- }
- return;
- }
-
- Handler h = getHandler();
- long eventTime = SystemClock.uptimeMillis();
- h.sendMessage(h.obtainMessage(ViewRoot.DISPATCH_KEY_FROM_IME,
- new KeyEvent(eventTime, eventTime,
- KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER, 0, 0, 0, 0,
- KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE)));
- h.sendMessage(h.obtainMessage(ViewRoot.DISPATCH_KEY_FROM_IME,
- new KeyEvent(SystemClock.uptimeMillis(), eventTime,
- KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER, 0, 0, 0, 0,
- KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE)));
- }
-
- /**
* Set the private content type of the text, which is the
- * {@link EditorInfo#privateImeOptions EditorInfo.privateImeOptions}
+ * {@link EditorInfo#privateContentType TextBoxAttribute.privateContentType}
* field that will be filled in when creating an input connection.
*
- * @see #getPrivateImeOptions()
- * @see EditorInfo#privateImeOptions
- * @attr ref android.R.styleable#TextView_privateImeOptions
+ * @see #getPrivateContentType()
+ * @see EditorInfo#privateContentType
+ * @attr ref android.R.styleable#TextView_editorPrivateContentType
*/
- public void setPrivateImeOptions(String type) {
+ public void setPrivateContentType(String type) {
if (mInputContentType == null) mInputContentType = new InputContentType();
- mInputContentType.privateImeOptions = type;
+ mInputContentType.privateContentType = type;
}
/**
* Get the private type of the content.
*
- * @see #setPrivateImeOptions(String)
- * @see EditorInfo#privateImeOptions
+ * @see #setPrivateContentType(String)
+ * @see EditorInfo#privateContentType
*/
- public String getPrivateImeOptions() {
+ public String getPrivateContentType() {
return mInputContentType != null
- ? mInputContentType.privateImeOptions : null;
+ ? mInputContentType.privateContentType : null;
}
/**
@@ -3992,7 +3807,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
* but also in mail addresses and subjects which will display on multiple
* lines but where it doesn't make sense to insert newlines.
*/
- protected boolean shouldAdvanceFocusOnEnter() {
+ private boolean advanceFocusOnEnter() {
if (mInput == null) {
return false;
}
@@ -4013,37 +3828,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
return false;
}
- private boolean isInterestingEnter(KeyEvent event) {
- if ((event.getFlags() & KeyEvent.FLAG_SOFT_KEYBOARD) != 0 &&
- mInputContentType != null &&
- (mInputContentType.imeOptions &
- EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0) {
- // If this enter key came from a soft keyboard, and the
- // text editor has been configured to not do a default
- // action for software enter keys, then we aren't interested.
- return false;
- }
- return true;
- }
-
private int doKeyDown(int keyCode, KeyEvent event, KeyEvent otherEvent) {
if (!isEnabled()) {
return 0;
}
switch (keyCode) {
- case KeyEvent.KEYCODE_ENTER:
- if (!isInterestingEnter(event)) {
- // Ignore enter key we aren't interested in.
- return -1;
- }
- if (mInputContentType != null
- && mInputContentType.onEditorActionListener != null) {
- mInputContentType.enterDown = true;
- }
- // fall through...
case KeyEvent.KEYCODE_DPAD_CENTER:
- if (shouldAdvanceFocusOnEnter()) {
+ case KeyEvent.KEYCODE_ENTER:
+ if (advanceFocusOnEnter()) {
return 0;
}
}
@@ -4146,17 +3939,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
return super.onKeyUp(keyCode, event);
case KeyEvent.KEYCODE_ENTER:
- if (mInputContentType != null
- && mInputContentType.onEditorActionListener != null
- && mInputContentType.enterDown) {
- mInputContentType.enterDown = false;
- if (mInputContentType.onEditorActionListener.onEditorAction(
- this, EditorInfo.IME_UNDEFINED, event)) {
- return true;
- }
- }
-
- if (shouldAdvanceFocusOnEnter()) {
+ if (advanceFocusOnEnter()) {
/*
* If there is a click listener, just call through to
* super, which will invoke it.
@@ -4211,26 +3994,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
mInputMethodState = new InputMethodState();
}
outAttrs.inputType = mInputType;
+ outAttrs.hintText = mHint;
if (mInputContentType != null) {
- outAttrs.imeOptions = mInputContentType.imeOptions;
- outAttrs.privateImeOptions = mInputContentType.privateImeOptions;
- outAttrs.actionLabel = mInputContentType.imeActionLabel;
- outAttrs.actionId = mInputContentType.imeActionId;
+ outAttrs.privateContentType = mInputContentType.privateContentType;
outAttrs.extras = mInputContentType.extras;
- } else {
- outAttrs.imeOptions = EditorInfo.IME_UNDEFINED;
- }
- if (outAttrs.imeOptions == EditorInfo.IME_UNDEFINED) {
- if (focusSearch(FOCUS_DOWN) != null) {
- // An action has not been set, but the enter key will move to
- // the next focus, so set the action to that.
- outAttrs.imeOptions = EditorInfo.IME_ACTION_NEXT;
- if (!shouldAdvanceFocusOnEnter()) {
- outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_ENTER_ACTION;
- }
- }
}
- outAttrs.hintText = mHint;
if (mText instanceof Editable) {
InputConnection ic = new EditableInputConnection(this);
outAttrs.initialSelStart = Selection.getSelectionStart(mText);
@@ -6019,9 +5787,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
// Don't leave us in the middle of a batch edit.
onEndBatchEdit();
- if (mInputContentType != null) {
- mInputContentType.enterDown = false;
- }
}
startStopMarquee(hasWindowFocus);
@@ -6115,7 +5880,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
mScroller = s;
}
- private static class Blink extends Handler implements Runnable {
+ private static class Blink extends Handler
+ implements Runnable {
private WeakReference<TextView> mView;
private boolean mCancelled;
@@ -6373,44 +6139,23 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
int start = end;
+ char c;
int len = mText.length();
- for (; start > 0; start--) {
- char c = mTransformed.charAt(start - 1);
- int type = Character.getType(c);
-
- if (c != '\'' &&
- type != Character.UPPERCASE_LETTER &&
- type != Character.LOWERCASE_LETTER &&
- type != Character.TITLECASE_LETTER &&
- type != Character.MODIFIER_LETTER &&
- type != Character.DECIMAL_DIGIT_NUMBER) {
- break;
- }
+ while (start > 0 && (((c = mTransformed.charAt(start - 1)) == '\'') ||
+ (Character.isLetterOrDigit(c)))) {
+ start--;
}
- for (; end < len; end++) {
- char c = mTransformed.charAt(end);
- int type = Character.getType(c);
-
- if (c != '\'' &&
- type != Character.UPPERCASE_LETTER &&
- type != Character.LOWERCASE_LETTER &&
- type != Character.TITLECASE_LETTER &&
- type != Character.MODIFIER_LETTER &&
- type != Character.DECIMAL_DIGIT_NUMBER) {
- break;
- }
+ while (end < len && (((c = mTransformed.charAt(end)) == '\'') ||
+ (Character.isLetterOrDigit(c)))) {
+ end++;
}
if (start == end) {
return null;
}
- if (end - start > 48) {
- return null;
- }
-
return TextUtils.substring(mTransformed, start, end);
}
diff --git a/core/java/android/widget/ZoomButtonsController.java b/core/java/android/widget/ZoomButtonsController.java
deleted file mode 100644
index ec45e23..0000000
--- a/core/java/android/widget/ZoomButtonsController.java
+++ /dev/null
@@ -1,478 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.widget;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.graphics.PixelFormat;
-import android.graphics.Rect;
-import android.os.Handler;
-import android.os.Message;
-import android.provider.Settings;
-import android.view.Gravity;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.WindowManager;
-import android.view.View.OnClickListener;
-import android.view.WindowManager.LayoutParams;
-
-// TODO: make sure no px values exist, only dip (scale if necessary from Viewconfiguration)
-
-/**
- * TODO: Docs
- *
- * If you are using this with a custom View, please call
- * {@link #setVisible(boolean) setVisible(false)} from the
- * {@link View#onDetachedFromWindow}.
- *
- * @hide
- */
-public class ZoomButtonsController implements View.OnTouchListener {
-
- private static final String TAG = "ZoomButtonsController";
-
- private static final int ZOOM_CONTROLS_TIMEOUT =
- (int) ViewConfiguration.getZoomControlsTimeout();
-
- // TODO: scaled to density
- private static final int ZOOM_CONTROLS_TOUCH_PADDING = 20;
-
- private Context mContext;
- private WindowManager mWindowManager;
-
- /**
- * The view that is being zoomed by this zoom ring.
- */
- private View mOwnerView;
-
- /**
- * The bounds of the owner view in global coordinates. This is recalculated
- * each time the zoom ring is shown.
- */
- private Rect mOwnerViewBounds = new Rect();
-
- /**
- * The container that is added as a window.
- */
- private FrameLayout mContainer;
- private LayoutParams mContainerLayoutParams;
- private int[] mContainerLocation = new int[2];
-
- private ZoomControls mControls;
-
- /**
- * The view (or null) that should receive touch events. This will get set if
- * the touch down hits the container. It will be reset on the touch up.
- */
- private View mTouchTargetView;
- /**
- * The {@link #mTouchTargetView}'s location in window, set on touch down.
- */
- private int[] mTouchTargetLocationInWindow = new int[2];
- /**
- * If the zoom ring is dismissed but the user is still in a touch
- * interaction, we set this to true. This will ignore all touch events until
- * up/cancel, and then set the owner's touch listener to null.
- */
- private boolean mReleaseTouchListenerOnUp;
-
- private boolean mIsVisible;
-
- private Rect mTempRect = new Rect();
-
- private OnZoomListener mCallback;
-
- /**
- * When showing the zoom, we add the view as a new window. However, there is
- * logic that needs to know the size of the zoom which is determined after
- * it's laid out. Therefore, we must post this logic onto the UI thread so
- * it will be exceuted AFTER the layout. This is the logic.
- */
- private Runnable mPostedVisibleInitializer;
-
- private IntentFilter mConfigurationChangedFilter =
- new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED);
-
- private BroadcastReceiver mConfigurationChangedReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (!mIsVisible) return;
-
- mHandler.removeMessages(MSG_POST_CONFIGURATION_CHANGED);
- mHandler.sendEmptyMessage(MSG_POST_CONFIGURATION_CHANGED);
- }
- };
-
- /** When configuration changes, this is called after the UI thread is idle. */
- private static final int MSG_POST_CONFIGURATION_CHANGED = 2;
- /** Used to delay the zoom ring dismissal. */
- private static final int MSG_DISMISS_ZOOM_RING = 3;
- /**
- * If setVisible(true) is called and the owner view's window token is null,
- * we delay the setVisible(true) call until it is not null.
- */
- private static final int MSG_POST_SET_VISIBLE = 4;
-
- private Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_POST_CONFIGURATION_CHANGED:
- onPostConfigurationChanged();
- break;
-
- case MSG_DISMISS_ZOOM_RING:
- setVisible(false);
- break;
-
- case MSG_POST_SET_VISIBLE:
- if (mOwnerView.getWindowToken() == null) {
- // Doh, it is still null, throw an exception
- throw new IllegalArgumentException(
- "Cannot make the zoom ring visible if the owner view is " +
- "not attached to a window.");
- }
- setVisible(true);
- break;
- }
-
- }
- };
-
- public ZoomButtonsController(Context context, View ownerView) {
- mContext = context;
- mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
- mOwnerView = ownerView;
-
- mContainer = createContainer();
- }
-
- private FrameLayout createContainer() {
- LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
- lp.gravity = Gravity.BOTTOM | Gravity.CENTER;
- lp.flags = LayoutParams.FLAG_NOT_TOUCHABLE |
- LayoutParams.FLAG_LAYOUT_NO_LIMITS;
- lp.height = LayoutParams.WRAP_CONTENT;
- lp.width = LayoutParams.FILL_PARENT;
- lp.type = LayoutParams.TYPE_APPLICATION_PANEL;
- lp.format = PixelFormat.TRANSPARENT;
- // TODO: make a new animation for this
- lp.windowAnimations = com.android.internal.R.style.Animation_InputMethodFancy;
- mContainerLayoutParams = lp;
-
- FrameLayout container = new FrameLayout(mContext);
- container.setLayoutParams(lp);
- container.setMeasureAllChildren(true);
-
- LayoutInflater inflater = (LayoutInflater) mContext
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- inflater.inflate(com.android.internal.R.layout.zoom_magnify, container);
-
- mControls = (ZoomControls) container.findViewById(com.android.internal.R.id.zoomControls);
- mControls.setOnZoomInClickListener(new OnClickListener() {
- public void onClick(View v) {
- dismissControlsDelayed(ZOOM_CONTROLS_TIMEOUT);
- if (mCallback != null) mCallback.onZoom(true);
- }
- });
- mControls.setOnZoomOutClickListener(new OnClickListener() {
- public void onClick(View v) {
- dismissControlsDelayed(ZOOM_CONTROLS_TIMEOUT);
- if (mCallback != null) mCallback.onZoom(false);
- }
- });
-
- View overview = container.findViewById(com.android.internal.R.id.zoomMagnify);
- overview.setVisibility(View.GONE);
- overview.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- dismissControlsDelayed(ZOOM_CONTROLS_TIMEOUT);
- if (mCallback != null) mCallback.onOverview();
- }
- });
-
- return container;
- }
-
- public void setCallback(OnZoomListener callback) {
- mCallback = callback;
- }
-
- public void setFocusable(boolean focusable) {
- if (focusable) {
- mContainerLayoutParams.flags &= ~LayoutParams.FLAG_NOT_FOCUSABLE;
- } else {
- mContainerLayoutParams.flags |= LayoutParams.FLAG_NOT_FOCUSABLE;
- }
-
- if (mIsVisible) {
- mWindowManager.updateViewLayout(mContainer, mContainerLayoutParams);
- }
- }
-
- public void setOverviewVisible(boolean visible) {
- mContainer.findViewById(com.android.internal.R.id.zoomMagnify)
- .setVisibility(visible ? View.VISIBLE : View.GONE);
- }
-
- public boolean isVisible() {
- return mIsVisible;
- }
-
- public void setVisible(boolean visible) {
-
- if (!useThisZoom(mContext)) return;
-
- if (visible) {
- if (mOwnerView.getWindowToken() == null) {
- /*
- * We need a window token to show ourselves, maybe the owner's
- * window hasn't been created yet but it will have been by the
- * time the looper is idle, so post the setVisible(true) call.
- */
- if (!mHandler.hasMessages(MSG_POST_SET_VISIBLE)) {
- mHandler.sendEmptyMessage(MSG_POST_SET_VISIBLE);
- }
- return;
- }
-
- dismissControlsDelayed(ZOOM_CONTROLS_TIMEOUT);
- }
-
- if (mIsVisible == visible) {
- return;
- }
- mIsVisible = visible;
-
- if (visible) {
- if (mContainerLayoutParams.token == null) {
- mContainerLayoutParams.token = mOwnerView.getWindowToken();
- }
-
- mWindowManager.addView(mContainer, mContainerLayoutParams);
-
- if (mPostedVisibleInitializer == null) {
- mPostedVisibleInitializer = new Runnable() {
- public void run() {
- refreshPositioningVariables();
-
- if (mCallback != null) {
- mCallback.onVisibilityChanged(true);
- }
- }
- };
- }
-
- mHandler.post(mPostedVisibleInitializer);
-
- // Handle configuration changes when visible
- mContext.registerReceiver(mConfigurationChangedReceiver, mConfigurationChangedFilter);
-
- // Steal touches events from the owner
- mOwnerView.setOnTouchListener(this);
- mReleaseTouchListenerOnUp = false;
-
- } else {
- // Don't want to steal any more touches
- if (mTouchTargetView != null) {
- // We are still stealing the touch events for this touch
- // sequence, so release the touch listener later
- mReleaseTouchListenerOnUp = true;
- } else {
- mOwnerView.setOnTouchListener(null);
- }
-
- // No longer care about configuration changes
- mContext.unregisterReceiver(mConfigurationChangedReceiver);
-
- mWindowManager.removeView(mContainer);
- mHandler.removeCallbacks(mPostedVisibleInitializer);
-
- if (mCallback != null) {
- mCallback.onVisibilityChanged(false);
- }
- }
-
- }
-
- /**
- * TODO: docs
- *
- * Notes:
- * - Please ensure you set your View to INVISIBLE not GONE when hiding it.
- *
- * @return TODO
- */
- public FrameLayout getContainer() {
- return mContainer;
- }
-
- public int getZoomRingId() {
- return mControls.getId();
- }
-
- private void dismissControlsDelayed(int delay) {
- mHandler.removeMessages(MSG_DISMISS_ZOOM_RING);
- mHandler.sendEmptyMessageDelayed(MSG_DISMISS_ZOOM_RING, delay);
- }
-
- /**
- * Should be called by the client for each event belonging to the second tap
- * (the down, move, up, and cancel events).
- *
- * @param event The event belonging to the second tap.
- * @return Whether the event was consumed.
- */
- public boolean handleDoubleTapEvent(MotionEvent event) {
- if (!useThisZoom(mContext)) return false;
-
- int action = event.getAction();
-
- if (action == MotionEvent.ACTION_DOWN) {
- int x = (int) event.getX();
- int y = (int) event.getY();
-
- setVisible(true);
- centerPoint(x, y);
- }
-
- return true;
- }
-
- private void refreshPositioningVariables() {
- // Calculate the owner view's bounds
- mOwnerView.getGlobalVisibleRect(mOwnerViewBounds);
- mContainer.getLocationOnScreen(mContainerLocation);
- }
-
- /**
- * Centers the point (in owner view's coordinates).
- */
- private void centerPoint(int x, int y) {
- if (mCallback != null) {
- mCallback.onCenter(x, y);
- }
- }
-
- public boolean onTouch(View v, MotionEvent event) {
- int action = event.getAction();
-
- if (mReleaseTouchListenerOnUp) {
- // The ring was dismissed but we need to throw away all events until the up
- if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
- mOwnerView.setOnTouchListener(null);
- setTouchTargetView(null);
- mReleaseTouchListenerOnUp = false;
- }
-
- // Eat this event
- return true;
- }
-
- // TODO: optimize this (it ends up removing message and queuing another)
- dismissControlsDelayed(ZOOM_CONTROLS_TIMEOUT);
-
- View targetView = mTouchTargetView;
-
- switch (action) {
- case MotionEvent.ACTION_DOWN:
- targetView = getViewForTouch((int) event.getRawX(), (int) event.getRawY());
- setTouchTargetView(targetView);
- break;
-
- case MotionEvent.ACTION_UP:
- case MotionEvent.ACTION_CANCEL:
- setTouchTargetView(null);
- break;
- }
-
- if (targetView != null) {
- // The upperleft corner of the target view in raw coordinates
- int targetViewRawX = mContainerLocation[0] + mTouchTargetLocationInWindow[0];
- int targetViewRawY = mContainerLocation[1] + mTouchTargetLocationInWindow[1];
-
- MotionEvent containerEvent = MotionEvent.obtain(event);
- // Convert the motion event into the target view's coordinates (from
- // owner view's coordinates)
- containerEvent.offsetLocation(mOwnerViewBounds.left - targetViewRawX,
- mOwnerViewBounds.top - targetViewRawY);
- boolean retValue = targetView.dispatchTouchEvent(containerEvent);
- containerEvent.recycle();
- return retValue;
-
- } else {
- return false;
- }
- }
-
- private void setTouchTargetView(View view) {
- mTouchTargetView = view;
- if (view != null) {
- view.getLocationInWindow(mTouchTargetLocationInWindow);
- }
- }
-
- /**
- * Returns the View that should receive a touch at the given coordinates.
- *
- * @param rawX The raw X.
- * @param rawY The raw Y.
- * @return The view that should receive the touches, or null if there is not one.
- */
- private View getViewForTouch(int rawX, int rawY) {
- // Reverse order so the child drawn on top gets first dibs.
- int containerCoordsX = rawX - mContainerLocation[0];
- int containerCoordsY = rawY - mContainerLocation[1];
- Rect frame = mTempRect;
- for (int i = mContainer.getChildCount() - 1; i >= 0; i--) {
- View child = mContainer.getChildAt(i);
- if (child.getVisibility() != View.VISIBLE) {
- continue;
- }
-
- child.getHitRect(frame);
- // Expand the touch region
- frame.top -= ZOOM_CONTROLS_TOUCH_PADDING;
- if (frame.contains(containerCoordsX, containerCoordsY)) {
- return child;
- }
- }
-
- return null;
- }
-
- private void onPostConfigurationChanged() {
- dismissControlsDelayed(ZOOM_CONTROLS_TIMEOUT);
- refreshPositioningVariables();
- }
-
- public static boolean useThisZoom(Context context) {
- return ZoomRingController.getZoomType(context) == 2;
- }
-
- public interface OnZoomListener {
- void onCenter(int x, int y);
- void onVisibilityChanged(boolean visible);
- void onZoom(boolean zoomIn);
- void onOverview();
- }
-}
diff --git a/core/java/android/widget/ZoomRing.java b/core/java/android/widget/ZoomRing.java
index a5a867b..a29e1a0 100644
--- a/core/java/android/widget/ZoomRing.java
+++ b/core/java/android/widget/ZoomRing.java
@@ -77,7 +77,7 @@ public class ZoomRing extends View {
private int mPreviousWidgetDragX;
private int mPreviousWidgetDragY;
- private boolean mThumbVisible = true;
+ private boolean mDrawThumb = true;
private Drawable mThumbDrawable;
/** Shown beneath the thumb if we can still zoom in. */
@@ -91,13 +91,6 @@ public class ZoomRing extends View {
private static final int THUMB_ARROWS_FADE_DURATION = 300;
private long mThumbArrowsFadeStartTime;
private int mThumbArrowsAlpha = 255;
-
- private static final int THUMB_PLUS_MINUS_DISTANCE = 69;
- private static final int THUMB_PLUS_MINUS_OFFSET_ANGLE = TWO_PI_INT_MULTIPLIED / 11;
- /** Drawn (without rotation) on top of the arrow. */
- private Drawable mThumbPlusDrawable;
- /** Drawn (without rotation) on top of the arrow. */
- private Drawable mThumbMinusDrawable;
private static final int MODE_IDLE = 0;
@@ -106,7 +99,7 @@ public class ZoomRing extends View {
* are waiting for him to move the slop amount before considering him in the
* drag thumb state.
*/
- private static final int MODE_WAITING_FOR_DRAG_THUMB_AFTER_JUMP = 5;
+ private static final int MODE_WAITING_FOR_DRAG_THUMB = 5;
private static final int MODE_DRAG_THUMB = 1;
/**
* User has his finger down, but we are waiting for him to pass the touch
@@ -116,14 +109,11 @@ public class ZoomRing extends View {
private static final int MODE_WAITING_FOR_MOVE_ZOOM_RING = 4;
private static final int MODE_MOVE_ZOOM_RING = 2;
private static final int MODE_TAP_DRAG = 3;
- /** Ignore the touch interaction until the user touches the thumb again. */
- private static final int MODE_IGNORE_UNTIL_TOUCHES_THUMB = 6;
+ /** Ignore the touch interaction. Reset to MODE_IDLE after up/cancel. */
+ private static final int MODE_IGNORE_UNTIL_UP = 6;
private int mMode;
-
- /** Records the last mode the user was in. */
- private int mPreviousMode;
-
- private long mPreviousCenterUpTime;
+
+ private long mPreviousUpTime;
private int mPreviousDownX;
private int mPreviousDownY;
@@ -132,9 +122,7 @@ public class ZoomRing extends View {
private OnZoomRingCallback mCallback;
private int mPreviousCallbackAngle;
private int mCallbackThreshold = Integer.MAX_VALUE;
- /** If the user drags to within __% of a tick, snap to that tick. */
- private int mFuzzyCallbackThreshold = Integer.MAX_VALUE;
-
+
private boolean mResetThumbAutomatically = true;
private int mThumbDragStartAngle;
@@ -145,8 +133,6 @@ public class ZoomRing extends View {
private Scroller mThumbScroller;
- private boolean mVibration = true;
-
private static final int MSG_THUMB_SCROLLER_TICK = 1;
private static final int MSG_THUMB_ARROWS_FADE_TICK = 2;
private Handler mHandler = new Handler() {
@@ -177,8 +163,6 @@ public class ZoomRing extends View {
mutate();
mThumbMinusArrowDrawable = res.getDrawable(R.drawable.zoom_ring_thumb_minus_arrow_rotatable).
mutate();
- mThumbPlusDrawable = res.getDrawable(R.drawable.zoom_ring_thumb_plus);
- mThumbMinusDrawable = res.getDrawable(R.drawable.zoom_ring_thumb_minus);
if (DRAW_TRAIL) {
mTrail = res.getDrawable(R.drawable.zoom_ring_trail).mutate();
}
@@ -191,7 +175,7 @@ public class ZoomRing extends View {
mThumbHalfHeight = mThumbDrawable.getIntrinsicHeight() / 2;
mThumbHalfWidth = mThumbDrawable.getIntrinsicWidth() / 2;
- setCallbackThreshold(PI_INT_MULTIPLIED / 6);
+ mCallbackThreshold = PI_INT_MULTIPLIED / 6;
}
public ZoomRing(Context context, AttributeSet attrs) {
@@ -209,20 +193,8 @@ public class ZoomRing extends View {
// TODO: rename
public void setCallbackThreshold(int callbackThreshold) {
mCallbackThreshold = callbackThreshold;
- mFuzzyCallbackThreshold = (int) (callbackThreshold * 0.65f);
}
- public void setVibration(boolean vibrate) {
- mVibration = vibrate;
- }
-
- public void setThumbVisible(boolean thumbVisible) {
- if (mThumbVisible != thumbVisible) {
- mThumbVisible = thumbVisible;
- invalidate();
- }
- }
-
// TODO: from XML too
public void setRingBounds(int innerRadius, int outerRadius) {
mBoundInnerRadiusSquared = innerRadius * innerRadius;
@@ -334,7 +306,15 @@ public class ZoomRing extends View {
public void setThumbAngleAnimated(int angle, int duration) {
// The angle when going from the current angle to the new angle
int deltaAngle = getDelta(mThumbAngle, angle);
- setThumbAngleAnimated(angle, duration, deltaAngle > 0);
+ // Counter clockwise if the new angle is more the current angle
+ boolean counterClockwise = deltaAngle > 0;
+
+ if (deltaAngle > PI_INT_MULTIPLIED || deltaAngle < -PI_INT_MULTIPLIED) {
+ // It's quicker to go the other direction
+ counterClockwise = !counterClockwise;
+ }
+
+ setThumbAngleAnimated(angle, duration, counterClockwise);
}
public void setThumbAngleAnimated(int angle, int duration, boolean counterClockwise) {
@@ -374,10 +354,14 @@ public class ZoomRing extends View {
return mThumbScroller.getCurrX() % TWO_PI_INT_MULTIPLIED;
}
+ public void resetThumbAngle(int angle) {
+ mPreviousCallbackAngle = angle;
+ setThumbAngleInt(angle);
+ }
+
public void resetThumbAngle() {
if (mResetThumbAutomatically) {
- mPreviousCallbackAngle = 0;
- setThumbAngleInt(0);
+ resetThumbAngle(0);
}
}
@@ -410,119 +394,101 @@ public class ZoomRing extends View {
mTrail.setBounds(0, 0, right - left, bottom - top);
}
- // These drawables are the same size as the track
mThumbPlusArrowDrawable.setBounds(0, 0, right - left, bottom - top);
mThumbMinusArrowDrawable.setBounds(0, 0, right - left, bottom - top);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
-// Log.d(TAG, "History size: " + event.getHistorySize());
-
return handleTouch(event.getAction(), event.getEventTime(),
(int) event.getX(), (int) event.getY(), (int) event.getRawX(),
(int) event.getRawY());
}
- private void resetToIdle() {
- setMode(MODE_IDLE);
+ private void resetState() {
+ mMode = MODE_IDLE;
mPreviousWidgetDragX = mPreviousWidgetDragY = Integer.MIN_VALUE;
mAcculumalatedTrailAngle = 0.0;
}
public void setTapDragMode(boolean tapDragMode, int x, int y) {
- resetToIdle();
+ resetState();
+ mMode = tapDragMode ? MODE_TAP_DRAG : MODE_IDLE;
+
if (tapDragMode) {
- setMode(MODE_TAP_DRAG);
- mCallback.onUserInteractionStarted();
onThumbDragStarted(getAngle(x - mCenterX, y - mCenterY));
- } else {
- onTouchUp(SystemClock.elapsedRealtime(), true);
}
}
public boolean handleTouch(int action, long time, int x, int y, int rawX, int rawY) {
- // local{X,Y} will be where the center of the widget is (0,0)
- int localX = x - mCenterX;
- int localY = y - mCenterY;
-
- /*
- * If we are not drawing the thumb, there is no way for the user to be
- * touching the thumb. Also, if this is the case, assume they are not
- * touching the ring (so the user cannot absolute set the thumb, and
- * there will be a larger touch region for going into the move-ring
- * mode).
- */
- boolean isTouchingThumb = mThumbVisible;
- boolean isTouchingRing = mThumbVisible;
-
- int touchAngle = getAngle(localX, localY);
-// printAngle("touchAngle", touchAngle);
-// printAngle("mThumbAngle", mThumbAngle);
-// printAngle("mPreviousCallbackAngle", mPreviousCallbackAngle);
-// Log.d(TAG, "");
-
-
- int radiusSquared = localX * localX + localY * localY;
- if (radiusSquared < mBoundInnerRadiusSquared ||
- radiusSquared > mBoundOuterRadiusSquared) {
- // Out-of-bounds
- isTouchingThumb = false;
- isTouchingRing = false;
- }
-
- if (isTouchingThumb) {
- int deltaThumbAndTouch = getDelta(mThumbAngle, touchAngle);
- int absoluteDeltaThumbAndTouch = deltaThumbAndTouch >= 0 ?
- deltaThumbAndTouch : -deltaThumbAndTouch;
- if (absoluteDeltaThumbAndTouch > THUMB_GRAB_SLOP) {
- // Didn't grab close enough to the thumb
- isTouchingThumb = false;
- }
- }
-
switch (action) {
+
case MotionEvent.ACTION_DOWN:
- if (!isTouchingRing &&
- (time - mPreviousCenterUpTime <= DOUBLE_TAP_DISMISS_TIMEOUT)) {
- // Make sure the double-tap is in the center of the widget (and not on the ring)
+ if (time - mPreviousUpTime <= DOUBLE_TAP_DISMISS_TIMEOUT) {
mCallback.onZoomRingDismissed(true);
- onTouchUp(time, isTouchingRing);
+ onTouchUp(time);
// Dismissing, so halt here
return true;
}
- resetToIdle();
mCallback.onUserInteractionStarted();
mPreviousDownX = x;
mPreviousDownY = y;
+ resetState();
// Fall through to code below switch (since the down is used for
// jumping to the touched tick)
break;
case MotionEvent.ACTION_MOVE:
+ if (mMode == MODE_IGNORE_UNTIL_UP) return true;
+
// Fall through to code below switch
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
- onTouchUp(time, isTouchingRing);
+ onTouchUp(time);
return true;
default:
return false;
}
+ // local{X,Y} will be where the center of the widget is (0,0)
+ int localX = x - mCenterX;
+ int localY = y - mCenterY;
+ boolean isTouchingThumb = true;
+ boolean isInRingBounds = true;
+
+ int touchAngle = getAngle(localX, localY);
+ int radiusSquared = localX * localX + localY * localY;
+ if (radiusSquared < mBoundInnerRadiusSquared ||
+ radiusSquared > mBoundOuterRadiusSquared) {
+ // Out-of-bounds
+ isTouchingThumb = false;
+ isInRingBounds = false;
+ }
+
+ int deltaThumbAndTouch = getDelta(mThumbAngle, touchAngle);
+ int absoluteDeltaThumbAndTouch = deltaThumbAndTouch >= 0 ?
+ deltaThumbAndTouch : -deltaThumbAndTouch;
+ if (isTouchingThumb &&
+ absoluteDeltaThumbAndTouch > THUMB_GRAB_SLOP) {
+ // Didn't grab close enough to the thumb
+ isTouchingThumb = false;
+ }
+
if (mMode == MODE_IDLE) {
if (isTouchingThumb) {
// They grabbed the thumb
- setMode(MODE_DRAG_THUMB);
+ mMode = MODE_DRAG_THUMB;
onThumbDragStarted(touchAngle);
- } else if (isTouchingRing) {
+ } else if (isInRingBounds) {
// They tapped somewhere else on the ring
int tickAngle = getClosestTickAngle(touchAngle);
+
int deltaThumbAndTick = getDelta(mThumbAngle, tickAngle);
int boundAngle = getBoundIfExceeds(mThumbAngle, deltaThumbAndTick);
@@ -531,12 +497,12 @@ public class ZoomRing extends View {
if (deltaThumbAndTick > MAX_ABS_JUMP_DELTA_ANGLE ||
deltaThumbAndTick < -MAX_ABS_JUMP_DELTA_ANGLE) {
// Trying to jump too far, ignore this touch interaction
- setMode(MODE_IGNORE_UNTIL_TOUCHES_THUMB);
+ mMode = MODE_IGNORE_UNTIL_UP;
return true;
}
+ // Make sure we only let them jump within bounds
if (boundAngle != Integer.MIN_VALUE) {
- // Cap the user's jump to the bound
tickAngle = boundAngle;
}
} else {
@@ -549,59 +515,47 @@ public class ZoomRing extends View {
deltaThumbAndTick = getDelta(mThumbAngle, tickAngle, !oldDirectionIsCcw);
boundAngle = getBoundIfExceeds(mThumbAngle, deltaThumbAndTick);
if (boundAngle != Integer.MIN_VALUE) {
- // Cannot get to the tapped location because it is out-of-bounds
- setMode(MODE_IGNORE_UNTIL_TOUCHES_THUMB);
+ // Not allowed to be here, it is between two bounds
+ mMode = MODE_IGNORE_UNTIL_UP;
return true;
}
}
}
- setMode(MODE_WAITING_FOR_DRAG_THUMB_AFTER_JUMP);
+ mMode = MODE_WAITING_FOR_DRAG_THUMB;
mWaitingForDragThumbDownAngle = touchAngle;
boolean ccw = deltaThumbAndTick > 0;
setThumbAngleAnimated(tickAngle, 0, ccw);
- /*
- * Our thumb scrolling animation takes us from mThumbAngle to
- * tickAngle, so manifest that as the user dragging the thumb
- * there.
- */
+ // Our thumb scrolling animation takes us from mThumbAngle to tickAngle
onThumbDragStarted(mThumbAngle);
- // We know which direction we want to go
onThumbDragged(tickAngle, true, ccw);
} else {
- // They tapped somewhere else on the widget
- setMode(MODE_WAITING_FOR_MOVE_ZOOM_RING);
+ // They tapped somewhere else
+ mMode = MODE_WAITING_FOR_MOVE_ZOOM_RING;
mCallback.onZoomRingSetMovableHintVisible(true);
}
- } else if (mMode == MODE_WAITING_FOR_DRAG_THUMB_AFTER_JUMP) {
+ } else if (mMode == MODE_WAITING_FOR_DRAG_THUMB) {
int deltaDownAngle = getDelta(mWaitingForDragThumbDownAngle, touchAngle);
if ((deltaDownAngle < -THUMB_DRAG_SLOP || deltaDownAngle > THUMB_DRAG_SLOP) &&
isDeltaInBounds(mWaitingForDragThumbDownAngle, deltaDownAngle)) {
- setMode(MODE_DRAG_THUMB);
-
- // No need to call onThumbDragStarted, since that was done when they tapped-to-jump
+ mMode = MODE_DRAG_THUMB;
}
} else if (mMode == MODE_WAITING_FOR_MOVE_ZOOM_RING) {
if (Math.abs(x - mPreviousDownX) > mTouchSlop ||
Math.abs(y - mPreviousDownY) > mTouchSlop) {
/* Make sure the user has moved the slop amount before going into that mode. */
- setMode(MODE_MOVE_ZOOM_RING);
+ mMode = MODE_MOVE_ZOOM_RING;
mCallback.onZoomRingMovingStarted();
}
- } else if (mMode == MODE_IGNORE_UNTIL_TOUCHES_THUMB) {
- if (isTouchingThumb) {
- // The user is back on the thumb, let's go back to the previous mode
- setMode(mPreviousMode);
- }
}
// Purposefully not an "else if"
if (mMode == MODE_DRAG_THUMB || mMode == MODE_TAP_DRAG) {
- if (isTouchingRing) {
+ if (isInRingBounds) {
onThumbDragged(touchAngle, false, false);
}
} else if (mMode == MODE_MOVE_ZOOM_RING) {
@@ -611,39 +565,24 @@ public class ZoomRing extends View {
return true;
}
- private void onTouchUp(long time, boolean isTouchingRing) {
- int mode = mMode;
- if (mode == MODE_IGNORE_UNTIL_TOUCHES_THUMB) {
- // For cleaning up, pretend like the user was still in the previous mode
- mode = mPreviousMode;
- }
-
- if (mode == MODE_MOVE_ZOOM_RING || mode == MODE_WAITING_FOR_MOVE_ZOOM_RING) {
+ private void onTouchUp(long time) {
+ if (mMode == MODE_MOVE_ZOOM_RING || mMode == MODE_WAITING_FOR_MOVE_ZOOM_RING) {
mCallback.onZoomRingSetMovableHintVisible(false);
- if (mode == MODE_MOVE_ZOOM_RING) {
+ if (mMode == MODE_MOVE_ZOOM_RING) {
mCallback.onZoomRingMovingStopped();
}
- } else if (mode == MODE_DRAG_THUMB || mode == MODE_TAP_DRAG ||
- mode == MODE_WAITING_FOR_DRAG_THUMB_AFTER_JUMP) {
+ } else if (mMode == MODE_DRAG_THUMB || mMode == MODE_TAP_DRAG ||
+ mMode == MODE_WAITING_FOR_DRAG_THUMB) {
onThumbDragStopped();
- if (mode == MODE_DRAG_THUMB || mode == MODE_TAP_DRAG) {
+ if (mMode == MODE_DRAG_THUMB) {
// Animate back to a tick
setThumbAngleAnimated(mPreviousCallbackAngle, 0);
}
}
+
+ mPreviousUpTime = time;
mCallback.onUserInteractionStopped();
-
- if (!isTouchingRing) {
- mPreviousCenterUpTime = time;
- }
- }
-
- private void setMode(int mode) {
- if (mode != mMode) {
- mPreviousMode = mMode;
- mMode = mode;
- }
}
private boolean isDeltaInBounds(int startAngle, int deltaAngle) {
@@ -742,8 +681,9 @@ public class ZoomRing extends View {
int totalDeltaAngle;
totalDeltaAngle = getDelta(mPreviousCallbackAngle, touchAngle, useDirection, ccw);
- if (totalDeltaAngle >= mFuzzyCallbackThreshold
- || totalDeltaAngle <= -mFuzzyCallbackThreshold) {
+ int fuzzyCallbackThreshold = (int) (mCallbackThreshold * 0.65f);
+ if (totalDeltaAngle >= fuzzyCallbackThreshold
+ || totalDeltaAngle <= -fuzzyCallbackThreshold) {
if (!useDirection) {
// Set ccw to match the direction found by getDelta
@@ -797,7 +737,7 @@ public class ZoomRing extends View {
// We bounded the touch angle
totalDeltaAngle = getDelta(mPreviousCallbackAngle, touchAngle, useDirection, ccw);
animateThumbToNewAngle = true;
- setMode(MODE_IGNORE_UNTIL_TOUCHES_THUMB);
+ mMode = MODE_IGNORE_UNTIL_UP;
}
@@ -824,13 +764,11 @@ public class ZoomRing extends View {
boolean canStillZoom = mCallback.onZoomRingThumbDragged(
deltaLevels, mThumbDragStartAngle, touchAngle);
- if (mVibration) {
- // TODO: we're trying the haptics to see how it goes with
- // users, so we're ignoring the settings (for now)
- performHapticFeedback(HapticFeedbackConstants.ZOOM_RING_TICK,
- HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING |
- HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
- }
+ // TODO: we're trying the haptics to see how it goes with
+ // users, so we're ignoring the settings (for now)
+ performHapticFeedback(HapticFeedbackConstants.ZOOM_RING_TICK,
+ HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING |
+ HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
// Set the callback angle to the actual angle based on how many delta levels we gave
mPreviousCallbackAngle = getValidAngle(
@@ -853,134 +791,6 @@ public class ZoomRing extends View {
setThumbAngleAuto(touchAngle, useDirection, ccw);
}
}
-// private void onThumbDragged(int touchAngle, boolean useDirection, boolean ccw) {
-// int deltaPrevCbAndTouch = getDelta(mPreviousCallbackAngle, touchAngle, useDirection, ccw);
-//
-// if (!useDirection) {
-// // Set ccw to match the direction found by getDelta
-// ccw = deltaPrevCbAndTouch > 0;
-// useDirection = true;
-// }
-//
-// boolean animateThumbToNewAngle = false;
-// boolean animationCcw = ccw;
-//
-// if (deltaPrevCbAndTouch >= mFuzzyCallbackThreshold
-// || deltaPrevCbAndTouch <= -mFuzzyCallbackThreshold) {
-//
-// /*
-// * When the user slides the thumb through the tick that corresponds
-// * to a zoom bound, we don't want to abruptly stop there. Instead,
-// * let the user slide it to the next tick, and then animate it back
-// * to the original zoom bound tick. Because of this, we make sure
-// * the delta from the bound is more than halfway to the next tick.
-// * We make sure the bound is between the touch and the previous
-// * callback to ensure we JUST passed the bound.
-// */
-// int oldTouchAngle = touchAngle;
-// if (ccw && mThumbCcwBound != Integer.MIN_VALUE) {
-// int deltaCcwBoundAndTouch =
-// getDelta(mThumbCcwBound, touchAngle, true, ccw);
-// if (deltaCcwBoundAndTouch >= mCallbackThreshold / 2) {
-// // The touch has past far enough from the bound
-// int deltaPreviousCbAndTouch = getDelta(mPreviousCallbackAngle,
-// touchAngle, true, ccw);
-// if (deltaPreviousCbAndTouch >= deltaCcwBoundAndTouch) {
-// // The bound is between the previous callback angle and the touch
-// // Cap to the bound
-// touchAngle = mThumbCcwBound;
-// /*
-// * We're moving the touch BACK to the bound, so animate
-// * back in the opposite direction that passed the bound.
-// */
-// animationCcw = false;
-// }
-// }
-// } else if (!ccw && mThumbCwBound != Integer.MIN_VALUE) {
-// // See block above for general comments
-// int deltaCwBoundAndTouch =
-// getDelta(mThumbCwBound, touchAngle, true, ccw);
-// if (deltaCwBoundAndTouch <= -mCallbackThreshold / 2) {
-// int deltaPreviousCbAndTouch = getDelta(mPreviousCallbackAngle,
-// touchAngle, true, ccw);
-// /*
-// * Both of these will be negative since we got delta in
-// * clockwise direction, and we want the magnitude of
-// * deltaPreviousCbAndTouch to be greater than the magnitude
-// * of deltaCwBoundAndTouch
-// */
-// if (deltaPreviousCbAndTouch <= deltaCwBoundAndTouch) {
-// touchAngle = mThumbCwBound;
-// animationCcw = true;
-// }
-// }
-// }
-// if (touchAngle != oldTouchAngle) {
-// // We bounded the touch angle
-// deltaPrevCbAndTouch = getDelta(mPreviousCallbackAngle, touchAngle, true, ccw);
-// // Animate back to the bound
-// animateThumbToNewAngle = true;
-// // Disallow movement now
-// setMode(MODE_IGNORE_UNTIL_UP);
-// }
-//
-//
-// /*
-// * Prevent it from jumping too far (this could happen if the user
-// * goes through the center)
-// */
-//
-// if (mEnforceMaxAbsJump) {
-// if (deltaPrevCbAndTouch <= -MAX_ABS_JUMP_DELTA_ANGLE) {
-// deltaPrevCbAndTouch = -MAX_ABS_JUMP_DELTA_ANGLE;
-// animateThumbToNewAngle = true;
-// } else if (deltaPrevCbAndTouch >= MAX_ABS_JUMP_DELTA_ANGLE) {
-// deltaPrevCbAndTouch = MAX_ABS_JUMP_DELTA_ANGLE;
-// animateThumbToNewAngle = true;
-// }
-// }
-//
-// /*
-// * We need to cover the edge case of a user grabbing the thumb,
-// * going into the center of the widget, and then coming out from the
-// * center to an angle that's slightly below the angle he's trying to
-// * hit. If we do int division, we'll end up with one level lower
-// * than the one he was going for.
-// */
-// int deltaLevels = Math.round((float) deltaPrevCbAndTouch / mCallbackThreshold);
-// if (deltaLevels != 0) {
-// boolean canStillZoom = mCallback.onZoomRingThumbDragged(
-// deltaLevels, mThumbDragStartAngle, touchAngle);
-//
-// if (mVibration) {
-// // TODO: we're trying the haptics to see how it goes with
-// // users, so we're ignoring the settings (for now)
-// performHapticFeedback(HapticFeedbackConstants.ZOOM_RING_TICK,
-// HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING |
-// HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
-//
-// }
-// // Set the callback angle to the actual angle based on how many delta levels we gave
-// mPreviousCallbackAngle = getValidAngle(
-// mPreviousCallbackAngle + (deltaLevels * mCallbackThreshold));
-// }
-// }
-//
-// if (DRAW_TRAIL) {
-// int deltaAngle = getDelta(mThumbAngle, touchAngle, true, ccw);
-// mAcculumalatedTrailAngle += Math.toDegrees(deltaAngle / (double) RADIAN_INT_MULTIPLIER);
-// }
-//
-// if (animateThumbToNewAngle) {
-// setThumbAngleAnimated(touchAngle, 0, animationCcw);
-// } else {
-// /*
-// * Use regular ccw here because animationCcw will never have been
-// * changed if animateThumbToNewAngle is false
-// */
-// setThumbAngleAuto(touchAngle, true, ccw);
-// }
-// }
private int getValidAngle(int invalidAngle) {
if (invalidAngle < 0) {
@@ -1008,16 +818,16 @@ public class ZoomRing extends View {
mCallback.onZoomRingThumbDraggingStopped();
}
- private void onZoomRingMoved(int rawX, int rawY) {
+ private void onZoomRingMoved(int x, int y) {
if (mPreviousWidgetDragX != Integer.MIN_VALUE) {
- int deltaX = rawX - mPreviousWidgetDragX;
- int deltaY = rawY - mPreviousWidgetDragY;
+ int deltaX = x - mPreviousWidgetDragX;
+ int deltaY = y - mPreviousWidgetDragY;
- mCallback.onZoomRingMoved(deltaX, deltaY, rawX, rawY);
+ mCallback.onZoomRingMoved(deltaX, deltaY);
}
- mPreviousWidgetDragX = rawX;
- mPreviousWidgetDragY = rawY;
+ mPreviousWidgetDragX = x;
+ mPreviousWidgetDragY = y;
}
@Override
@@ -1049,17 +859,15 @@ public class ZoomRing extends View {
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
- if (mThumbVisible) {
+ if (mDrawThumb) {
if (DRAW_TRAIL) {
mTrail.draw(canvas);
}
if ((mThumbArrowsToDraw & THUMB_ARROW_PLUS) != 0) {
mThumbPlusArrowDrawable.draw(canvas);
- mThumbPlusDrawable.draw(canvas);
}
if ((mThumbArrowsToDraw & THUMB_ARROW_MINUS) != 0) {
mThumbMinusArrowDrawable.draw(canvas);
- mThumbMinusDrawable.draw(canvas);
}
mThumbDrawable.draw(canvas);
}
@@ -1069,28 +877,6 @@ public class ZoomRing extends View {
int level = -angle * 10000 / ZoomRing.TWO_PI_INT_MULTIPLIED;
mThumbPlusArrowDrawable.setLevel(level);
mThumbMinusArrowDrawable.setLevel(level);
-
- // Assume it is a square
- int halfSideLength = mThumbPlusDrawable.getIntrinsicHeight() / 2;
- int unoffsetAngle = angle + mZeroAngle;
-
- int plusCenterX = (int) (Math.cos(1f * (unoffsetAngle - THUMB_PLUS_MINUS_OFFSET_ANGLE)
- / RADIAN_INT_MULTIPLIER) * THUMB_PLUS_MINUS_DISTANCE) + mCenterX;
- int plusCenterY = (int) (Math.sin(1f * (unoffsetAngle - THUMB_PLUS_MINUS_OFFSET_ANGLE)
- / RADIAN_INT_MULTIPLIER) * THUMB_PLUS_MINUS_DISTANCE) * -1 + mCenterY;
- mThumbPlusDrawable.setBounds(plusCenterX - halfSideLength,
- plusCenterY - halfSideLength,
- plusCenterX + halfSideLength,
- plusCenterY + halfSideLength);
-
- int minusCenterX = (int) (Math.cos(1f * (unoffsetAngle + THUMB_PLUS_MINUS_OFFSET_ANGLE)
- / RADIAN_INT_MULTIPLIER) * THUMB_PLUS_MINUS_DISTANCE) + mCenterX;
- int minusCenterY = (int) (Math.sin(1f * (unoffsetAngle + THUMB_PLUS_MINUS_OFFSET_ANGLE)
- / RADIAN_INT_MULTIPLIER) * THUMB_PLUS_MINUS_DISTANCE) * -1 + mCenterY;
- mThumbMinusDrawable.setBounds(minusCenterX - halfSideLength,
- minusCenterY - halfSideLength,
- minusCenterX + halfSideLength,
- minusCenterY + halfSideLength);
}
public void setThumbArrowsVisible(boolean visible) {
@@ -1100,7 +886,6 @@ public class ZoomRing extends View {
if (callbackAngle < mThumbCwBound - RADIAN_INT_ERROR ||
callbackAngle > mThumbCwBound + RADIAN_INT_ERROR) {
mThumbPlusArrowDrawable.setAlpha(255);
- mThumbPlusDrawable.setAlpha(255);
mThumbArrowsToDraw |= THUMB_ARROW_PLUS;
} else {
mThumbArrowsToDraw &= ~THUMB_ARROW_PLUS;
@@ -1108,7 +893,6 @@ public class ZoomRing extends View {
if (callbackAngle < mThumbCcwBound - RADIAN_INT_ERROR ||
callbackAngle > mThumbCcwBound + RADIAN_INT_ERROR) {
mThumbMinusArrowDrawable.setAlpha(255);
- mThumbMinusDrawable.setAlpha(255);
mThumbArrowsToDraw |= THUMB_ARROW_MINUS;
} else {
mThumbArrowsToDraw &= ~THUMB_ARROW_MINUS;
@@ -1133,14 +917,10 @@ public class ZoomRing extends View {
if (mThumbArrowsAlpha < 0) mThumbArrowsAlpha = 0;
if ((mThumbArrowsToDraw & THUMB_ARROW_PLUS) != 0) {
mThumbPlusArrowDrawable.setAlpha(mThumbArrowsAlpha);
- mThumbPlusDrawable.setAlpha(mThumbArrowsAlpha);
- invalidateDrawable(mThumbPlusDrawable);
invalidateDrawable(mThumbPlusArrowDrawable);
}
if ((mThumbArrowsToDraw & THUMB_ARROW_MINUS) != 0) {
mThumbMinusArrowDrawable.setAlpha(mThumbArrowsAlpha);
- mThumbMinusDrawable.setAlpha(mThumbArrowsAlpha);
- invalidateDrawable(mThumbMinusDrawable);
invalidateDrawable(mThumbMinusArrowDrawable);
}
@@ -1161,7 +941,7 @@ public class ZoomRing extends View {
void onZoomRingSetMovableHintVisible(boolean visible);
void onZoomRingMovingStarted();
- boolean onZoomRingMoved(int deltaX, int deltaY, int rawX, int rawY);
+ boolean onZoomRingMoved(int deltaX, int deltaY);
void onZoomRingMovingStopped();
void onZoomRingThumbDraggingStarted();
diff --git a/core/java/android/widget/ZoomRingController.java b/core/java/android/widget/ZoomRingController.java
index 19f66a0..2e97fda 100644
--- a/core/java/android/widget/ZoomRingController.java
+++ b/core/java/android/widget/ZoomRingController.java
@@ -33,7 +33,6 @@ import android.provider.Settings;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
-import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
@@ -48,36 +47,30 @@ import android.view.animation.DecelerateInterpolator;
/**
* TODO: Docs
- *
+ *
* If you are using this with a custom View, please call
* {@link #setVisible(boolean) setVisible(false)} from the
* {@link View#onDetachedFromWindow}.
- *
+ *
* @hide
*/
public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
View.OnTouchListener, View.OnKeyListener {
-
+
private static final int ZOOM_RING_RADIUS_INSET = 24;
private static final int ZOOM_RING_RECENTERING_DURATION = 500;
private static final String TAG = "ZoomRing";
- public static final boolean USE_OLD_ZOOM = false;
- static int getZoomType(Context context) {
- return Settings.System.getInt(context.getContentResolver(), "zoom", 1);
- }
+ public static final boolean USE_OLD_ZOOM = false;
public static boolean useOldZoom(Context context) {
- return getZoomType(context) == 0;
+ return Settings.System.getInt(context.getContentResolver(), "zoom", 1) == 0;
}
- private static boolean useThisZoom(Context context) {
- return getZoomType(context) == 1;
- }
-
+
private static final int ZOOM_CONTROLS_TIMEOUT =
(int) ViewConfiguration.getZoomControlsTimeout();
-
+
// TODO: move these to ViewConfiguration or re-use existing ones
// TODO: scale px values based on latest from ViewConfiguration
private static final int SECOND_TAP_TIMEOUT = 500;
@@ -87,12 +80,12 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
private static final int MAX_INITIATE_PAN_GAP = 10;
// TODO view config
private static final int INITIATE_PAN_DELAY = 300;
-
+
private static final String SETTING_NAME_SHOWN_TOAST = "shown_zoom_ring_toast";
-
+
private Context mContext;
private WindowManager mWindowManager;
-
+
/**
* The view that is being zoomed by this zoom ring.
*/
@@ -118,15 +111,15 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
/**
* The {@link #mTouchTargetView}'s location in window, set on touch down.
*/
- private int[] mTouchTargetLocationInWindow = new int[2];
+ private int[] mTouchTargetLocationInWindow = new int[2];
/**
* If the zoom ring is dismissed but the user is still in a touch
* interaction, we set this to true. This will ignore all touch events until
* up/cancel, and then set the owner's touch listener to null.
*/
private boolean mReleaseTouchListenerOnUp;
-
-
+
+
/*
* Tap-drag is an interaction where the user first taps and then (quickly)
* does the clockwise or counter-clockwise drag. In reality, this is: (down,
@@ -139,40 +132,30 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
*/
private int mTapDragStartX;
private int mTapDragStartY;
-
+
private static final int TOUCH_MODE_IDLE = 0;
private static final int TOUCH_MODE_WAITING_FOR_SECOND_TAP = 1;
private static final int TOUCH_MODE_WAITING_FOR_TAP_DRAG_MOVEMENT = 2;
private static final int TOUCH_MODE_FORWARDING_FOR_TAP_DRAG = 3;
private int mTouchMode;
-
+
private boolean mIsZoomRingVisible;
-
+
private ZoomRing mZoomRing;
private int mZoomRingWidth;
private int mZoomRingHeight;
-
+
/** Invokes panning of owner view if the zoom ring is touching an edge. */
private Panner mPanner;
private long mTouchingEdgeStartTime;
private boolean mPanningEnabledForThisInteraction;
-
- /**
- * When the finger moves the zoom ring to an edge, this is the horizontal
- * accumulator for how much the finger has moved off of its original touch
- * point on the zoom ring (OOB = out-of-bounds). If < 0, the finger has
- * moved that many px to the left of its original touch point on the ring.
- */
- private int mMovingZoomRingOobX;
- /** Vertical accumulator, see {@link #mMovingZoomRingOobX} */
- private int mMovingZoomRingOobY;
-
+
private ImageView mPanningArrows;
private Animation mPanningArrowsEnterAnimation;
private Animation mPanningArrowsExitAnimation;
-
+
private Rect mTempRect = new Rect();
-
+
private OnZoomListener mCallback;
private ViewConfiguration mViewConfig;
@@ -188,7 +171,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
* for the container's layout params.
*/
private int mCenteredContainerY = Integer.MIN_VALUE;
-
+
/**
* Scroller used to re-center the zoom ring if the user had dragged it to a
* corner and then double-taps any point on the owner view (the owner view
@@ -198,7 +181,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
* The (x,y) of the scroller is the (x,y) of the container's layout params.
*/
private Scroller mScroller;
-
+
/**
* When showing the zoom ring, we add the view as a new window. However,
* there is logic that needs to know the size of the zoom ring which is
@@ -206,7 +189,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
* the UI thread so it will be exceuted AFTER the layout. This is the logic.
*/
private Runnable mPostedVisibleInitializer;
-
+
/**
* Only touch from the main thread.
*/
@@ -216,29 +199,23 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
private IntentFilter mConfigurationChangedFilter =
new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED);
-
+
private BroadcastReceiver mConfigurationChangedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (!mIsZoomRingVisible) return;
-
+
mHandler.removeMessages(MSG_POST_CONFIGURATION_CHANGED);
mHandler.sendEmptyMessage(MSG_POST_CONFIGURATION_CHANGED);
}
};
-
+
/** Keeps the scroller going (or starts it). */
private static final int MSG_SCROLLER_TICK = 1;
/** When configuration changes, this is called after the UI thread is idle. */
private static final int MSG_POST_CONFIGURATION_CHANGED = 2;
/** Used to delay the zoom ring dismissal. */
private static final int MSG_DISMISS_ZOOM_RING = 3;
-
- /**
- * If setVisible(true) is called and the owner view's window token is null,
- * we delay the setVisible(true) call until it is not null.
- */
- private static final int MSG_POST_SET_VISIBLE = 4;
private Handler mHandler = new Handler() {
@Override
@@ -247,36 +224,26 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
case MSG_SCROLLER_TICK:
onScrollerTick();
break;
-
+
case MSG_POST_CONFIGURATION_CHANGED:
onPostConfigurationChanged();
break;
-
+
case MSG_DISMISS_ZOOM_RING:
setVisible(false);
break;
-
- case MSG_POST_SET_VISIBLE:
- if (mOwnerView.getWindowToken() == null) {
- // Doh, it is still null, throw an exception
- throw new IllegalArgumentException(
- "Cannot make the zoom ring visible if the owner view is " +
- "not attached to a window.");
- }
- setVisible(true);
- break;
}
-
- }
+
+ }
};
-
+
public ZoomRingController(Context context, View ownerView) {
mContext = context;
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
mPanner = new Panner();
mOwnerView = ownerView;
-
+
mZoomRing = new ZoomRing(context);
mZoomRing.setId(com.android.internal.R.id.zoomControls);
mZoomRing.setLayoutParams(new FrameLayout.LayoutParams(
@@ -284,7 +251,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.CENTER));
mZoomRing.setCallback(this);
-
+
createPanningArrows();
mContainerLayoutParams = new LayoutParams();
@@ -302,12 +269,12 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
mContainer = new FrameLayout(context);
mContainer.setLayoutParams(mContainerLayoutParams);
mContainer.setMeasureAllChildren(true);
-
+
mContainer.addView(mZoomRing);
mContainer.addView(mPanningArrows);
-
+
mScroller = new Scroller(context, new DecelerateInterpolator());
-
+
mViewConfig = ViewConfiguration.get(context);
}
@@ -320,7 +287,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.CENTER));
mPanningArrows.setVisibility(View.INVISIBLE);
-
+
mPanningArrowsEnterAnimation = AnimationUtils.loadAnimation(mContext,
com.android.internal.R.anim.fade_in);
mPanningArrowsExitAnimation = AnimationUtils.loadAnimation(mContext,
@@ -332,7 +299,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
* get a callback. Once there is a callback, the accumulator resets. For
* example, if you set this to PI/6, it will give a callback every time the
* user moves PI/6 amount on the ring.
- *
+ *
* @param callbackThreshold The angle for the callback threshold, in radians
*/
public void setZoomCallbackThreshold(float callbackThreshold) {
@@ -341,7 +308,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
/**
* Sets a drawable for the zoom ring track.
- *
+ *
* @param drawable The drawable to use for the track.
* @hide Need a better way of doing this, but this one-off for browser so it
* can have its final look for the usability study
@@ -349,11 +316,11 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
public void setZoomRingTrack(int drawable) {
mZoomRing.setBackgroundResource(drawable);
}
-
+
public void setCallback(OnZoomListener callback) {
mCallback = callback;
}
-
+
public void setThumbAngle(float angle) {
mZoomRing.setThumbAngle((int) (angle * ZoomRing.RADIAN_INT_MULTIPLIER));
}
@@ -361,21 +328,13 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
public void setThumbAngleAnimated(float angle) {
mZoomRing.setThumbAngleAnimated((int) (angle * ZoomRing.RADIAN_INT_MULTIPLIER), 0);
}
-
+
public void setResetThumbAutomatically(boolean resetThumbAutomatically) {
mZoomRing.setResetThumbAutomatically(resetThumbAutomatically);
}
-
- public void setVibration(boolean vibrate) {
- mZoomRing.setVibration(vibrate);
- }
-
- public void setThumbVisible(boolean thumbVisible) {
- mZoomRing.setThumbVisible(thumbVisible);
- }
public void setThumbClockwiseBound(float angle) {
- mZoomRing.setThumbClockwiseBound(angle >= 0 ?
+ mZoomRing.setThumbClockwiseBound(angle >= 0 ?
(int) (angle * ZoomRing.RADIAN_INT_MULTIPLIER) :
Integer.MIN_VALUE);
}
@@ -392,26 +351,14 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
public void setVisible(boolean visible) {
- if (!useThisZoom(mContext)) return;
+ if (useOldZoom(mContext)) return;
if (visible) {
- if (mOwnerView.getWindowToken() == null) {
- /*
- * We need a window token to show ourselves, maybe the owner's
- * window hasn't been created yet but it will have been by the
- * time the looper is idle, so post the setVisible(true) call.
- */
- if (!mHandler.hasMessages(MSG_POST_SET_VISIBLE)) {
- mHandler.sendEmptyMessage(MSG_POST_SET_VISIBLE);
- }
- return;
- }
-
dismissZoomRingDelayed(ZOOM_CONTROLS_TIMEOUT);
} else {
mPanner.stop();
}
-
+
if (mIsZoomRingVisible == visible) {
return;
}
@@ -421,40 +368,40 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
if (mContainerLayoutParams.token == null) {
mContainerLayoutParams.token = mOwnerView.getWindowToken();
}
-
+
mWindowManager.addView(mContainer, mContainerLayoutParams);
-
+
if (mPostedVisibleInitializer == null) {
mPostedVisibleInitializer = new Runnable() {
public void run() {
refreshPositioningVariables();
resetZoomRing();
-
+
// TODO: remove this 'update' and just center zoom ring before the
// 'add', but need to make sure we have the width and height (which
// probably can only be retrieved after it's measured, which happens
// after it's added).
mWindowManager.updateViewLayout(mContainer, mContainerLayoutParams);
-
+
if (mCallback != null) {
mCallback.onVisibilityChanged(true);
}
}
- };
+ };
}
-
+
mPanningArrows.setAnimation(null);
-
+
mHandler.post(mPostedVisibleInitializer);
-
+
// Handle configuration changes when visible
mContext.registerReceiver(mConfigurationChangedReceiver, mConfigurationChangedFilter);
-
+
// Steal key/touches events from the owner
mOwnerView.setOnKeyListener(this);
mOwnerView.setOnTouchListener(this);
mReleaseTouchListenerOnUp = false;
-
+
} else {
// Don't want to steal any more keys/touches
mOwnerView.setOnKeyListener(null);
@@ -468,45 +415,45 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
// No longer care about configuration changes
mContext.unregisterReceiver(mConfigurationChangedReceiver);
-
+
mWindowManager.removeView(mContainer);
mHandler.removeCallbacks(mPostedVisibleInitializer);
-
+
if (mCallback != null) {
mCallback.onVisibilityChanged(false);
}
}
-
+
}
-
+
/**
* TODO: docs
- *
+ *
* Notes:
* - Touch dispatching is different. Only direct children who are clickable are eligble for touch events.
* - Please ensure you set your View to INVISIBLE not GONE when hiding it.
- *
+ *
* @return
*/
public FrameLayout getContainer() {
return mContainer;
}
-
+
public int getZoomRingId() {
return mZoomRing.getId();
}
-
+
private void dismissZoomRingDelayed(int delay) {
mHandler.removeMessages(MSG_DISMISS_ZOOM_RING);
mHandler.sendEmptyMessageDelayed(MSG_DISMISS_ZOOM_RING, delay);
}
-
+
private void resetZoomRing() {
mScroller.abortAnimation();
-
+
mContainerLayoutParams.x = mCenteredContainerX;
mContainerLayoutParams.y = mCenteredContainerY;
-
+
// Reset the thumb
mZoomRing.resetThumbAngle();
}
@@ -514,15 +461,13 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
/**
* Should be called by the client for each event belonging to the second tap
* (the down, move, up, and cancel events).
- *
+ *
* @param event The event belonging to the second tap.
* @return Whether the event was consumed.
*/
public boolean handleDoubleTapEvent(MotionEvent event) {
- if (!useThisZoom(mContext)) return false;
-
int action = event.getAction();
-
+
// TODO: make sure this works well with the
// ownerView.setOnTouchListener(this) instead of window receiving
// touches
@@ -530,19 +475,19 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
mTouchMode = TOUCH_MODE_WAITING_FOR_TAP_DRAG_MOVEMENT;
int x = (int) event.getX();
int y = (int) event.getY();
-
+
refreshPositioningVariables();
setVisible(true);
centerPoint(x, y);
- ensureZoomRingIsCentered();
-
+ ensureZoomRingIsCentered();
+
// Tap drag mode stuff
mTapDragStartX = x;
mTapDragStartY = y;
} else if (action == MotionEvent.ACTION_CANCEL) {
mTouchMode = TOUCH_MODE_IDLE;
-
+
} else { // action is move or up
switch (mTouchMode) {
case TOUCH_MODE_WAITING_FOR_TAP_DRAG_MOVEMENT: {
@@ -558,29 +503,29 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
setTouchTargetView(mZoomRing);
}
return true;
-
+
case MotionEvent.ACTION_UP:
mTouchMode = TOUCH_MODE_IDLE;
break;
}
break;
}
-
+
case TOUCH_MODE_FORWARDING_FOR_TAP_DRAG: {
switch (action) {
case MotionEvent.ACTION_MOVE:
giveTouchToZoomRing(event);
return true;
-
+
case MotionEvent.ACTION_UP:
mTouchMode = TOUCH_MODE_IDLE;
-
+
/*
* This is a power-user feature that only shows the
* zoom while the user is performing the tap-drag.
* That means once it is released, the zoom ring
* should disappear.
- */
+ */
mZoomRing.setTapDragMode(false, (int) event.getX(), (int) event.getY());
dismissZoomRingDelayed(0);
break;
@@ -589,13 +534,13 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
}
}
}
-
+
return true;
}
-
+
private void ensureZoomRingIsCentered() {
LayoutParams lp = mContainerLayoutParams;
-
+
if (lp.x != mCenteredContainerX || lp.y != mCenteredContainerY) {
int width = mContainer.getWidth();
int height = mContainer.getHeight();
@@ -604,21 +549,21 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
mHandler.sendEmptyMessage(MSG_SCROLLER_TICK);
}
}
-
+
private void refreshPositioningVariables() {
mZoomRingWidth = mZoomRing.getWidth();
mZoomRingHeight = mZoomRing.getHeight();
-
+
// Calculate the owner view's bounds
mOwnerView.getGlobalVisibleRect(mOwnerViewBounds);
-
+
// Get the center
Gravity.apply(Gravity.CENTER, mContainer.getWidth(), mContainer.getHeight(),
mOwnerViewBounds, mTempRect);
mCenteredContainerX = mTempRect.left;
mCenteredContainerY = mTempRect.top;
}
-
+
/**
* Centers the point (in owner view's coordinates).
*/
@@ -627,7 +572,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
mCallback.onCenter(x, y);
}
}
-
+
private void giveTouchToZoomRing(MotionEvent event) {
int rawX = (int) event.getRawX();
int rawY = (int) event.getRawY();
@@ -635,11 +580,11 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
int y = rawY - mContainerLayoutParams.y - mZoomRing.getTop();
mZoomRing.handleTouch(event.getAction(), event.getEventTime(), x, y, rawX, rawY);
}
-
+
public void onZoomRingSetMovableHintVisible(boolean visible) {
- setPanningArrowsVisible(visible);
+ setPanningArrowsVisible(visible);
}
-
+
public void onUserInteractionStarted() {
mHandler.removeMessages(MSG_DISMISS_ZOOM_RING);
}
@@ -651,62 +596,24 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
public void onZoomRingMovingStarted() {
mScroller.abortAnimation();
mTouchingEdgeStartTime = 0;
- mMovingZoomRingOobX = 0;
- mMovingZoomRingOobY = 0;
if (mCallback != null) {
mCallback.onBeginPan();
}
}
-
+
private void setPanningArrowsVisible(boolean visible) {
mPanningArrows.startAnimation(visible ? mPanningArrowsEnterAnimation
: mPanningArrowsExitAnimation);
mPanningArrows.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
}
-
- public boolean onZoomRingMoved(int deltaX, int deltaY, int rawX, int rawY) {
-
- if (mMovingZoomRingOobX != 0) {
- /*
- * The finger has moved off the point where it originally touched
- * the zidget.
- */
- boolean wasOobLeft = mMovingZoomRingOobX < 0;
- mMovingZoomRingOobX += deltaX;
- if ((wasOobLeft && mMovingZoomRingOobX > 0) ||
- (!wasOobLeft && mMovingZoomRingOobX < 0)) {
- /*
- * Woot, the finger is back on the original point. Infact, it
- * went PAST its original point, so take the amount it passed
- * and use that as the delta to move the zoom ring.
- */
- deltaX = mMovingZoomRingOobX;
- // No longer out-of-bounds, reset
- mMovingZoomRingOobX = 0;
- } else {
- // The finger is still not back, eat this movement
- deltaX = 0;
- }
- }
-
- if (mMovingZoomRingOobY != 0) {
- // See above for comments
- boolean wasOobUp = mMovingZoomRingOobY < 0;
- mMovingZoomRingOobY += deltaY;
- if ((wasOobUp && mMovingZoomRingOobY > 0) || (!wasOobUp && mMovingZoomRingOobY < 0)) {
- deltaY = mMovingZoomRingOobY;
- mMovingZoomRingOobY = 0;
- } else {
- deltaY = 0;
- }
- }
-
+
+ public boolean onZoomRingMoved(int deltaX, int deltaY) {
WindowManager.LayoutParams lp = mContainerLayoutParams;
Rect ownerBounds = mOwnerViewBounds;
-
+
int zoomRingLeft = mZoomRing.getLeft();
int zoomRingTop = mZoomRing.getTop();
-
+
int newX = lp.x + deltaX;
int newZoomRingX = newX + zoomRingLeft;
newZoomRingX = (newZoomRingX <= ownerBounds.left) ? ownerBounds.left :
@@ -720,26 +627,19 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
(newZoomRingY + mZoomRingHeight > ownerBounds.bottom) ?
ownerBounds.bottom - mZoomRingHeight : newZoomRingY;
lp.y = newZoomRingY - zoomRingTop;
-
+
mWindowManager.updateViewLayout(mContainer, lp);
-
+
// Check for pan
boolean horizontalPanning = true;
int leftGap = newZoomRingX - ownerBounds.left;
if (leftGap < MAX_PAN_GAP) {
- if (leftGap == 0 && deltaX != 0 && mMovingZoomRingOobX == 0) {
- // Future moves in this direction should be accumulated in mMovingZoomRingOobX
- mMovingZoomRingOobX = deltaX / Math.abs(deltaX);
- }
if (shouldPan(leftGap)) {
mPanner.setHorizontalStrength(-getStrengthFromGap(leftGap));
}
} else {
int rightGap = ownerBounds.right - (lp.x + mZoomRingWidth + zoomRingLeft);
if (rightGap < MAX_PAN_GAP) {
- if (rightGap == 0 && deltaX != 0 && mMovingZoomRingOobX == 0) {
- mMovingZoomRingOobX = deltaX / Math.abs(deltaX);
- }
if (shouldPan(rightGap)) {
mPanner.setHorizontalStrength(getStrengthFromGap(rightGap));
}
@@ -748,21 +648,15 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
horizontalPanning = false;
}
}
-
+
int topGap = newZoomRingY - ownerBounds.top;
if (topGap < MAX_PAN_GAP) {
- if (topGap == 0 && deltaY != 0 && mMovingZoomRingOobY == 0) {
- mMovingZoomRingOobY = deltaY / Math.abs(deltaY);
- }
if (shouldPan(topGap)) {
mPanner.setVerticalStrength(-getStrengthFromGap(topGap));
}
} else {
int bottomGap = ownerBounds.bottom - (lp.y + mZoomRingHeight + zoomRingTop);
if (bottomGap < MAX_PAN_GAP) {
- if (bottomGap == 0 && deltaY != 0 && mMovingZoomRingOobY == 0) {
- mMovingZoomRingOobY = deltaY / Math.abs(deltaY);
- }
if (shouldPan(bottomGap)) {
mPanner.setVerticalStrength(getStrengthFromGap(bottomGap));
}
@@ -776,13 +670,13 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
}
}
}
-
+
return true;
}
-
+
private boolean shouldPan(int gap) {
if (mPanningEnabledForThisInteraction) return true;
-
+
if (gap < MAX_INITIATE_PAN_GAP) {
long time = SystemClock.elapsedRealtime();
if (mTouchingEdgeStartTime != 0 &&
@@ -799,7 +693,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
}
return false;
}
-
+
public void onZoomRingMovingStopped() {
mPanner.stop();
setPanningArrowsVisible(false);
@@ -807,18 +701,18 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
mCallback.onEndPan();
}
}
-
+
private int getStrengthFromGap(int gap) {
return gap > MAX_PAN_GAP ? 0 :
(MAX_PAN_GAP - gap) * 100 / MAX_PAN_GAP;
}
-
+
public void onZoomRingThumbDraggingStarted() {
if (mCallback != null) {
mCallback.onBeginDrag();
}
}
-
+
public boolean onZoomRingThumbDragged(int numLevels, int startAngle, int curAngle) {
if (mCallback != null) {
int deltaZoomLevel = -numLevels;
@@ -826,17 +720,17 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
mZoomRingWidth / 2;
int globalZoomCenterY = mContainerLayoutParams.y + mZoomRing.getTop() +
mZoomRingHeight / 2;
-
+
return mCallback.onDragZoom(deltaZoomLevel,
globalZoomCenterX - mOwnerViewBounds.left,
globalZoomCenterY - mOwnerViewBounds.top,
(float) startAngle / ZoomRing.RADIAN_INT_MULTIPLIER,
(float) curAngle / ZoomRing.RADIAN_INT_MULTIPLIER);
}
-
+
return false;
}
-
+
public void onZoomRingThumbDraggingStopped() {
if (mCallback != null) {
mCallback.onEndDrag();
@@ -846,35 +740,35 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
public void onZoomRingDismissed(boolean dismissImmediately) {
if (dismissImmediately) {
mHandler.removeMessages(MSG_DISMISS_ZOOM_RING);
- setVisible(false);
+ setVisible(false);
} else {
dismissZoomRingDelayed(ZOOM_RING_DISMISS_DELAY);
}
}
-
+
public void onRingDown(int tickAngle, int touchAngle) {
}
-
+
public boolean onTouch(View v, MotionEvent event) {
if (sTutorialDialog != null && sTutorialDialog.isShowing() &&
SystemClock.elapsedRealtime() - sTutorialShowTime >= TUTORIAL_MIN_DISPLAY_TIME) {
finishZoomTutorial();
}
-
+
int action = event.getAction();
if (mReleaseTouchListenerOnUp) {
- // The ring was dismissed but we need to throw away all events until the up
+ // The ring was dismissed but we need to throw away all events until the up
if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
mOwnerView.setOnTouchListener(null);
setTouchTargetView(null);
mReleaseTouchListenerOnUp = false;
}
-
+
// Eat this event
return true;
}
-
+
View targetView = mTouchTargetView;
switch (action) {
@@ -882,7 +776,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
targetView = getViewForTouch((int) event.getRawX(), (int) event.getRawY());
setTouchTargetView(targetView);
break;
-
+
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
setTouchTargetView(null);
@@ -893,7 +787,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
// The upperleft corner of the target view in raw coordinates
int targetViewRawX = mContainerLayoutParams.x + mTouchTargetLocationInWindow[0];
int targetViewRawY = mContainerLayoutParams.y + mTouchTargetLocationInWindow[1];
-
+
MotionEvent containerEvent = MotionEvent.obtain(event);
// Convert the motion event into the target view's coordinates (from
// owner view's coordinates)
@@ -902,32 +796,32 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
boolean retValue = targetView.dispatchTouchEvent(containerEvent);
containerEvent.recycle();
return retValue;
-
+
} else {
if (action == MotionEvent.ACTION_DOWN) {
dismissZoomRingDelayed(ZOOM_RING_DISMISS_DELAY);
}
-
+
return false;
}
}
-
+
private void setTouchTargetView(View view) {
mTouchTargetView = view;
if (view != null) {
view.getLocationInWindow(mTouchTargetLocationInWindow);
}
}
-
+
/**
* Returns the View that should receive a touch at the given coordinates.
- *
+ *
* @param rawX The raw X.
* @param rawY The raw Y.
* @return The view that should receive the touches, or null if there is not one.
*/
private View getViewForTouch(int rawX, int rawY) {
- // Check to see if it is touching the ring
+ // Check to see if it is touching the ring
int containerCenterX = mContainerLayoutParams.x + mContainer.getWidth() / 2;
int containerCenterY = mContainerLayoutParams.y + mContainer.getHeight() / 2;
int distanceFromCenterX = rawX - containerCenterX;
@@ -938,7 +832,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
zoomRingRadius * zoomRingRadius) {
return mZoomRing;
}
-
+
// Check to see if it is touching any other clickable View.
// Reverse order so the child drawn on top gets first dibs.
int containerCoordsX = rawX - mContainerLayoutParams.x;
@@ -950,13 +844,13 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
!child.isClickable()) {
continue;
}
-
+
child.getHitRect(frame);
if (frame.contains(containerCoordsX, containerCoordsY)) {
return child;
}
}
-
+
return null;
}
@@ -967,34 +861,34 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
case KeyEvent.KEYCODE_DPAD_RIGHT:
// Eat these
return true;
-
+
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_DOWN:
// Keep the zoom alive a little longer
dismissZoomRingDelayed(ZOOM_CONTROLS_TIMEOUT);
// They started zooming, hide the thumb arrows
mZoomRing.setThumbArrowsVisible(false);
-
+
if (mCallback != null && event.getAction() == KeyEvent.ACTION_DOWN) {
mCallback.onSimpleZoom(keyCode == KeyEvent.KEYCODE_DPAD_UP);
}
-
+
return true;
}
-
+
return false;
}
private void onScrollerTick() {
if (!mScroller.computeScrollOffset() || !mIsZoomRingVisible) return;
-
+
mContainerLayoutParams.x = mScroller.getCurrX();
mContainerLayoutParams.y = mScroller.getCurrY();
mWindowManager.updateViewLayout(mContainer, mContainerLayoutParams);
mHandler.sendEmptyMessage(MSG_SCROLLER_TICK);
}
-
+
private void onPostConfigurationChanged() {
dismissZoomRingDelayed(ZOOM_CONTROLS_TIMEOUT);
refreshPositioningVariables();
@@ -1014,7 +908,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
* before. Furthermore, if the application does not have privilege to write
* to the system settings, it will store this bit locally in a shared
* preference.
- *
+ *
* @hide This should only be used by our main apps--browser, maps, and
* gallery
*/
@@ -1023,65 +917,53 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
if (Settings.System.getInt(cr, SETTING_NAME_SHOWN_TOAST, 0) == 1) {
return;
}
-
+
SharedPreferences sp = context.getSharedPreferences("_zoom", Context.MODE_PRIVATE);
if (sp.getInt(SETTING_NAME_SHOWN_TOAST, 0) == 1) {
return;
}
-
+
if (sTutorialDialog != null && sTutorialDialog.isShowing()) {
sTutorialDialog.dismiss();
}
-
- LayoutInflater layoutInflater =
- (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- TextView textView = (TextView) layoutInflater.inflate(
- com.android.internal.R.layout.alert_dialog_simple_text, null)
- .findViewById(android.R.id.text1);
- textView.setText(com.android.internal.R.string.tutorial_double_tap_to_zoom_message_short);
sTutorialDialog = new AlertDialog.Builder(context)
- .setView(textView)
+ .setMessage(
+ com.android.internal.R.string.tutorial_double_tap_to_zoom_message_short)
.setIcon(0)
.create();
-
+
Window window = sTutorialDialog.getWindow();
window.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
- window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND |
+ window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND |
WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
window.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
-
+
sTutorialDialog.show();
sTutorialShowTime = SystemClock.elapsedRealtime();
}
-
- public static void finishZoomTutorial(Context context, boolean userNotified) {
+
+ public void finishZoomTutorial() {
if (sTutorialDialog == null) return;
-
+
sTutorialDialog.dismiss();
sTutorialDialog = null;
-
+
// Record that they have seen the tutorial
- if (userNotified) {
- try {
- Settings.System.putInt(context.getContentResolver(), SETTING_NAME_SHOWN_TOAST, 1);
- } catch (SecurityException e) {
- /*
- * The app does not have permission to clear this global flag, make
- * sure the user does not see the message when he comes back to this
- * same app at least.
- */
- SharedPreferences sp = context.getSharedPreferences("_zoom", Context.MODE_PRIVATE);
- sp.edit().putInt(SETTING_NAME_SHOWN_TOAST, 1).commit();
- }
+ try {
+ Settings.System.putInt(mContext.getContentResolver(), SETTING_NAME_SHOWN_TOAST, 1);
+ } catch (SecurityException e) {
+ /*
+ * The app does not have permission to clear this global flag, make
+ * sure the user does not see the message when he comes back to this
+ * same app at least.
+ */
+ SharedPreferences sp = mContext.getSharedPreferences("_zoom", Context.MODE_PRIVATE);
+ sp.edit().putInt(SETTING_NAME_SHOWN_TOAST, 1).commit();
}
}
-
- public void finishZoomTutorial() {
- finishZoomTutorial(mContext, true);
- }
-
+
public void setPannerStartVelocity(float startVelocity) {
mPanner.mStartVelocity = startVelocity;
}
@@ -1101,27 +983,27 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
private class Panner implements Runnable {
private static final int RUN_DELAY = 15;
private static final float STOP_SLOWDOWN = 0.8f;
-
+
private final Handler mUiHandler = new Handler();
-
+
private int mVerticalStrength;
private int mHorizontalStrength;
private boolean mStopping;
-
+
/** The time this current pan started. */
private long mStartTime;
-
+
/** The time of the last callback to pan the map/browser/etc. */
private long mPreviousCallbackTime;
-
+
// TODO Adjust to be DPI safe
private float mStartVelocity = 135;
private float mAcceleration = 160;
private float mMaxVelocity = 1000;
private int mStartAcceleratingDuration = 700;
private float mVelocity;
-
+
/** -100 (full left) to 0 (none) to 100 (full right) */
public void setHorizontalStrength(int horizontalStrength) {
if (mHorizontalStrength == 0 && mVerticalStrength == 0 && horizontalStrength != 0) {
@@ -1129,7 +1011,7 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
} else if (mVerticalStrength == 0 && horizontalStrength == 0) {
stop();
}
-
+
mHorizontalStrength = horizontalStrength;
mStopping = false;
}
@@ -1141,11 +1023,11 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
} else if (mHorizontalStrength == 0 && verticalStrength == 0) {
stop();
}
-
- mVerticalStrength = verticalStrength;
+
+ mVerticalStrength = verticalStrength;
mStopping = false;
}
-
+
private void start() {
mUiHandler.post(this);
mPreviousCallbackTime = 0;
@@ -1155,37 +1037,37 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
public void stop() {
mStopping = true;
}
-
+
public void run() {
if (mStopping) {
mHorizontalStrength *= STOP_SLOWDOWN;
mVerticalStrength *= STOP_SLOWDOWN;
}
-
+
if (mHorizontalStrength == 0 && mVerticalStrength == 0) {
return;
}
-
+
boolean firstRun = mPreviousCallbackTime == 0;
long curTime = SystemClock.elapsedRealtime();
int panAmount = getPanAmount(mPreviousCallbackTime, curTime);
mPreviousCallbackTime = curTime;
-
+
if (firstRun) {
mStartTime = curTime;
mVelocity = mStartVelocity;
} else {
int panX = panAmount * mHorizontalStrength / 100;
int panY = panAmount * mVerticalStrength / 100;
-
+
if (mCallback != null) {
mCallback.onPan(panX, panY);
}
}
-
+
mUiHandler.postDelayed(this, RUN_DELAY);
}
-
+
private int getPanAmount(long previousTime, long currentTime) {
if (mVelocity > mMaxVelocity) {
mVelocity = mMaxVelocity;
@@ -1195,12 +1077,14 @@ public class ZoomRingController implements ZoomRing.OnZoomRingCallback,
mVelocity += (currentTime - previousTime) * mAcceleration / 1000;
}
}
-
+
return (int) ((currentTime - previousTime) * mVelocity) / 1000;
}
}
+
+
public interface OnZoomListener {
void onBeginDrag();
boolean onDragZoom(int deltaZoomLevel, int centerX, int centerY, float startAngle,
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index edda1d9..b502a6c 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -28,8 +28,6 @@ interface IBatteryStats {
void noteStopGps(int uid);
void noteScreenOn();
void noteScreenOff();
- void notePhoneOn();
- void notePhoneOff();
void setOnBattery(boolean onBattery);
long getAwakeTimeBattery();
long getAwakeTimePlugged();
diff --git a/core/java/com/android/internal/gadget/IGadgetService.aidl b/core/java/com/android/internal/gadget/IGadgetService.aidl
index 9c66b95..a22f3f3 100644
--- a/core/java/com/android/internal/gadget/IGadgetService.aidl
+++ b/core/java/com/android/internal/gadget/IGadgetService.aidl
@@ -44,7 +44,6 @@ interface IGadgetService {
List<GadgetProviderInfo> getInstalledProviders();
GadgetProviderInfo getGadgetInfo(int gadgetId);
void bindGadgetId(int gadgetId, in ComponentName provider);
- int[] getGadgetIds(in ComponentName provider);
}
diff --git a/core/java/com/android/internal/logging/AndroidConfig.java b/core/java/com/android/internal/logging/AndroidConfig.java
index f8002c6..d8be889 100644
--- a/core/java/com/android/internal/logging/AndroidConfig.java
+++ b/core/java/com/android/internal/logging/AndroidConfig.java
@@ -34,14 +34,11 @@ public class AndroidConfig {
super();
try {
- Logger rootLogger = Logger.getLogger("");
- rootLogger.addHandler(new AndroidHandler());
- rootLogger.setLevel(Level.INFO);
-
- // Turn down logging in Apache libraries.
- Logger.getLogger("org.apache").setLevel(Level.WARNING);
+ Logger.global.addHandler(new AndroidHandler());
+ Logger.global.setLevel(Level.ALL);
} catch (Exception ex) {
ex.printStackTrace();
}
- }
+ }
+
}
diff --git a/core/java/com/android/internal/logging/AndroidHandler.java b/core/java/com/android/internal/logging/AndroidHandler.java
index d9fcf60..a6a4c64 100644
--- a/core/java/com/android/internal/logging/AndroidHandler.java
+++ b/core/java/com/android/internal/logging/AndroidHandler.java
@@ -18,14 +18,14 @@ package com.android.internal.logging;
import android.util.Log;
-import java.util.logging.*;
-import java.util.Date;
-import java.text.MessageFormat;
-import java.io.PrintWriter;
-import java.io.StringWriter;
+import java.util.logging.Formatter;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.SimpleFormatter;
/**
- * Implements a {@link java.util.logging.Logger} handler that writes to the Android log. The
+ * Implements a {@link java.util.Logger} handler that writes to the Android log. The
* implementation is rather straightforward. The name of the logger serves as
* the log tag. Only the log levels need to be converted appropriately. For
* this purpose, the following mapping is being used:
@@ -81,24 +81,8 @@ public class AndroidHandler extends Handler {
/**
* Holds the formatter for all Android log handlers.
*/
- private static final Formatter THE_FORMATTER = new Formatter() {
- @Override
- public String format(LogRecord r) {
- Throwable thrown = r.getThrown();
- if (thrown != null) {
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
- sw.write(r.getMessage());
- sw.write("\n");
- thrown.printStackTrace(pw);
- pw.flush();
- return sw.toString();
- } else {
- return r.getMessage();
- }
- }
- };
-
+ private static final Formatter THE_FORMATTER = new SimpleFormatter();
+
/**
* Constructs a new instance of the Android log handler.
*/
@@ -122,40 +106,27 @@ public class AndroidHandler extends Handler {
int level = getAndroidLevel(record.getLevel());
String tag = record.getLoggerName();
- if (tag == null) {
- // Anonymous logger.
- tag = "null";
- } else {
- // Tags must be <= 23 characters.
- int length = tag.length();
- if (length > 23) {
- // Most loggers use the full class name. Try dropping the
- // package.
- int lastPeriod = tag.lastIndexOf(".");
- if (length - lastPeriod - 1 <= 23) {
- tag = tag.substring(lastPeriod + 1);
- } else {
- // Use last 23 chars.
- tag = tag.substring(tag.length() - 23);
- }
- }
- }
-
if (!Log.isLoggable(tag, level)) {
return;
}
-
- String message = getFormatter().format(record);
- Log.println(level, tag, message);
+
+ String msg;
+ try {
+ msg = getFormatter().format(record);
+ } catch (RuntimeException e) {
+ Log.e("AndroidHandler", "Error formatting log record", e);
+ msg = record.getMessage();
+ }
+ Log.println(level, tag, msg);
} catch (RuntimeException e) {
- Log.e("AndroidHandler", "Error logging message.", e);
+ Log.e("AndroidHandler", "Error publishing log record", e);
}
}
/**
- * Converts a {@link java.util.logging.Logger} logging level into an Android one.
+ * Converts a {@link java.util.Logger} logging level into an Android one.
*
- * @param level The {@link java.util.logging.Logger} logging level.
+ * @param level The {@link java.util.Logger} logging level.
*
* @return The resulting Android logging level.
*/
diff --git a/core/java/com/android/internal/net/DbSSLSessionCache.java b/core/java/com/android/internal/net/DbSSLSessionCache.java
deleted file mode 100644
index 06e4ca8..0000000
--- a/core/java/com/android/internal/net/DbSSLSessionCache.java
+++ /dev/null
@@ -1,269 +0,0 @@
-// Copyright 2009 The Android Open Source Project
-
-package com.android.internal.net;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.SQLException;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteOpenHelper;
-import android.util.Log;
-
-import org.apache.commons.codec.binary.Base64;
-import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.net.ssl.SSLSession;
-
-/**
- * Hook into harmony SSL cache to persist the SSL sessions.
- *
- * Current implementation is suitable for saving a small number of hosts -
- * like google services. It can be extended with expiration and more features
- * to support more hosts.
- *
- * {@hide}
- */
-public class DbSSLSessionCache implements SSLClientSessionCache {
- private static final String TAG = "DbSSLSessionCache";
-
- /**
- * Table where sessions are stored.
- */
- public static final String SSL_CACHE_TABLE = "ssl_sessions";
-
- private static final String SSL_CACHE_ID = "_id";
-
- /**
- * Key is host:port - port is not optional.
- */
- private static final String SSL_CACHE_HOSTPORT = "hostport";
-
- /**
- * Base64-encoded DER value of the session.
- */
- private static final String SSL_CACHE_SESSION = "session";
-
- /**
- * Time when the record was added - should be close to the time
- * of the initial session negotiation.
- */
- private static final String SSL_CACHE_TIME_SEC = "time_sec";
-
- public static final String DATABASE_NAME = "ssl_sessions.db";
-
- public static final int DATABASE_VERSION = 2;
-
- /** public for testing
- */
- public static final int SSL_CACHE_ID_COL = 0;
- public static final int SSL_CACHE_HOSTPORT_COL = 1;
- public static final int SSL_CACHE_SESSION_COL = 2;
- public static final int SSL_CACHE_TIME_SEC_COL = 3;
-
- public static final int MAX_CACHE_SIZE = 256;
-
- private final Map<String, byte[]> mExternalCache =
- new HashMap<String, byte[]>();
-
-
- private DatabaseHelper mDatabaseHelper;
-
- private boolean mNeedsCacheLoad = true;
-
- public static final String[] PROJECTION = new String[] {
- SSL_CACHE_ID,
- SSL_CACHE_HOSTPORT,
- SSL_CACHE_SESSION,
- SSL_CACHE_TIME_SEC
- };
-
- /**
- * Create a SslSessionCache instance, using the specified context to
- * initialize the database.
- *
- * This constructor will use the default database - created for the application
- * context.
- *
- * @param activityContext
- */
- public DbSSLSessionCache(Context activityContext) {
- Context appContext = activityContext.getApplicationContext();
- mDatabaseHelper = new DatabaseHelper(appContext);
- }
-
- /**
- * Create a SslSessionCache that uses a specific database.
- *
- *
- * @param database
- */
- public DbSSLSessionCache(DatabaseHelper database) {
- this.mDatabaseHelper = database;
- }
-
- public void putSessionData(SSLSession session, byte[] der) {
- if (mDatabaseHelper == null) {
- return;
- }
- synchronized (this.getClass()) {
- SQLiteDatabase db = mDatabaseHelper.getWritableDatabase();
- if (mExternalCache.size() == MAX_CACHE_SIZE) {
- // remove oldest.
- // TODO: check if the new one is in cached already ( i.e. update ).
- Cursor byTime = mDatabaseHelper.getReadableDatabase().query(SSL_CACHE_TABLE,
- PROJECTION, null, null, null, null, SSL_CACHE_TIME_SEC);
- if (byTime.moveToFirst()) {
- // TODO: can I do byTime.deleteRow() ?
- String hostPort = byTime.getString(SSL_CACHE_HOSTPORT_COL);
- db.delete(SSL_CACHE_TABLE,
- SSL_CACHE_HOSTPORT + "= ?" , new String[] { hostPort });
- mExternalCache.remove(hostPort);
- } else {
- Log.w(TAG, "No rows found");
- // something is wrong, clear it
- clear();
- }
- }
- // Serialize native session to standard DER encoding
- long t0 = System.currentTimeMillis();
-
- String b64 = new String(Base64.encodeBase64(der));
- String key = session.getPeerHost() + ":" + session.getPeerPort();
-
- ContentValues values = new ContentValues();
- values.put(SSL_CACHE_HOSTPORT, key);
- values.put(SSL_CACHE_SESSION, b64);
- values.put(SSL_CACHE_TIME_SEC, System.currentTimeMillis() / 1000);
-
- mExternalCache.put(key, der);
-
- try {
- db.insert(SSL_CACHE_TABLE, null /*nullColumnHack */ , values);
- } catch(SQLException ex) {
- // Ignore - nothing we can do to recover, and caller shouldn't
- // be affected.
- Log.w(TAG, "Ignoring SQL exception when caching session", ex);
- }
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- long t1 = System.currentTimeMillis();
- Log.d(TAG, "New SSL session " + session.getPeerHost() +
- " DER len: " + der.length + " " + (t1 - t0));
- }
- }
-
- }
-
- public byte[] getSessionData(String host, int port) {
- // Current (simple) implementation does a single lookup to DB, then saves
- // all entries to the cache.
-
- // This works for google services - i.e. small number of certs.
- // If we extend this to all processes - we should hold a separate cache
- // or do lookups to DB each time.
- if (mDatabaseHelper == null) {
- return null;
- }
- synchronized(this.getClass()) {
- if (mNeedsCacheLoad) {
- // Don't try to load again, if something is wrong on the first
- // request it'll likely be wrong each time.
- mNeedsCacheLoad = false;
- long t0 = System.currentTimeMillis();
-
- Cursor cur = null;
- try {
- cur = mDatabaseHelper.getReadableDatabase().query(SSL_CACHE_TABLE,
- PROJECTION, null, null, null, null, null);
- if (cur.moveToFirst()) {
- do {
- String hostPort = cur.getString(SSL_CACHE_HOSTPORT_COL);
- String value = cur.getString(SSL_CACHE_SESSION_COL);
-
- if (hostPort == null || value == null) {
- continue;
- }
- // TODO: blob support ?
- byte[] der = Base64.decodeBase64(value.getBytes());
- mExternalCache.put(hostPort, der);
- } while (cur.moveToNext());
-
- }
- } catch (SQLException ex) {
- Log.d(TAG, "Error loading SSL cached entries ", ex);
- } finally {
- if (cur != null) {
- cur.close();
- }
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- long t1 = System.currentTimeMillis();
- Log.d(TAG, "LOADED CACHED SSL " + (t1 - t0) + " ms");
- }
- }
- }
-
- String key = host + ":" + port;
-
- return mExternalCache.get(key);
- }
- }
-
- /**
- * Reset the database and internal state.
- * Used for testing or to free space.
- */
- public void clear() {
- synchronized(this) {
- try {
- mExternalCache.clear();
- mNeedsCacheLoad = true;
- mDatabaseHelper.getWritableDatabase().delete(SSL_CACHE_TABLE,
- null, null);
- } catch (SQLException ex) {
- Log.d(TAG, "Error removing SSL cached entries ", ex);
- // ignore - nothing we can do about it
- }
- }
- }
-
- public byte[] getSessionData(byte[] id) {
- // We support client side only - the cache will do nothing for
- // server-side sessions.
- return null;
- }
-
- /** Visible for testing.
- */
- public static class DatabaseHelper extends SQLiteOpenHelper {
-
- public DatabaseHelper(Context context) {
- super(context, DATABASE_NAME, null /* factory */, DATABASE_VERSION);
- }
-
- @Override
- public void onCreate(SQLiteDatabase db) {
- db.execSQL("CREATE TABLE " + SSL_CACHE_TABLE + " (" +
- SSL_CACHE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
- SSL_CACHE_HOSTPORT + " TEXT UNIQUE ON CONFLICT REPLACE," +
- SSL_CACHE_SESSION + " TEXT," +
- SSL_CACHE_TIME_SEC + " INTEGER" +
- ");");
-
- // No index - we load on startup, index would slow down inserts.
- // If we want to scale this to lots of rows - we could use
- // index, but then we'll hit DB a bit too often ( including
- // negative hits )
- }
-
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- db.execSQL("DROP TABLE IF EXISTS " + SSL_CACHE_TABLE );
- onCreate(db);
- }
-
- }
-
-}
diff --git a/core/java/com/android/internal/net/SSLSessionCache.java b/core/java/com/android/internal/net/SSLSessionCache.java
deleted file mode 100644
index ec02fe5..0000000
--- a/core/java/com/android/internal/net/SSLSessionCache.java
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2009 The Android Open Source Project
-package com.android.internal.net;
-
-import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
-import org.apache.harmony.xnet.provider.jsse.SSLContextImpl;
-
-import java.security.KeyManagementException;
-import java.security.NoSuchAlgorithmException;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSocketFactory;
-import javax.net.ssl.TrustManager;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.provider.Settings;
-import android.util.Log;
-
-/**
- * Utility class to configure SSL session caching.
- *
- *
- *
- * {@hide}
- */
-public class SSLSessionCache {
- private static final String TAG = "SSLSessionCache";
-
- private static final String CACHE_TYPE_DB = "db";
-
- private static boolean sInitializationDone = false;
-
- // One per process
- private static DbSSLSessionCache sDbCache;
-
- /**
- * Check settings for ssl session caching.
- *
- * @return false if disabled.
- */
- public static boolean isEnabled(ContentResolver resolver) {
- String sslCache = Settings.Gservices.getString(resolver,
- Settings.Gservices.SSL_SESSION_CACHE);
-
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "enabled " + sslCache);
- }
-
- return CACHE_TYPE_DB.equals(sslCache);
- }
-
- /**
- * Return the configured session cache, or null if not enabled.
- */
- public static SSLClientSessionCache getSessionCache(Context context) {
- if (context == null) {
- return null;
- }
- if (!sInitializationDone) {
- if (isEnabled(context.getContentResolver())) {
- sDbCache = new DbSSLSessionCache(context);
- return sDbCache;
- }
- // Don't check again.
- sInitializationDone = true;
- }
- return sDbCache;
- }
-
- /**
- * Construct the factory, using default constructor if caching is disabled.
- * Refactored here to avoid duplication, used in tests.
- */
- public static SSLSocketFactory getSocketFactory(Context androidContext,
- TrustManager[] trustManager) {
- try {
- if (androidContext != null) {
- SSLClientSessionCache sessionCache = getSessionCache(androidContext);
-
- if (sessionCache != null) {
- SSLContextImpl sslContext = new SSLContextImpl();
- sslContext.engineInit(null /* kms */,
- trustManager, new java.security.SecureRandom(),
- sessionCache, null /* serverCache */);
- return sslContext.engineGetSocketFactory();
- }
- }
- // default
- SSLContext context = SSLContext.getInstance("TLS");
- context.init(null, trustManager, new java.security.SecureRandom());
- return context.getSocketFactory();
-
- } catch (NoSuchAlgorithmException e) {
- throw new AssertionError(e);
- } catch (KeyManagementException e) {
- throw new AssertionError(e);
- }
- }
-
-
-}
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 7eea8b7..558a122 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -23,7 +23,6 @@ import android.os.ParcelFormatException;
import android.os.Parcelable;
import android.os.SystemClock;
import android.util.Log;
-import android.util.Printer;
import android.util.SparseArray;
import java.io.File;
@@ -40,14 +39,14 @@ import java.util.Map;
* otherwise.
*/
public final class BatteryStatsImpl extends BatteryStats {
+
private static final String TAG = "BatteryStatsImpl";
- private static final boolean DEBUG = false;
// In-memory Parcel magic number, used to detect attempts to unmarshall bad data
private static final int MAGIC = 0xBA757475; // 'BATSTATS'
// Current on-disk Parcel version
- private static final int VERSION = 25;
+ private static final int VERSION = 23;
private final File mFile;
private final File mBackupFile;
@@ -87,11 +86,9 @@ public final class BatteryStatsImpl extends BatteryStats {
long mLastRealtime;
boolean mScreenOn;
- Timer mScreenOnTimer;
-
- boolean mPhoneOn;
- Timer mPhoneOnTimer;
-
+ long mLastScreenOnTimeMillis;
+ long mBatteryScreenOnTimeMillis;
+ long mPluggedScreenOnTimeMillis;
/**
* These provide time bases that discount the time the device is plugged
* in to power.
@@ -135,45 +132,16 @@ public final class BatteryStatsImpl extends BatteryStats {
// Times are in microseconds for better accuracy when dividing by the
// lock count, and are in "battery realtime" units.
- /**
- * The total time we have accumulated since the start of the original
- * boot, to the last time something interesting happened in the
- * current run.
- */
long mTotalTime;
-
- /**
- * The total time we loaded for the previous runs. Subtract this from
- * mTotalTime to find the time for the current run of the system.
- */
- long mLoadedTime;
-
- /**
- * The run time of the last run of the system, as loaded from the
- * saved data.
- */
- long mLastTime;
-
- /**
- * The value of mTotalTime when unplug() was last called. Subtract
- * this from mTotalTime to find the time since the last unplug from
- * power.
- */
- long mUnpluggedTime;
-
- /**
- * The last time at which we updated the timer. If mNesting is > 0,
- * subtract this from the current battery time to find the amount of
- * time we have been running since we last computed an update.
- */
+ long mLoadedTotalTime;
+ long mLastTotalTime;
long mUpdateTime;
/**
- * The total time at which the timer was acquired, to determine if
- * was actually held for an interesting duration.
+ * The value of mTotalTime when unplug() was last called, initially 0.
*/
- long mAcquireTime;
-
+ long mUnpluggedTotalTime;
+
Timer(int type, ArrayList<Timer> timerPool,
ArrayList<Unpluggable> unpluggables, Parcel in) {
mType = type;
@@ -183,10 +151,10 @@ public final class BatteryStatsImpl extends BatteryStats {
mLastCount = in.readInt();
mUnpluggedCount = in.readInt();
mTotalTime = in.readLong();
- mLoadedTime = in.readLong();
- mLastTime = in.readLong();
+ mLoadedTotalTime = in.readLong();
+ mLastTotalTime = in.readLong();
mUpdateTime = in.readLong();
- mUnpluggedTime = in.readLong();
+ mUnpluggedTotalTime = in.readLong();
unpluggables.add(this);
}
@@ -203,41 +171,21 @@ public final class BatteryStatsImpl extends BatteryStats {
out.writeInt(mLastCount);
out.writeInt(mUnpluggedCount);
out.writeLong(computeRunTimeLocked(batteryRealtime));
- out.writeLong(mLoadedTime);
- out.writeLong(mLastTime);
+ out.writeLong(mLoadedTotalTime);
+ out.writeLong(mLastTotalTime);
out.writeLong(mUpdateTime);
- out.writeLong(mUnpluggedTime);
+ out.writeLong(mUnpluggedTotalTime);
}
public void unplug(long batteryUptime, long batteryRealtime) {
- if (DEBUG && mType < 0) {
- Log.v(TAG, "unplug #" + mType + ": realtime=" + batteryRealtime
- + " old mUnpluggedTime=" + mUnpluggedTime
- + " old mUnpluggedCount=" + mUnpluggedCount);
- }
- mUnpluggedTime = computeRunTimeLocked(batteryRealtime);
+ mUnpluggedTotalTime = computeRunTimeLocked(batteryRealtime);
mUnpluggedCount = mCount;
- if (DEBUG && mType < 0) {
- Log.v(TAG, "unplug #" + mType
- + ": new mUnpluggedTime=" + mUnpluggedTime
- + " new mUnpluggedCount=" + mUnpluggedCount);
- }
}
public void plug(long batteryUptime, long batteryRealtime) {
if (mNesting > 0) {
- if (DEBUG && mType < 0) {
- Log.v(TAG, "plug #" + mType + ": realtime=" + batteryRealtime
- + " old mTotalTime=" + mTotalTime
- + " old mUpdateTime=" + mUpdateTime);
- }
mTotalTime = computeRunTimeLocked(batteryRealtime);
mUpdateTime = batteryRealtime;
- if (DEBUG && mType < 0) {
- Log.v(TAG, "plug #" + mType
- + ": new mTotalTime=" + mTotalTime
- + " old mUpdateTime=" + mUpdateTime);
- }
}
}
@@ -259,16 +207,16 @@ public final class BatteryStatsImpl extends BatteryStats {
}
@Override
- public long getTotalTime(long batteryRealtime, int which) {
+ public long getTotalTime(long now, int which) {
long val;
if (which == STATS_LAST) {
- val = mLastTime;
+ val = mLastTotalTime;
} else {
- val = computeRunTimeLocked(batteryRealtime);
+ val = computeRunTimeLocked(now);
if (which == STATS_UNPLUGGED) {
- val -= mUnpluggedTime;
+ val -= mUnpluggedTotalTime;
} else if (which != STATS_TOTAL) {
- val -= mLoadedTime;
+ val -= mLoadedTotalTime;
}
}
@@ -297,32 +245,22 @@ public final class BatteryStatsImpl extends BatteryStats {
+ " mLoadedCount=" + mLoadedCount + " mLastCount=" + mLastCount
+ " mUnpluggedCount=" + mUnpluggedCount);
Log.i("foo", "mTotalTime=" + mTotalTime
- + " mLoadedTime=" + mLoadedTime);
- Log.i("foo", "mLastTime=" + mLastTime
- + " mUnpluggedTime=" + mUnpluggedTime);
- Log.i("foo", "mUpdateTime=" + mUpdateTime
- + " mAcquireTime=" + mAcquireTime);
+ + " mLoadedTotalTime=" + mLoadedTotalTime);
+ Log.i("foo", "mLastTotalTime=" + mLastTotalTime
+ + " mUpdateTime=" + mUpdateTime);
}
void startRunningLocked(BatteryStatsImpl stats) {
if (mNesting++ == 0) {
mUpdateTime = stats.getBatteryRealtimeLocked(
SystemClock.elapsedRealtime() * 1000);
- if (mTimerPool != null) {
- // Accumulate time to all currently active timers before adding
- // this new one to the pool.
- refreshTimersLocked(stats, mTimerPool);
- // Add this timer to the active pool
- mTimerPool.add(this);
- }
+ // Accumulate time to all currently active timers before adding
+ // this new one to the pool.
+ refreshTimersLocked(stats, mTimerPool);
+ // Add this timer to the active pool
+ mTimerPool.add(this);
// Increment the count
mCount++;
- mAcquireTime = mTotalTime;
- if (DEBUG && mType < 0) {
- Log.v(TAG, "start #" + mType + ": mUpdateTime=" + mUpdateTime
- + " mTotalTime=" + mTotalTime + " mCount=" + mCount
- + " mAcquireTime=" + mAcquireTime);
- }
}
}
@@ -332,31 +270,11 @@ public final class BatteryStatsImpl extends BatteryStats {
return;
}
if (--mNesting == 0) {
- if (mTimerPool != null) {
- // Accumulate time to all active counters, scaled by the total
- // active in the pool, before taking this one out of the pool.
- refreshTimersLocked(stats, mTimerPool);
- // Remove this timer from the active pool
- mTimerPool.remove(this);
- } else {
- final long realtime = SystemClock.elapsedRealtime() * 1000;
- final long batteryRealtime = stats.getBatteryRealtimeLocked(realtime);
- mNesting = 1;
- mTotalTime = computeRunTimeLocked(batteryRealtime);
- mNesting = 0;
- }
-
- if (DEBUG && mType < 0) {
- Log.v(TAG, "stop #" + mType + ": mUpdateTime=" + mUpdateTime
- + " mTotalTime=" + mTotalTime + " mCount=" + mCount
- + " mAcquireTime=" + mAcquireTime);
- }
-
- if (mTotalTime == mAcquireTime) {
- // If there was no change in the time, then discard this
- // count. A somewhat cheezy strategy, but hey.
- mCount--;
- }
+ // Accumulate time to all active counters, scaled by the total
+ // active in the pool, before taking this one out of the pool.
+ refreshTimersLocked(stats, mTimerPool);
+ // Remove this timer from the active pool
+ mTimerPool.remove(this);
}
}
@@ -379,28 +297,24 @@ public final class BatteryStatsImpl extends BatteryStats {
private long computeRunTimeLocked(long curBatteryRealtime) {
return mTotalTime + (mNesting > 0
- ? (curBatteryRealtime - mUpdateTime)
- / (mTimerPool != null ? mTimerPool.size() : 1)
- : 0);
+ ? (curBatteryRealtime - mUpdateTime) / mTimerPool.size() : 0);
}
- void writeSummaryFromParcelLocked(Parcel out, long batteryRealtime) {
- long runTime = computeRunTimeLocked(batteryRealtime);
+ void writeSummaryFromParcelLocked(Parcel out, long curBatteryUptime) {
+ long runTime = computeRunTimeLocked(curBatteryUptime);
// Divide by 1000 for backwards compatibility
out.writeLong((runTime + 500) / 1000);
- out.writeLong(((runTime - mLoadedTime) + 500) / 1000);
+ out.writeLong(((runTime - mLoadedTotalTime) + 500) / 1000);
out.writeInt(mCount);
out.writeInt(mCount - mLoadedCount);
}
void readSummaryFromParcelLocked(Parcel in) {
// Multiply by 1000 for backwards compatibility
- mTotalTime = mLoadedTime = in.readLong() * 1000;
- mLastTime = in.readLong() * 1000;
- mUnpluggedTime = mTotalTime;
+ mTotalTime = mLoadedTotalTime = in.readLong() * 1000;
+ mLastTotalTime = in.readLong();
mCount = mLoadedCount = in.readInt();
mLastCount = in.readInt();
- mUnpluggedCount = mCount;
mNesting = 0;
}
}
@@ -443,40 +357,47 @@ public final class BatteryStatsImpl extends BatteryStats {
mUidStats.get(uid).noteStopGps();
}
- public void noteScreenOnLocked() {
+ /**
+ * When the device screen or battery state changes, update the appropriate "screen on time"
+ * counter.
+ */
+ private void updateScreenOnTimeLocked(boolean screenOn) {
if (!mScreenOn) {
- mScreenOn = true;
- mScreenOnTimer.startRunningLocked(this);
+ Log.w(TAG, "updateScreenOnTime without mScreenOn, ignored");
+ return;
}
- }
-
- public void noteScreenOffLocked() {
- if (mScreenOn) {
- mScreenOn = false;
- mScreenOnTimer.stopRunningLocked(this);
+ long now = SystemClock.elapsedRealtime();
+ long elapsed = now - mLastScreenOnTimeMillis;
+ if (mOnBattery) {
+ mBatteryScreenOnTimeMillis += elapsed;
+ } else {
+ mPluggedScreenOnTimeMillis += elapsed;
+ }
+ if (screenOn) {
+ mLastScreenOnTimeMillis = now;
}
}
- public void notePhoneOnLocked() {
- if (!mPhoneOn) {
- mPhoneOn = true;
- mPhoneOnTimer.startRunningLocked(this);
- }
+ public void noteScreenOnLocked() {
+ mScreenOn = true;
+ mLastScreenOnTimeMillis = SystemClock.elapsedRealtime();
}
- public void notePhoneOffLocked() {
- if (mPhoneOn) {
- mPhoneOn = false;
- mPhoneOnTimer.stopRunningLocked(this);
+ public void noteScreenOffLocked() {
+ if (!mScreenOn) {
+ Log.w(TAG, "noteScreenOff without mScreenOn, ignored");
+ return;
}
+ updateScreenOnTimeLocked(false);
+ mScreenOn = false;
}
- @Override public long getScreenOnTime(long batteryRealtime, int which) {
- return mScreenOnTimer.getTotalTime(batteryRealtime, which);
+ @Override public long getBatteryScreenOnTime() {
+ return mBatteryScreenOnTimeMillis;
}
- @Override public long getPhoneOnTime(long batteryRealtime, int which) {
- return mPhoneOnTimer.getTotalTime(batteryRealtime, which);
+ @Override public long getPluggedScreenOnTime() {
+ return mPluggedScreenOnTimeMillis;
}
@Override public boolean getIsOnBattery() {
@@ -1460,8 +1381,6 @@ public final class BatteryStatsImpl extends BatteryStats {
mFile = new File(filename);
mBackupFile = new File(filename + ".bak");
mStartCount++;
- mScreenOnTimer = new Timer(-1, null, mUnpluggables);
- mPhoneOnTimer = new Timer(-2, null, mUnpluggables);
mOnBattery = mOnBatteryInternal = false;
mTrackBatteryPastUptime = 0;
mTrackBatteryPastRealtime = 0;
@@ -1488,6 +1407,10 @@ public final class BatteryStatsImpl extends BatteryStats {
public void setOnBattery(boolean onBattery) {
synchronized(this) {
if (mOnBattery != onBattery) {
+ if (mScreenOn) {
+ updateScreenOnTimeLocked(true);
+ }
+
mOnBattery = mOnBatteryInternal = onBattery;
long uptime = SystemClock.uptimeMillis() * 1000;
@@ -1502,7 +1425,7 @@ public final class BatteryStatsImpl extends BatteryStats {
} else {
mTrackBatteryPastUptime += uptime - mTrackBatteryUptimeStart;
mTrackBatteryPastRealtime += realtime - mTrackBatteryRealtimeStart;
- doPlug(getBatteryUptimeLocked(uptime), getBatteryRealtimeLocked(realtime));
+ doPlug(mUnpluggedBatteryUptime, mUnpluggedBatteryRealtime);
}
if ((mLastWriteTime + (60 * 1000)) < mSecRealtime) {
if (mFile != null) {
@@ -1524,10 +1447,10 @@ public final class BatteryStatsImpl extends BatteryStats {
@Override
public long computeUptime(long curTime, int which) {
switch (which) {
- case STATS_TOTAL: return mUptime + (curTime-mUptimeStart);
- case STATS_LAST: return mLastUptime;
- case STATS_CURRENT: return (curTime-mUptimeStart);
- case STATS_UNPLUGGED: return (curTime-mTrackBatteryUptimeStart);
+ case STATS_TOTAL: return mUptime + (curTime-mUptimeStart);
+ case STATS_LAST: return mLastUptime;
+ case STATS_CURRENT: return (curTime-mUptimeStart);
+ case STATS_UNPLUGGED: return (curTime-mTrackBatteryUptimeStart);
}
return 0;
}
@@ -1535,25 +1458,26 @@ public final class BatteryStatsImpl extends BatteryStats {
@Override
public long computeRealtime(long curTime, int which) {
switch (which) {
- case STATS_TOTAL: return mRealtime + (curTime-mRealtimeStart);
- case STATS_LAST: return mLastRealtime;
- case STATS_CURRENT: return (curTime-mRealtimeStart);
- case STATS_UNPLUGGED: return (curTime-mTrackBatteryRealtimeStart);
+ case STATS_TOTAL: return mRealtime + (curTime-mRealtimeStart);
+ case STATS_LAST: return mLastRealtime;
+ case STATS_CURRENT: return (curTime-mRealtimeStart);
+ case STATS_UNPLUGGED: return (curTime-mTrackBatteryRealtimeStart);
}
return 0;
}
@Override
public long computeBatteryUptime(long curTime, int which) {
+ long uptime = getBatteryUptime(curTime);
switch (which) {
- case STATS_TOTAL:
- return mBatteryUptime + getBatteryUptime(curTime);
- case STATS_LAST:
- return mBatteryLastUptime;
- case STATS_CURRENT:
- return getBatteryUptime(curTime);
- case STATS_UNPLUGGED:
- return getBatteryUptimeLocked(curTime) - mUnpluggedBatteryUptime;
+ case STATS_TOTAL:
+ return mBatteryUptime + uptime;
+ case STATS_LAST:
+ return mBatteryLastUptime;
+ case STATS_CURRENT:
+ return uptime;
+ case STATS_UNPLUGGED:
+ return getBatteryUptimeLocked(curTime) - mUnpluggedBatteryUptime;
}
return 0;
}
@@ -1561,14 +1485,14 @@ public final class BatteryStatsImpl extends BatteryStats {
@Override
public long computeBatteryRealtime(long curTime, int which) {
switch (which) {
- case STATS_TOTAL:
- return mBatteryRealtime + getBatteryRealtimeLocked(curTime);
- case STATS_LAST:
- return mBatteryLastRealtime;
- case STATS_CURRENT:
- return getBatteryRealtimeLocked(curTime);
- case STATS_UNPLUGGED:
- return getBatteryRealtimeLocked(curTime) - mUnpluggedBatteryRealtime;
+ case STATS_TOTAL:
+ return mBatteryRealtime + getBatteryRealtimeLocked(curTime);
+ case STATS_LAST:
+ return mBatteryLastRealtime;
+ case STATS_CURRENT:
+ return getBatteryRealtimeLocked(curTime);
+ case STATS_UNPLUGGED:
+ return getBatteryRealtimeLocked(curTime) - mUnpluggedBatteryRealtime;
}
return 0;
}
@@ -1764,10 +1688,9 @@ public final class BatteryStatsImpl extends BatteryStats {
mLastRealtime = in.readLong();
mStartCount++;
+ mBatteryScreenOnTimeMillis = in.readLong();
+ mPluggedScreenOnTimeMillis = in.readLong();
mScreenOn = false;
- mScreenOnTimer.readSummaryFromParcelLocked(in);
- mPhoneOn = false;
- mPhoneOnTimer.readSummaryFromParcelLocked(in);
final int NU = in.readInt();
for (int iu = 0; iu < NU; iu++) {
@@ -1841,10 +1764,9 @@ public final class BatteryStatsImpl extends BatteryStats {
* @param out the Parcel to be written to.
*/
public void writeSummaryToParcel(Parcel out) {
+ final long NOW = getBatteryUptimeLocked();
final long NOW_SYS = SystemClock.uptimeMillis() * 1000;
final long NOWREAL_SYS = SystemClock.elapsedRealtime() * 1000;
- final long NOW = getBatteryUptimeLocked(NOW_SYS);
- final long NOWREAL = getBatteryRealtimeLocked(NOWREAL_SYS);
out.writeInt(VERSION);
@@ -1858,8 +1780,8 @@ public final class BatteryStatsImpl extends BatteryStats {
out.writeLong(computeRealtime(NOWREAL_SYS, STATS_TOTAL));
out.writeLong(computeRealtime(NOWREAL_SYS, STATS_CURRENT));
- mScreenOnTimer.writeSummaryFromParcelLocked(out, NOWREAL);
- mPhoneOnTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+ out.writeLong(mBatteryScreenOnTimeMillis);
+ out.writeLong(mPluggedScreenOnTimeMillis);
final int NU = mUidStats.size();
out.writeInt(NU);
@@ -1876,19 +1798,19 @@ public final class BatteryStatsImpl extends BatteryStats {
Uid.Wakelock wl = ent.getValue();
if (wl.mTimerFull != null) {
out.writeInt(1);
- wl.mTimerFull.writeSummaryFromParcelLocked(out, NOWREAL);
+ wl.mTimerFull.writeSummaryFromParcelLocked(out, NOW);
} else {
out.writeInt(0);
}
if (wl.mTimerPartial != null) {
out.writeInt(1);
- wl.mTimerPartial.writeSummaryFromParcelLocked(out, NOWREAL);
+ wl.mTimerPartial.writeSummaryFromParcelLocked(out, NOW);
} else {
out.writeInt(0);
}
if (wl.mTimerWindow != null) {
out.writeInt(1);
- wl.mTimerWindow.writeSummaryFromParcelLocked(out, NOWREAL);
+ wl.mTimerWindow.writeSummaryFromParcelLocked(out, NOW);
} else {
out.writeInt(0);
}
@@ -1904,7 +1826,7 @@ public final class BatteryStatsImpl extends BatteryStats {
Uid.Sensor se = ent.getValue();
if (se.mTimer != null) {
out.writeInt(1);
- se.mTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+ se.mTimer.writeSummaryFromParcelLocked(out, NOW);
} else {
out.writeInt(0);
}
@@ -1975,10 +1897,9 @@ public final class BatteryStatsImpl extends BatteryStats {
mBatteryLastUptime = in.readLong();
mBatteryRealtime = in.readLong();
mBatteryLastRealtime = in.readLong();
+ mBatteryScreenOnTimeMillis = in.readLong();
+ mPluggedScreenOnTimeMillis = in.readLong();
mScreenOn = false;
- mScreenOnTimer = new Timer(-1, null, mUnpluggables, in);
- mPhoneOn = false;
- mPhoneOnTimer = new Timer(-2, null, mUnpluggables, in);
mUptime = in.readLong();
mUptimeStart = in.readLong();
mLastUptime = in.readLong();
@@ -1991,8 +1912,6 @@ public final class BatteryStatsImpl extends BatteryStats {
mTrackBatteryUptimeStart = in.readLong();
mTrackBatteryPastRealtime = in.readLong();
mTrackBatteryRealtimeStart = in.readLong();
- mUnpluggedBatteryUptime = in.readLong();
- mUnpluggedBatteryRealtime = in.readLong();
mLastWriteTime = in.readLong();
mPartialTimers.clear();
@@ -2026,8 +1945,8 @@ public final class BatteryStatsImpl extends BatteryStats {
out.writeLong(mBatteryLastUptime);
out.writeLong(mBatteryRealtime);
out.writeLong(mBatteryLastRealtime);
- mScreenOnTimer.writeToParcel(out, batteryRealtime);
- mPhoneOnTimer.writeToParcel(out, batteryRealtime);
+ out.writeLong(mBatteryScreenOnTimeMillis);
+ out.writeLong(mPluggedScreenOnTimeMillis);
out.writeLong(mUptime);
out.writeLong(mUptimeStart);
out.writeLong(mLastUptime);
@@ -2035,12 +1954,10 @@ public final class BatteryStatsImpl extends BatteryStats {
out.writeLong(mRealtimeStart);
out.writeLong(mLastRealtime);
out.writeInt(mOnBattery ? 1 : 0);
- out.writeLong(batteryUptime);
+ out.writeLong(mTrackBatteryPastUptime);
out.writeLong(mTrackBatteryUptimeStart);
- out.writeLong(batteryRealtime);
+ out.writeLong(mTrackBatteryPastRealtime);
out.writeLong(mTrackBatteryRealtimeStart);
- out.writeLong(mUnpluggedBatteryUptime);
- out.writeLong(mUnpluggedBatteryRealtime);
out.writeLong(mLastWriteTime);
int size = mUidStats.size();
@@ -2063,14 +1980,4 @@ public final class BatteryStatsImpl extends BatteryStats {
return new BatteryStatsImpl[size];
}
};
-
- public void dumpLocked(Printer pw) {
- if (DEBUG) {
- Log.i(TAG, "*** Screen timer:");
- mScreenOnTimer.logState();
- Log.i(TAG, "*** Phone timer:");
- mPhoneOnTimer.logState();
- }
- super.dumpLocked(pw);
- }
}
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index ac8b589..f21b62f 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -19,7 +19,6 @@ package com.android.internal.os;
import android.content.pm.ActivityInfo;
import android.content.res.Resources;
import android.content.res.TypedArray;
-import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
import android.net.LocalServerSocket;
import android.os.Debug;
@@ -336,18 +335,32 @@ public class ZygoteInit {
mResources.startPreloading();
if (PRELOAD_RESOURCES) {
Log.i(TAG, "Preloading resources...");
-
long startTime = SystemClock.uptimeMillis();
TypedArray ar = mResources.obtainTypedArray(
com.android.internal.R.array.preloaded_drawables);
- int N = preloadDrawables(runtime, ar);
- Log.i(TAG, "...preloaded " + N + " resources in "
- + (SystemClock.uptimeMillis()-startTime) + "ms.");
-
- startTime = SystemClock.uptimeMillis();
- ar = mResources.obtainTypedArray(
- com.android.internal.R.array.preloaded_color_state_lists);
- N = preloadColorStateLists(runtime, ar);
+ int N = ar.length();
+ for (int i=0; i<N; i++) {
+ if (Debug.getGlobalAllocSize() > PRELOAD_GC_THRESHOLD) {
+ if (Config.LOGV) {
+ Log.v(TAG, " GC at " + Debug.getGlobalAllocSize());
+ }
+ runtime.gcSoftReferences();
+ runtime.runFinalizationSync();
+ Debug.resetGlobalAllocSize();
+ }
+ int id = ar.getResourceId(i, 0);
+ if (Config.LOGV) {
+ Log.v(TAG, "Preloading resource #" + Integer.toHexString(id));
+ }
+ if (id != 0) {
+ Drawable dr = mResources.getDrawable(id);
+ if ((dr.getChangingConfigurations()&~ActivityInfo.CONFIG_FONT_SCALE) != 0) {
+ Log.w(TAG, "Preloaded drawable resource #0x"
+ + Integer.toHexString(id)
+ + " that varies with configuration!!");
+ }
+ }
+ }
Log.i(TAG, "...preloaded " + N + " resources in "
+ (SystemClock.uptimeMillis()-startTime) + "ms.");
}
@@ -359,56 +372,6 @@ public class ZygoteInit {
}
}
- private static int preloadColorStateLists(VMRuntime runtime, TypedArray ar) {
- int N = ar.length();
- for (int i=0; i<N; i++) {
- if (Debug.getGlobalAllocSize() > PRELOAD_GC_THRESHOLD) {
- if (Config.LOGV) {
- Log.v(TAG, " GC at " + Debug.getGlobalAllocSize());
- }
- runtime.gcSoftReferences();
- runtime.runFinalizationSync();
- Debug.resetGlobalAllocSize();
- }
- int id = ar.getResourceId(i, 0);
- if (Config.LOGV) {
- Log.v(TAG, "Preloading resource #" + Integer.toHexString(id));
- }
- if (id != 0) {
- mResources.getColorStateList(id);
- }
- }
- return N;
- }
-
-
- private static int preloadDrawables(VMRuntime runtime, TypedArray ar) {
- int N = ar.length();
- for (int i=0; i<N; i++) {
- if (Debug.getGlobalAllocSize() > PRELOAD_GC_THRESHOLD) {
- if (Config.LOGV) {
- Log.v(TAG, " GC at " + Debug.getGlobalAllocSize());
- }
- runtime.gcSoftReferences();
- runtime.runFinalizationSync();
- Debug.resetGlobalAllocSize();
- }
- int id = ar.getResourceId(i, 0);
- if (Config.LOGV) {
- Log.v(TAG, "Preloading resource #" + Integer.toHexString(id));
- }
- if (id != 0) {
- Drawable dr = mResources.getDrawable(id);
- if ((dr.getChangingConfigurations()&~ActivityInfo.CONFIG_FONT_SCALE) != 0) {
- Log.w(TAG, "Preloaded drawable resource #0x"
- + Integer.toHexString(id)
- + " (" + ar.getString(i) + ") that varies with configuration!!");
- }
- }
- }
- return N;
- }
-
/**
* Runs several special GCs to try to clean up a few generations of
* softly- and final-reachable objects, along with any other garbage.
diff --git a/core/java/com/android/internal/view/IInputConnectionWrapper.java b/core/java/com/android/internal/view/IInputConnectionWrapper.java
index 8e65177..4f98cee 100644
--- a/core/java/com/android/internal/view/IInputConnectionWrapper.java
+++ b/core/java/com/android/internal/view/IInputConnectionWrapper.java
@@ -23,8 +23,7 @@ public class IInputConnectionWrapper extends IInputContext.Stub {
private static final int DO_COMMIT_TEXT = 50;
private static final int DO_COMMIT_COMPLETION = 55;
private static final int DO_SET_SELECTION = 57;
- private static final int DO_PERFORM_EDITOR_ACTION = 58;
- private static final int DO_PERFORM_CONTEXT_MENU_ACTION = 59;
+ private static final int DO_PERFORM_CONTEXT_MENU_ACTION = 58;
private static final int DO_SET_COMPOSING_TEXT = 60;
private static final int DO_FINISH_COMPOSING_TEXT = 65;
private static final int DO_SEND_KEY_EVENT = 70;
@@ -98,10 +97,6 @@ public class IInputConnectionWrapper extends IInputContext.Stub {
dispatchMessage(obtainMessageII(DO_SET_SELECTION, start, end));
}
- public void performEditorAction(int id) {
- dispatchMessage(obtainMessageII(DO_PERFORM_EDITOR_ACTION, id, 0));
- }
-
public void performContextMenuAction(int id) {
dispatchMessage(obtainMessageII(DO_PERFORM_CONTEXT_MENU_ACTION, id, 0));
}
@@ -240,15 +235,6 @@ public class IInputConnectionWrapper extends IInputContext.Stub {
ic.setSelection(msg.arg1, msg.arg2);
return;
}
- case DO_PERFORM_EDITOR_ACTION: {
- InputConnection ic = mInputConnection.get();
- if (ic == null || !isActive()) {
- Log.w(TAG, "performEditorAction on inactive InputConnection");
- return;
- }
- ic.performEditorAction(msg.arg1);
- return;
- }
case DO_PERFORM_CONTEXT_MENU_ACTION: {
InputConnection ic = mInputConnection.get();
if (ic == null || !isActive()) {
diff --git a/core/java/com/android/internal/view/IInputContext.aidl b/core/java/com/android/internal/view/IInputContext.aidl
index 02cb9e4..02b6044 100644
--- a/core/java/com/android/internal/view/IInputContext.aidl
+++ b/core/java/com/android/internal/view/IInputContext.aidl
@@ -50,8 +50,6 @@ import com.android.internal.view.IInputContextCallback;
void setSelection(int start, int end);
- void performEditorAction(int actionCode);
-
void performContextMenuAction(int id);
void beginBatchEdit();
diff --git a/core/java/com/android/internal/view/InputConnectionWrapper.java b/core/java/com/android/internal/view/InputConnectionWrapper.java
index b92cb45..32d9f3d 100644
--- a/core/java/com/android/internal/view/InputConnectionWrapper.java
+++ b/core/java/com/android/internal/view/InputConnectionWrapper.java
@@ -250,15 +250,6 @@ public class InputConnectionWrapper implements InputConnection {
}
}
- public boolean performEditorAction(int actionCode) {
- try {
- mIInputContext.performEditorAction(actionCode);
- return true;
- } catch (RemoteException e) {
- return false;
- }
- }
-
public boolean performContextMenuAction(int id) {
try {
mIInputContext.performContextMenuAction(id);
diff --git a/core/java/com/android/internal/view/menu/ExpandedMenuView.java b/core/java/com/android/internal/view/menu/ExpandedMenuView.java
index 9e4b4ce..c16c165 100644
--- a/core/java/com/android/internal/view/menu/ExpandedMenuView.java
+++ b/core/java/com/android/internal/view/menu/ExpandedMenuView.java
@@ -80,11 +80,6 @@ public final class ExpandedMenuView extends ListView implements ItemInvoker, Men
setChildrenDrawingCacheEnabled(false);
}
- @Override
- protected boolean recycleOnMeasure() {
- return false;
- }
-
public boolean invokeItem(MenuItemImpl item) {
return mMenu.performItemAction(item, 0);
}
diff --git a/core/java/com/android/internal/widget/EditableInputConnection.java b/core/java/com/android/internal/widget/EditableInputConnection.java
index f2ec064..44cf0ed 100644
--- a/core/java/com/android/internal/widget/EditableInputConnection.java
+++ b/core/java/com/android/internal/widget/EditableInputConnection.java
@@ -59,14 +59,7 @@ public class EditableInputConnection extends BaseInputConnection {
final Editable content = getEditable();
if (content == null) return false;
KeyListener kl = mTextView.getKeyListener();
- if (kl != null) {
- try {
- kl.clearMetaKeyState(mTextView, content, states);
- } catch (AbstractMethodError e) {
- // This is an old listener that doesn't implement the
- // new method.
- }
- }
+ if (kl != null) kl.clearMetaKeyState(mTextView, content, states);
return true;
}
@@ -78,12 +71,6 @@ public class EditableInputConnection extends BaseInputConnection {
return true;
}
- public boolean performEditorAction(int actionCode) {
- if (DEBUG) Log.v(TAG, "performEditorAction " + actionCode);
- mTextView.onEditorAction(actionCode);
- return true;
- }
-
public boolean performContextMenuAction(int id) {
if (DEBUG) Log.v(TAG, "performContextMenuAction " + id);
mTextView.beginBatchEdit();
diff --git a/core/java/com/android/internal/widget/TextProgressBar.java b/core/java/com/android/internal/widget/TextProgressBar.java
index aee7b76..5bf4601 100644
--- a/core/java/com/android/internal/widget/TextProgressBar.java
+++ b/core/java/com/android/internal/widget/TextProgressBar.java
@@ -115,10 +115,8 @@ public class TextProgressBar extends RelativeLayout implements OnChronometerTick
// Update the ProgressBar maximum relative to Chronometer base
mDuration = (int) (durationBase - mChronometer.getBase());
- if (mDuration <= 0) {
- mDuration = 1;
- }
mProgressBar.setMax(mDuration);
+
}
/**
diff --git a/core/java/com/google/android/gdata/client/AndroidGDataClient.java b/core/java/com/google/android/gdata/client/AndroidGDataClient.java
index fe7d860..1d8e9c5 100644
--- a/core/java/com/google/android/gdata/client/AndroidGDataClient.java
+++ b/core/java/com/google/android/gdata/client/AndroidGDataClient.java
@@ -21,7 +21,6 @@ import org.apache.http.entity.InputStreamEntity;
import org.apache.http.entity.AbstractHttpEntity;
import android.content.ContentResolver;
-import android.content.Context;
import android.net.http.AndroidHttpClient;
import android.text.TextUtils;
import android.util.Config;
@@ -118,28 +117,16 @@ public class AndroidGDataClient implements GDataClient {
}
/**
- * @deprecated Use AndroidGDAtaClient(Context) instead.
- */
- public AndroidGDataClient(ContentResolver resolver) {
- mHttpClient = new GoogleHttpClient(resolver, USER_AGENT_APP_VERSION,
- true /* gzip capable */);
- mHttpClient.enableCurlLogging(TAG, Log.VERBOSE);
- mResolver = resolver;
- }
-
- /**
* Creates a new AndroidGDataClient.
*
- * @param context The ContentResolver to get URL rewriting rules from
+ * @param resolver The ContentResolver to get URL rewriting rules from
* through the Android proxy server, using null to indicate not using proxy.
- * The context will also be used by GoogleHttpClient for configuration of
- * SSL session persistence.
*/
- public AndroidGDataClient(Context context) {
- mHttpClient = new GoogleHttpClient(context, USER_AGENT_APP_VERSION,
+ public AndroidGDataClient(ContentResolver resolver) {
+ mHttpClient = new GoogleHttpClient(resolver, USER_AGENT_APP_VERSION,
true /* gzip capable */);
mHttpClient.enableCurlLogging(TAG, Log.VERBOSE);
- mResolver = context.getContentResolver();
+ mResolver = resolver;
}
public void close() {
diff --git a/core/java/com/google/android/net/GoogleHttpClient.java b/core/java/com/google/android/net/GoogleHttpClient.java
index ae78ba8..2fcb0c3 100644
--- a/core/java/com/google/android/net/GoogleHttpClient.java
+++ b/core/java/com/google/android/net/GoogleHttpClient.java
@@ -16,12 +16,8 @@
package com.google.android.net;
-import com.android.internal.net.DbSSLSessionCache;
-import com.android.internal.net.SSLSessionCache;
-
import android.content.ContentResolver;
import android.content.ContentValues;
-import android.content.Context;
import android.net.http.AndroidHttpClient;
import android.os.Build;
import android.os.NetStat;
@@ -83,24 +79,6 @@ public class GoogleHttpClient implements HttpClient {
}
/**
- * GoogleHttpClient(Context, String, boolean) - without SSL session
- * persistence.
- *
- * @deprecated use Context instead of ContentResolver.
- */
- public GoogleHttpClient(ContentResolver resolver, String appAndVersion,
- boolean gzipCapable) {
- String userAgent = appAndVersion
- + " (" + Build.DEVICE + " " + Build.ID + ")";
- if (gzipCapable) {
- userAgent = userAgent + "; gzip";
- }
- mClient = AndroidHttpClient.newInstance(userAgent);
- mResolver = resolver;
- mUserAgent = userAgent;
- }
-
- /**
* Create an HTTP client. Normaly this client is shared throughout an app.
* The HTTP client will construct its User-Agent as follows:
*
@@ -109,10 +87,7 @@ public class GoogleHttpClient implements HttpClient {
* <appAndVersion> (<build device> <build id>); gzip
* (if gzip capable)
*
- * The context has settings for URL rewriting rules and is used to enable
- * SSL session persistence.
- *
- * @param context application context.
+ * @param resolver to use for acccessing URL rewriting rules.
* @param appAndVersion Base app and version to use in the User-Agent.
* e.g., "MyApp/1.0"
* @param gzipCapable Whether or not this client is able to consume gzip'd
@@ -120,18 +95,15 @@ public class GoogleHttpClient implements HttpClient {
* headers. Needed because Google servers require gzip in the User-Agent
* in order to return gzip'd content.
*/
- public GoogleHttpClient(Context context, String appAndVersion,
- boolean gzipCapable) {
-
+ public GoogleHttpClient(ContentResolver resolver, String appAndVersion,
+ boolean gzipCapable) {
String userAgent = appAndVersion
+ " (" + Build.DEVICE + " " + Build.ID + ")";
if (gzipCapable) {
userAgent = userAgent + "; gzip";
}
- mClient = AndroidHttpClient.newInstance(userAgent,
- SSLSessionCache.getSessionCache(context));
-
- mResolver = context.getContentResolver();
+ mClient = AndroidHttpClient.newInstance(userAgent);
+ mResolver = resolver;
mUserAgent = userAgent;
}
diff --git a/core/jni/android_database_SQLiteDatabase.cpp b/core/jni/android_database_SQLiteDatabase.cpp
index 66858f9..66f0118 100644
--- a/core/jni/android_database_SQLiteDatabase.cpp
+++ b/core/jni/android_database_SQLiteDatabase.cpp
@@ -45,8 +45,6 @@
#define INVALID_VERSION -1
#define SQLITE_SOFT_HEAP_LIMIT (4 * 1024 * 1024)
#define ANDROID_TABLE "android_metadata"
-/* uncomment the next line to force-enable logging of all statements */
-// #define DB_LOG_STATEMENTS
namespace android {
@@ -199,11 +197,7 @@ static void native_execSQL(JNIEnv* env, jobject object, jstring sqlString)
env->ReleaseStringUTFChars(sqlString, sql8);
}
- } else
-#ifndef DB_LOG_STATEMENTS
- IF_LOGV()
-#endif
- {
+ } else IF_LOGV() {
char const * sql8 = env->GetStringUTFChars(sqlString, NULL);
LOGV("Success on %p when executing '%s'\n", handle, sql8);
env->ReleaseStringUTFChars(sqlString, sql8);
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index f6cd211..2f1f9b8 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -15,9 +15,7 @@
** limitations under the License.
*/
-//#define LOG_NDEBUG 0
#define LOG_TAG "Camera-JNI"
-#include <utils/Log.h>
#include "jni.h"
#include "JNIHelp.h"
@@ -47,43 +45,38 @@ enum CameraError {
struct fields_t {
jfieldID context;
jfieldID surface;
+ jfieldID listener_context;
jmethodID post_event;
};
static fields_t fields;
static Mutex sLock;
+static jclass sCameraClass;
-struct camera_context_t {
- jobject mCameraJObjectWeak; // weak reference to java object
- jclass mCameraJClass; // strong reference to java class
- sp<Camera> mCamera; // strong reference to native object
+struct callback_cookie {
+ jobject camera_ref;
};
-sp<Camera> get_native_camera(JNIEnv *env, jobject thiz, camera_context_t** pContext)
+sp<Camera> get_native_camera(JNIEnv *env, jobject thiz)
{
- sp<Camera> camera;
Mutex::Autolock _l(sLock);
- camera_context_t* context = reinterpret_cast<camera_context_t*>(env->GetIntField(thiz, fields.context));
- if (context != NULL) {
- camera = context->mCamera;
- }
- LOGV("get_native_camera: context=%p, camera=%p", context, camera.get());
- if (camera == 0) {
+ sp<Camera> c = reinterpret_cast<Camera*>(env->GetIntField(thiz, fields.context));
+ if (c == 0)
jniThrowException(env, "java/lang/RuntimeException", "Method called after release()");
- }
- if (pContext != NULL) *pContext = context;
- return camera;
+ return c;
}
static void err_callback(status_t err, void *cookie)
{
- camera_context_t* context = reinterpret_cast<camera_context_t*>(cookie);
- if ((context == NULL) || (context->mCamera == 0)) return;
-
- LOGV("err_callback: context=%p, camera=%p", context, context->mCamera.get());
-
+ JNIEnv *env = AndroidRuntime::getJNIEnv();
+ if (env == NULL) {
+ LOGE("err_callback on dead VM");
+ return;
+ }
+ callback_cookie *c = (callback_cookie *)cookie;
int error;
+
switch (err) {
case DEAD_OBJECT:
error = kCameraErrorMediaServer;
@@ -92,32 +85,29 @@ static void err_callback(status_t err, void *cookie)
error = kCameraErrorUnknown;
break;
}
+ LOGV("err_callback: camera_ref=%x, cookie=%x", (int)c->camera_ref, (int)cookie);
- JNIEnv *env = AndroidRuntime::getJNIEnv();
- if (env == NULL) {
- LOGE("err_callback on dead VM");
- return;
- }
- env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event,
- context->mCameraJObjectWeak, kErrorCallback, error, 0, NULL);
+ env->CallStaticVoidMethod(sCameraClass, fields.post_event,
+ c->camera_ref, kErrorCallback, error, 0, NULL);
}
// connect to camera service
static void android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz, jobject weak_this)
{
- sp<Camera> camera = Camera::connect();
+ sp<Camera> c = Camera::connect();
- if (camera == NULL) {
+ if (c == NULL) {
jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
return;
}
// make sure camera hardware is alive
- if (camera->getStatus() != NO_ERROR) {
+ if (c->getStatus() != NO_ERROR) {
jniThrowException(env, "java/io/IOException", "Camera initialization failed");
return;
}
+ callback_cookie *cookie = new callback_cookie;
jclass clazz = env->GetObjectClass(thiz);
if (clazz == NULL) {
LOGE("Can't find android/hardware/Camera");
@@ -128,84 +118,71 @@ static void android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz, jobj
// We use a weak reference so the Camera object can be garbage collected.
// The reference is only used as a proxy for callbacks.
- camera_context_t* context = new camera_context_t;
- context->mCameraJObjectWeak = env->NewGlobalRef(weak_this);
- context->mCameraJClass = (jclass)env->NewGlobalRef(clazz);
- context->mCamera = camera;
+ cookie->camera_ref = env->NewGlobalRef(weak_this);
+ env->SetIntField(thiz, fields.listener_context, (int)cookie);
+
+ LOGV("native_setup: camera_ref=%x, camera_obj=%x, cookie=%x", (int)cookie->camera_ref, (int)thiz, (int)cookie);
- // save context in opaque field
- env->SetIntField(thiz, fields.context, (int)context);
+ // save camera object in opaque field
+ env->SetIntField(thiz, fields.context, reinterpret_cast<int>(c.get()));
- LOGV("native_setup: mCameraJObjectWeak=%x, camera_obj=%x, context=%p",
- (int)context->mCameraJObjectWeak, (int)thiz, context);
+ c->setErrorCallback(err_callback, cookie);
- // set error callback
- camera->setErrorCallback(err_callback, context);
+ // hold a strong reference so the camera doesn't go away while the app is still running
+ c->incStrong(thiz);
}
// disconnect from camera service
-// It's okay to call this when the native camera context is already null.
-// This handles the case where the user has called release() and the
-// finalizer is invoked later.
static void android_hardware_Camera_release(JNIEnv *env, jobject thiz)
{
- camera_context_t* context = NULL;
- sp<Camera> camera;
- {
- Mutex::Autolock _l(sLock);
- context = reinterpret_cast<camera_context_t*>(env->GetIntField(thiz, fields.context));
-
- // Make sure we do not attempt to callback on a deleted Java object.
+ Mutex::Autolock _l(sLock);
+ sp<Camera> c = reinterpret_cast<Camera*>(env->GetIntField(thiz, fields.context));
+ // It's okay to call this when the native camera context is already null.
+ // This handles the case where the user has called release() and the
+ // finalizer is invoked later.
+ if (c != 0) {
+ // Make sure that we do not attempt to deliver an eror callback on a deleted
+ // Java object.
+ c->setErrorCallback(NULL, NULL);
+ c->disconnect();
+
+ // remove our strong reference created in native setup
+ c->decStrong(thiz);
env->SetIntField(thiz, fields.context, 0);
- }
- // clean up if release has not been called before
- if (context != NULL) {
- camera = context->mCamera;
- context->mCamera.clear();
- LOGV("native_release: context=%p camera=%p", context, camera.get());
-
- // clear callbacks
- if (camera != NULL) {
- camera->setPreviewCallback(NULL, NULL, FRAME_CALLBACK_FLAG_NOOP);
- camera->setErrorCallback(NULL, NULL);
- camera->disconnect();
- env->DeleteGlobalRef(context->mCameraJObjectWeak);
- env->DeleteGlobalRef(context->mCameraJClass);
- }
+ callback_cookie *cookie = (callback_cookie *)env->GetIntField(thiz, fields.listener_context);
+
+ LOGV("release: camera_ref=%x, camera_obj=%x, cookie=%x", (int)cookie->camera_ref, (int)thiz, (int)cookie);
- // remove context to prevent further Java access
- delete context;
+ if (cookie) {
+ env->DeleteGlobalRef(cookie->camera_ref);
+ delete cookie;
+ env->SetIntField(thiz, fields.listener_context, 0);
+ }
}
}
-static void android_hardware_Camera_setPreviewDisplay(JNIEnv *env, jobject thiz, jobject jSurface)
+static void android_hardware_Camera_setPreviewDisplay(JNIEnv *env, jobject thiz, jobject surface)
{
- LOGV("setPreviewDisplay");
- sp<Camera> camera = get_native_camera(env, thiz, NULL);
- if (camera == 0) return;
+ sp<Camera> c = get_native_camera(env, thiz);
+ if (c == 0)
+ return;
- sp<Surface> surface = reinterpret_cast<Surface*>(env->GetIntField(jSurface, fields.surface));
- if (camera->setPreviewDisplay(surface) != NO_ERROR) {
+ sp<Surface> s = (Surface *)env->GetIntField(surface, fields.surface);
+ if (c->setPreviewDisplay(s) != NO_ERROR) {
jniThrowException(env, "java/io/IOException", "setPreviewDisplay failed");
+ return;
}
}
static void preview_callback(const sp<IMemory>& mem, void *cookie)
{
- LOGV("preview_callback");
JNIEnv *env = AndroidRuntime::getJNIEnv();
if (env == NULL) {
LOGE("preview_callback on dead VM");
return;
}
- camera_context_t* context = reinterpret_cast<camera_context_t*>(cookie);
- if ((context == NULL) || (context->mCamera == 0)) {
- LOGW("context or camera is NULL in preview_callback");
- return;
- }
- LOGV("native_release: context=%p camera=%p", context, context->mCamera.get());
-
+ callback_cookie *c = (callback_cookie *)cookie;
int arg1 = 0, arg2 = 0;
jobject obj = NULL;
@@ -228,18 +205,18 @@ static void preview_callback(const sp<IMemory>& mem, void *cookie)
obj = array;
- env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event,
- context->mCameraJObjectWeak, kPreviewCallback, arg1, arg2, obj);
+ env->CallStaticVoidMethod(sCameraClass, fields.post_event,
+ c->camera_ref, kPreviewCallback, arg1, arg2, obj);
env->DeleteLocalRef(array);
}
static void android_hardware_Camera_startPreview(JNIEnv *env, jobject thiz)
{
- LOGV("startPreview");
- sp<Camera> camera = get_native_camera(env, thiz, NULL);
- if (camera == 0) return;
+ sp<Camera> c = get_native_camera(env, thiz);
+ if (c == 0)
+ return;
- if (camera->startPreview() != NO_ERROR) {
+ if (c->startPreview() != NO_ERROR) {
jniThrowException(env, "java/io/IOException", "startPreview failed");
return;
}
@@ -247,30 +224,32 @@ static void android_hardware_Camera_startPreview(JNIEnv *env, jobject thiz)
static void android_hardware_Camera_stopPreview(JNIEnv *env, jobject thiz)
{
- LOGV("stopPreview");
- sp<Camera> c = get_native_camera(env, thiz, NULL);
- if (c == 0) return;
+ sp<Camera> c = get_native_camera(env, thiz);
+ if (c == 0)
+ return;
c->stopPreview();
}
static bool android_hardware_Camera_previewEnabled(JNIEnv *env, jobject thiz)
{
- LOGV("previewEnabled");
- sp<Camera> c = get_native_camera(env, thiz, NULL);
- if (c == 0) return false;
+ sp<Camera> c = get_native_camera(env, thiz);
+ if (c == 0)
+ return false;
return c->previewEnabled();
}
static void android_hardware_Camera_setHasPreviewCallback(JNIEnv *env, jobject thiz, jboolean installed, jboolean oneshot)
{
+ sp<Camera> c = get_native_camera(env, thiz);
+ if (c == 0)
+ return;
+
// Important: Only install preview_callback if the Java code has called
// setPreviewCallback() with a non-null value, otherwise we'd pay to memcpy
// each preview frame for nothing.
- camera_context_t* context;
- sp<Camera> camera = get_native_camera(env, thiz, &context);
- if (camera == 0) return;
+ callback_cookie *cookie = (callback_cookie *)env->GetIntField(thiz, fields.listener_context);
int callback_flag;
if (installed) {
@@ -278,31 +257,29 @@ static void android_hardware_Camera_setHasPreviewCallback(JNIEnv *env, jobject t
} else {
callback_flag = FRAME_CALLBACK_FLAG_NOOP;
}
- camera->setPreviewCallback(installed ? preview_callback : NULL, context, callback_flag);
+ c->setPreviewCallback(installed ? preview_callback : NULL, cookie, callback_flag);
}
static void autofocus_callback_impl(bool success, void *cookie)
{
- LOGV("autoFocusCallback");
- camera_context_t* context = reinterpret_cast<camera_context_t*>(cookie);
-
JNIEnv *env = AndroidRuntime::getJNIEnv();
if (env == NULL) {
LOGE("autofocus_callback on dead VM");
return;
}
- env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event,
- context->mCameraJObjectWeak, kAutoFocusCallback, success, 0, NULL);
+ callback_cookie *c = (callback_cookie *)cookie;
+ env->CallStaticVoidMethod(sCameraClass, fields.post_event,
+ c->camera_ref, kAutoFocusCallback,
+ success, 0, NULL);
}
static void android_hardware_Camera_autoFocus(JNIEnv *env, jobject thiz)
{
- LOGV("autoFocus");
- camera_context_t* context;
- sp<Camera> c = get_native_camera(env, thiz, &context);
- if (c == 0) return;
-
- c->setAutoFocusCallback(autofocus_callback_impl, context);
+ sp<Camera> c = get_native_camera(env, thiz);
+ if (c == 0)
+ return;
+ callback_cookie *cookie = (callback_cookie *)env->GetIntField(thiz, fields.listener_context);
+ c->setAutoFocusCallback(autofocus_callback_impl, cookie);
if (c->autoFocus() != NO_ERROR) {
jniThrowException(env, "java/io/IOException", "autoFocus failed");
}
@@ -310,20 +287,18 @@ static void android_hardware_Camera_autoFocus(JNIEnv *env, jobject thiz)
static void jpeg_callback(const sp<IMemory>& mem, void *cookie)
{
- LOGV("jpegCallback");
- camera_context_t* context = reinterpret_cast<camera_context_t*>(cookie);
-
JNIEnv *env = AndroidRuntime::getJNIEnv();
if (env == NULL) {
LOGE("jpeg`_callback on dead VM");
return;
}
+ callback_cookie *c = (callback_cookie *)cookie;
int arg1 = 0, arg2 = 0;
jobject obj = NULL;
if (mem == NULL) {
- env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event,
- context->mCameraJObjectWeak, kJpegCallback, arg1, arg2, NULL);
+ env->CallStaticVoidMethod(sCameraClass, fields.post_event,
+ c->camera_ref, kJpegCallback, arg1, arg2, NULL);
return;
}
ssize_t offset;
@@ -352,51 +327,48 @@ static void jpeg_callback(const sp<IMemory>& mem, void *cookie)
obj = array;
- env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event,
- context->mCameraJObjectWeak, kJpegCallback, arg1, arg2, obj);
+ env->CallStaticVoidMethod(sCameraClass, fields.post_event,
+ c->camera_ref, kJpegCallback, arg1, arg2, obj);
env->DeleteLocalRef(array);
}
static void shutter_callback_impl(void *cookie)
{
- LOGV("shutterCallback");
- camera_context_t* context = reinterpret_cast<camera_context_t*>(cookie);
-
JNIEnv *env = AndroidRuntime::getJNIEnv();
if (env == NULL) {
LOGE("shutter_callback on dead VM");
return;
}
- env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event,
- context->mCameraJObjectWeak, kShutterCallback, 0, 0, NULL);
+ callback_cookie *c = (callback_cookie *)cookie;
+ env->CallStaticVoidMethod(sCameraClass, fields.post_event,
+ c->camera_ref, kShutterCallback, 0, 0, NULL);
}
static void raw_callback(const sp<IMemory>& mem __attribute__((unused)),
void *cookie)
{
- LOGV("rawCallback");
- camera_context_t* context = reinterpret_cast<camera_context_t*>(cookie);
-
JNIEnv *env = AndroidRuntime::getJNIEnv();
if (env == NULL) {
LOGE("raw_callback on dead VM");
return;
}
- env->CallStaticVoidMethod(context->mCameraJClass, fields.post_event,
- context->mCameraJObjectWeak, kRawCallback, 0, 0, NULL);
+ callback_cookie *c = (callback_cookie *)cookie;
+ env->CallStaticVoidMethod(sCameraClass, fields.post_event,
+ c->camera_ref, kRawCallback, 0, 0, NULL);
}
static void android_hardware_Camera_takePicture(JNIEnv *env, jobject thiz)
{
- LOGV("takePicture");
- camera_context_t* context;
- sp<Camera> camera = get_native_camera(env, thiz, &context);
- if (camera == 0) return;
-
- camera->setShutterCallback(shutter_callback_impl, context);
- camera->setRawCallback(raw_callback, context);
- camera->setJpegCallback(jpeg_callback, context);
- if (camera->takePicture() != NO_ERROR) {
+ sp<Camera> c = get_native_camera(env, thiz);
+ if (c == 0)
+ return;
+
+ callback_cookie *cookie =
+ (callback_cookie *)env->GetIntField(thiz, fields.listener_context);
+ c->setShutterCallback(shutter_callback_impl, cookie);
+ c->setRawCallback(raw_callback, cookie);
+ c->setJpegCallback(jpeg_callback, cookie);
+ if (c->takePicture() != NO_ERROR) {
jniThrowException(env, "java/io/IOException", "takePicture failed");
return;
}
@@ -406,9 +378,9 @@ static void android_hardware_Camera_takePicture(JNIEnv *env, jobject thiz)
static void android_hardware_Camera_setParameters(JNIEnv *env, jobject thiz, jstring params)
{
- LOGV("setParameters");
- sp<Camera> camera = get_native_camera(env, thiz, NULL);
- if (camera == 0) return;
+ sp<Camera> c = get_native_camera(env, thiz);
+ if (c == 0)
+ return;
const jchar* str = env->GetStringCritical(params, 0);
String8 params8;
@@ -416,7 +388,7 @@ static void android_hardware_Camera_setParameters(JNIEnv *env, jobject thiz, jst
params8 = String8(str, env->GetStringLength(params));
env->ReleaseStringCritical(params, str);
}
- if (camera->setParameters(params8) != NO_ERROR) {
+ if (c->setParameters(params8) != NO_ERROR) {
jniThrowException(env, "java/lang/IllegalArgumentException", "setParameters failed");
return;
}
@@ -424,20 +396,20 @@ static void android_hardware_Camera_setParameters(JNIEnv *env, jobject thiz, jst
static jstring android_hardware_Camera_getParameters(JNIEnv *env, jobject thiz)
{
- LOGV("getParameters");
- sp<Camera> camera = get_native_camera(env, thiz, NULL);
- if (camera == 0) return 0;
+ sp<Camera> c = get_native_camera(env, thiz);
+ if (c == 0)
+ return 0;
- return env->NewStringUTF(camera->getParameters().string());
+ return env->NewStringUTF(c->getParameters().string());
}
static void android_hardware_Camera_reconnect(JNIEnv *env, jobject thiz)
{
- LOGV("reconnect");
- sp<Camera> camera = get_native_camera(env, thiz, NULL);
- if (camera == 0) return;
+ sp<Camera> c = get_native_camera(env, thiz);
+ if (c == 0)
+ return;
- if (camera->reconnect() != NO_ERROR) {
+ if (c->reconnect() != NO_ERROR) {
jniThrowException(env, "java/io/IOException", "reconnect failed");
return;
}
@@ -445,18 +417,18 @@ static void android_hardware_Camera_reconnect(JNIEnv *env, jobject thiz)
static jint android_hardware_Camera_lock(JNIEnv *env, jobject thiz)
{
- LOGV("lock");
- sp<Camera> camera = get_native_camera(env, thiz, NULL);
- if (camera == 0) return INVALID_OPERATION;
- return (jint) camera->lock();
+ sp<Camera> c = get_native_camera(env, thiz);
+ if (c == 0)
+ return INVALID_OPERATION;
+ return (jint) c->lock();
}
static jint android_hardware_Camera_unlock(JNIEnv *env, jobject thiz)
{
- LOGV("unlock");
- sp<Camera> camera = get_native_camera(env, thiz, NULL);
- if (camera == 0) return INVALID_OPERATION;
- return (jint) camera->unlock();
+ sp<Camera> c = get_native_camera(env, thiz);
+ if (c == 0)
+ return INVALID_OPERATION;
+ return (jint) c->unlock();
}
//-------------------------------------------------
@@ -540,6 +512,7 @@ int register_android_hardware_Camera(JNIEnv *env)
{
field fields_to_find[] = {
{ "android/hardware/Camera", "mNativeContext", "I", &fields.context },
+ { "android/hardware/Camera", "mListenerContext", "I", &fields.listener_context },
{ "android/view/Surface", "mSurface", "I", &fields.surface }
};
@@ -547,6 +520,7 @@ int register_android_hardware_Camera(JNIEnv *env)
return -1;
jclass clazz = env->FindClass("android/hardware/Camera");
+ sCameraClass = (jclass)env->NewGlobalRef(clazz);
fields.post_event = env->GetStaticMethodID(clazz, "postEventFromNative",
"(Ljava/lang/Object;IIILjava/lang/Object;)V");
if (fields.post_event == NULL) {
diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp
index f625ffb..d9effee 100644
--- a/core/jni/android_media_AudioTrack.cpp
+++ b/core/jni/android_media_AudioTrack.cpp
@@ -688,33 +688,15 @@ static jint android_media_AudioTrack_reload(JNIEnv *env, jobject thiz) {
// ----------------------------------------------------------------------------
-static jint android_media_AudioTrack_get_output_sample_rate(JNIEnv *env, jobject thiz,
- jint javaStreamType) {
- int afSamplingRate;
- // convert the stream type from Java to native value
- // FIXME: code duplication with android_media_AudioTrack_native_setup()
- AudioSystem::stream_type nativeStreamType;
- if (javaStreamType == javaAudioTrackFields.STREAM_VOICE_CALL) {
- nativeStreamType = AudioSystem::VOICE_CALL;
- } else if (javaStreamType == javaAudioTrackFields.STREAM_SYSTEM) {
- nativeStreamType = AudioSystem::SYSTEM;
- } else if (javaStreamType == javaAudioTrackFields.STREAM_RING) {
- nativeStreamType = AudioSystem::RING;
- } else if (javaStreamType == javaAudioTrackFields.STREAM_MUSIC) {
- nativeStreamType = AudioSystem::MUSIC;
- } else if (javaStreamType == javaAudioTrackFields.STREAM_ALARM) {
- nativeStreamType = AudioSystem::ALARM;
- } else if (javaStreamType == javaAudioTrackFields.STREAM_NOTIFICATION) {
- nativeStreamType = AudioSystem::NOTIFICATION;
- } else if (javaStreamType == javaAudioTrackFields.STREAM_BLUETOOTH_SCO) {
- nativeStreamType = AudioSystem::BLUETOOTH_SCO;
- } else {
- nativeStreamType = AudioSystem::DEFAULT;
+static jint android_media_AudioTrack_get_output_sample_rate(JNIEnv *env, jobject thiz) {
+ int afSamplingRate;
+ AudioTrackJniStorage* lpJniStorage = (AudioTrackJniStorage *)env->GetIntField(
+ thiz, javaAudioTrackFields.jniData);
+ if (lpJniStorage == NULL) {
+ return DEFAULT_OUTPUT_SAMPLE_RATE;
}
- if (AudioSystem::getOutputSamplingRate(&afSamplingRate, nativeStreamType) != NO_ERROR) {
- LOGE("AudioSystem::getOutputSamplingRate() for stream type %d failed in AudioTrack JNI",
- nativeStreamType);
+ if (AudioSystem::getOutputSamplingRate(&afSamplingRate, lpJniStorage->mStreamType) != NO_ERROR) {
return DEFAULT_OUTPUT_SAMPLE_RATE;
} else {
return afSamplingRate;
@@ -784,7 +766,7 @@ static JNINativeMethod gMethods[] = {
{"native_set_loop", "(III)I", (void *)android_media_AudioTrack_set_loop},
{"native_reload_static", "()I", (void *)android_media_AudioTrack_reload},
{"native_get_output_sample_rate",
- "(I)I", (void *)android_media_AudioTrack_get_output_sample_rate},
+ "()I", (void *)android_media_AudioTrack_get_output_sample_rate},
{"native_get_min_buff_size",
"(III)I", (void *)android_media_AudioTrack_get_min_buff_size},
};
diff --git a/core/jni/android_os_ParcelFileDescriptor.cpp b/core/jni/android_os_ParcelFileDescriptor.cpp
index 1429f58..465e233 100644
--- a/core/jni/android_os_ParcelFileDescriptor.cpp
+++ b/core/jni/android_os_ParcelFileDescriptor.cpp
@@ -60,37 +60,9 @@ static jobject android_os_ParcelFileDescriptor_getFileDescriptorFromSocket(JNIEn
return fileDescriptorClone;
}
-static jlong android_os_ParcelFileDescriptor_getStatSize(JNIEnv* env,
- jobject clazz)
-{
- jint fd = env->GetIntField(clazz, gFileDescriptorOffsets.mDescriptor);
-
- struct stat st;
- if (fstat(fd, &st) != 0) {
- return -1;
- }
-
- if (S_ISREG(st.st_mode) || S_ISLNK(st.st_mode)) {
- return st.st_size;
- }
-
- return -1;
-}
-
-static jlong android_os_ParcelFileDescriptor_seekTo(JNIEnv* env,
- jobject clazz, jlong pos)
-{
- jint fd = env->GetIntField(clazz, gFileDescriptorOffsets.mDescriptor);
- return lseek(fd, pos, SEEK_SET);
-}
-
static const JNINativeMethod gParcelFileDescriptorMethods[] = {
{"getFileDescriptorFromSocket", "(Ljava/net/Socket;)Ljava/io/FileDescriptor;",
- (void*)android_os_ParcelFileDescriptor_getFileDescriptorFromSocket},
- {"getStatSize", "()J",
- (void*)android_os_ParcelFileDescriptor_getStatSize},
- {"seekTo", "(J)J",
- (void*)android_os_ParcelFileDescriptor_seekTo}
+ (void*)android_os_ParcelFileDescriptor_getFileDescriptorFromSocket}
};
const char* const kParcelFileDescriptorPathName = "android/os/ParcelFileDescriptor";
diff --git a/core/jni/android_server_BluetoothEventLoop.cpp b/core/jni/android_server_BluetoothEventLoop.cpp
index adfd912..9100e81 100644
--- a/core/jni/android_server_BluetoothEventLoop.cpp
+++ b/core/jni/android_server_BluetoothEventLoop.cpp
@@ -721,7 +721,6 @@ static jboolean waitForAndDispatchEventNative(JNIEnv *env, jobject object,
#define BOND_RESULT_AUTH_REJECTED 2
#define BOND_RESULT_AUTH_CANCELED 3
#define BOND_RESULT_REMOTE_DEVICE_DOWN 4
-#define BOND_RESULT_DISCOVERY_IN_PROGRESS 5
void onCreateBondingResult(DBusMessage *msg, void *user) {
LOGV(__FUNCTION__);
@@ -756,14 +755,10 @@ void onCreateBondingResult(DBusMessage *msg, void *user) {
// already bonded
LOGV("... error = %s (%s)\n", err.name, err.message);
result = BOND_RESULT_SUCCESS;
- } else if (!strcmp(err.name, BLUEZ_DBUS_BASE_IFC ".Error.InProgress") &&
- !strcmp(err.message, "Bonding in progress")) {
+ } else if (!strcmp(err.name, BLUEZ_DBUS_BASE_IFC ".Error.InProgress")) {
+ // don't make the java callback
LOGV("... error = %s (%s)\n", err.name, err.message);
goto done;
- } else if (!strcmp(err.name, BLUEZ_DBUS_BASE_IFC ".Error.InProgress") &&
- !strcmp(err.message, "Discover in progress")) {
- LOGV("... error = %s (%s)\n", err.name, err.message);
- result = BOND_RESULT_DISCOVERY_IN_PROGRESS;
} else {
LOGE("%s: D-Bus error: %s (%s)\n", __FUNCTION__, err.name, err.message);
result = BOND_RESULT_ERROR;
diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp
index 7325432..24404a8 100644
--- a/core/jni/android_util_Binder.cpp
+++ b/core/jni/android_util_Binder.cpp
@@ -1223,7 +1223,6 @@ static jobject android_os_Parcel_openFileDescriptor(JNIEnv* env, jobject clazz,
if (mode&0x08000000) flags |= O_CREAT;
if (mode&0x04000000) flags |= O_TRUNC;
- if (mode&0x02000000) flags |= O_APPEND;
int realMode = S_IRWXU|S_IRWXG;
if (mode&0x00000001) realMode |= S_IROTH;
diff --git a/core/jni/server/com_android_server_AlarmManagerService.cpp b/core/jni/server/com_android_server_AlarmManagerService.cpp
index 1d66fb1..0f37921 100644
--- a/core/jni/server/com_android_server_AlarmManagerService.cpp
+++ b/core/jni/server/com_android_server_AlarmManagerService.cpp
@@ -52,17 +52,12 @@ static jint android_server_AlarmManagerService_setKernelTimezone(JNIEnv* env, jo
tz.tz_minuteswest = minswest;
tz.tz_dsttime = 0;
- int result = settimeofday(NULL, &tz);
+ int result = ioctl(fd, ANDROID_ALARM_SET_TIMEZONE, &tz);
if (result < 0) {
LOGE("Unable to set kernel timezone to %d: %s\n", minswest, strerror(errno));
return -1;
- } else {
- LOGD("Kernel timezone updated to %d minutes west of GMT\n", minswest);
}
-
return 0;
-#else
- return -ENOSYS;
#endif
}
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index e9db5f0..2c3b590 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -704,7 +704,7 @@
<permission android:name="android.permission.STATUS_BAR"
android:label="@string/permlab_statusBar"
android:description="@string/permdesc_statusBar"
- android:protectionLevel="signatureOrSystem" />
+ android:protectionLevel="signature" />
<!-- Allows an application to force any currently running process to be
in the foreground. -->
diff --git a/core/res/res/drawable-land/title_bar.9.png b/core/res/res/drawable-land/title_bar.9.png
new file mode 100644
index 0000000..a48d967
--- /dev/null
+++ b/core/res/res/drawable-land/title_bar.9.png
Binary files differ
diff --git a/core/res/res/drawable/activity_title_bar.9.png b/core/res/res/drawable/activity_title_bar.9.png
deleted file mode 100644
index bd0680d..0000000
--- a/core/res/res/drawable/activity_title_bar.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/btn_check_off.png b/core/res/res/drawable/btn_check_off.png
index 56d3861..3a137d9 100644
--- a/core/res/res/drawable/btn_check_off.png
+++ b/core/res/res/drawable/btn_check_off.png
Binary files differ
diff --git a/core/res/res/drawable/btn_check_off_disable_focused.png b/core/res/res/drawable/btn_check_off_disable_focused.png
index 0837bbd..47d225d 100644
--- a/core/res/res/drawable/btn_check_off_disable_focused.png
+++ b/core/res/res/drawable/btn_check_off_disable_focused.png
Binary files differ
diff --git a/core/res/res/drawable/btn_check_off_selected.png b/core/res/res/drawable/btn_check_off_selected.png
index 20842d4..6854550 100644
--- a/core/res/res/drawable/btn_check_off_selected.png
+++ b/core/res/res/drawable/btn_check_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable/btn_check_on_disable_focused.png b/core/res/res/drawable/btn_check_on_disable_focused.png
index 8a73b33..4b6064d 100644
--- a/core/res/res/drawable/btn_check_on_disable_focused.png
+++ b/core/res/res/drawable/btn_check_on_disable_focused.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_normal.9.png b/core/res/res/drawable/btn_default_normal.9.png
index a2d5ccd..a337eb5 100644
--- a/core/res/res/drawable/btn_default_normal.9.png
+++ b/core/res/res/drawable/btn_default_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_normal_disable.9.png b/core/res/res/drawable/btn_default_normal_disable.9.png
index edd3a3e..e414d76 100644
--- a/core/res/res/drawable/btn_default_normal_disable.9.png
+++ b/core/res/res/drawable/btn_default_normal_disable.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_normal_disable_focused.9.png b/core/res/res/drawable/btn_default_normal_disable_focused.9.png
index f506179..b2d45e5 100644
--- a/core/res/res/drawable/btn_default_normal_disable_focused.9.png
+++ b/core/res/res/drawable/btn_default_normal_disable_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_pressed.9.png b/core/res/res/drawable/btn_default_pressed.9.png
index 033bf89..92d5ab5 100644
--- a/core/res/res/drawable/btn_default_pressed.9.png
+++ b/core/res/res/drawable/btn_default_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_selected.9.png b/core/res/res/drawable/btn_default_selected.9.png
index 1e900bf..5405fa0 100644
--- a/core/res/res/drawable/btn_default_selected.9.png
+++ b/core/res/res/drawable/btn_default_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_small_normal.9.png b/core/res/res/drawable/btn_default_small_normal.9.png
index bcedd5f..963ecb3 100644
--- a/core/res/res/drawable/btn_default_small_normal.9.png
+++ b/core/res/res/drawable/btn_default_small_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_small_normal_disable.9.png b/core/res/res/drawable/btn_default_small_normal_disable.9.png
index ac6260f..15bb123 100644
--- a/core/res/res/drawable/btn_default_small_normal_disable.9.png
+++ b/core/res/res/drawable/btn_default_small_normal_disable.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_small_normal_disable_focused.9.png b/core/res/res/drawable/btn_default_small_normal_disable_focused.9.png
index 4ee1b3f..a343515 100644
--- a/core/res/res/drawable/btn_default_small_normal_disable_focused.9.png
+++ b/core/res/res/drawable/btn_default_small_normal_disable_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_small_pressed.9.png b/core/res/res/drawable/btn_default_small_pressed.9.png
index 25e38f4..8476e12 100644
--- a/core/res/res/drawable/btn_default_small_pressed.9.png
+++ b/core/res/res/drawable/btn_default_small_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_default_small_selected.9.png b/core/res/res/drawable/btn_default_small_selected.9.png
index cc209c6..8ab8d63 100644
--- a/core/res/res/drawable/btn_default_small_selected.9.png
+++ b/core/res/res/drawable/btn_default_small_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable/btn_radio_on.png b/core/res/res/drawable/btn_radio_on.png
index 25a3ccc..7bf696d 100644
--- a/core/res/res/drawable/btn_radio_on.png
+++ b/core/res/res/drawable/btn_radio_on.png
Binary files differ
diff --git a/core/res/res/drawable/btn_rating_star_off_normal.png b/core/res/res/drawable/btn_rating_star_off_normal.png
index a99441d..bb15404 100644
--- a/core/res/res/drawable/btn_rating_star_off_normal.png
+++ b/core/res/res/drawable/btn_rating_star_off_normal.png
Binary files differ
diff --git a/core/res/res/drawable/btn_rating_star_off_pressed.png b/core/res/res/drawable/btn_rating_star_off_pressed.png
index f47a454..45482b9 100644
--- a/core/res/res/drawable/btn_rating_star_off_pressed.png
+++ b/core/res/res/drawable/btn_rating_star_off_pressed.png
Binary files differ
diff --git a/core/res/res/drawable/btn_rating_star_off_selected.png b/core/res/res/drawable/btn_rating_star_off_selected.png
index 5f71e08..3fbe92a 100644
--- a/core/res/res/drawable/btn_rating_star_off_selected.png
+++ b/core/res/res/drawable/btn_rating_star_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable/btn_rating_star_on_normal.png b/core/res/res/drawable/btn_rating_star_on_normal.png
index b7825d3..1c329a1 100644
--- a/core/res/res/drawable/btn_rating_star_on_normal.png
+++ b/core/res/res/drawable/btn_rating_star_on_normal.png
Binary files differ
diff --git a/core/res/res/drawable/btn_rating_star_on_pressed.png b/core/res/res/drawable/btn_rating_star_on_pressed.png
index 4052445..2a965a7 100644
--- a/core/res/res/drawable/btn_rating_star_on_pressed.png
+++ b/core/res/res/drawable/btn_rating_star_on_pressed.png
Binary files differ
diff --git a/core/res/res/drawable/btn_rating_star_on_selected.png b/core/res/res/drawable/btn_rating_star_on_selected.png
index 5d139b6..2c1e207 100644
--- a/core/res/res/drawable/btn_rating_star_on_selected.png
+++ b/core/res/res/drawable/btn_rating_star_on_selected.png
Binary files differ
diff --git a/core/res/res/drawable/btn_star_big_off.png b/core/res/res/drawable/btn_star_big_off.png
index 7e9342b..21ba557 100755
--- a/core/res/res/drawable/btn_star_big_off.png
+++ b/core/res/res/drawable/btn_star_big_off.png
Binary files differ
diff --git a/core/res/res/drawable/btn_star_big_off_pressed.png b/core/res/res/drawable/btn_star_big_off_pressed.png
index f1b8912..2c704ee 100755
--- a/core/res/res/drawable/btn_star_big_off_pressed.png
+++ b/core/res/res/drawable/btn_star_big_off_pressed.png
Binary files differ
diff --git a/core/res/res/drawable/btn_star_big_off_selected.png b/core/res/res/drawable/btn_star_big_off_selected.png
index 0be64c4..101357d 100755
--- a/core/res/res/drawable/btn_star_big_off_selected.png
+++ b/core/res/res/drawable/btn_star_big_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable/btn_star_big_on.png b/core/res/res/drawable/btn_star_big_on.png
index a9bdb05..9c2f7d2 100755
--- a/core/res/res/drawable/btn_star_big_on.png
+++ b/core/res/res/drawable/btn_star_big_on.png
Binary files differ
diff --git a/core/res/res/drawable/btn_star_big_on_pressed.png b/core/res/res/drawable/btn_star_big_on_pressed.png
index 159a84b..8ac4bab 100755
--- a/core/res/res/drawable/btn_star_big_on_pressed.png
+++ b/core/res/res/drawable/btn_star_big_on_pressed.png
Binary files differ
diff --git a/core/res/res/drawable/btn_star_big_on_selected.png b/core/res/res/drawable/btn_star_big_on_selected.png
index 0592d51..d453eab 100755
--- a/core/res/res/drawable/btn_star_big_on_selected.png
+++ b/core/res/res/drawable/btn_star_big_on_selected.png
Binary files differ
diff --git a/core/res/res/drawable/ic_lock_airplane_mode.png b/core/res/res/drawable/ic_lock_airplane_mode.png
deleted file mode 100755
index caafcb2..0000000
--- a/core/res/res/drawable/ic_lock_airplane_mode.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/ic_lock_airplane_mode_off.png b/core/res/res/drawable/ic_lock_airplane_mode_off.png
deleted file mode 100755
index cb2cbdf..0000000
--- a/core/res/res/drawable/ic_lock_airplane_mode_off.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/ic_lock_power_off.png b/core/res/res/drawable/ic_lock_power_off.png
index 4405b43..14c002e 100644
--- a/core/res/res/drawable/ic_lock_power_off.png
+++ b/core/res/res/drawable/ic_lock_power_off.png
Binary files differ
diff --git a/core/res/res/drawable/ic_lock_silent_mode.png b/core/res/res/drawable/ic_lock_silent_mode.png
index 439a6f5..c89291a 100644
--- a/core/res/res/drawable/ic_lock_silent_mode.png
+++ b/core/res/res/drawable/ic_lock_silent_mode.png
Binary files differ
diff --git a/core/res/res/drawable/ic_lock_silent_mode_off.png b/core/res/res/drawable/ic_lock_silent_mode_off.png
index fc7e960..4748b9e 100644
--- a/core/res/res/drawable/ic_lock_silent_mode_off.png
+++ b/core/res/res/drawable/ic_lock_silent_mode_off.png
Binary files differ
diff --git a/core/res/res/drawable/keyboard_accessory_bg_landscape.9.png b/core/res/res/drawable/keyboard_accessory_bg_landscape.9.png
deleted file mode 100644
index 8f828f6..0000000
--- a/core/res/res/drawable/keyboard_accessory_bg_landscape.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/textfield_default.9.png b/core/res/res/drawable/textfield_default.9.png
index cc78e6c..12cdd4c 100644
--- a/core/res/res/drawable/textfield_default.9.png
+++ b/core/res/res/drawable/textfield_default.9.png
Binary files differ
diff --git a/core/res/res/drawable/textfield_disabled.9.png b/core/res/res/drawable/textfield_disabled.9.png
index 9c77149..ad8ba70 100644
--- a/core/res/res/drawable/textfield_disabled.9.png
+++ b/core/res/res/drawable/textfield_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable/textfield_disabled_selected.9.png b/core/res/res/drawable/textfield_disabled_selected.9.png
index 6d47708..04b6b6b 100644
--- a/core/res/res/drawable/textfield_disabled_selected.9.png
+++ b/core/res/res/drawable/textfield_disabled_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable/textfield_pressed.9.png b/core/res/res/drawable/textfield_pressed.9.png
index c909ad2..bcc0152 100644
--- a/core/res/res/drawable/textfield_pressed.9.png
+++ b/core/res/res/drawable/textfield_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable/textfield_selected.9.png b/core/res/res/drawable/textfield_selected.9.png
index 0c1b446..47115b6 100644
--- a/core/res/res/drawable/textfield_selected.9.png
+++ b/core/res/res/drawable/textfield_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_down_disabled.9.png b/core/res/res/drawable/timepicker_down_disabled.9.png
index 7d8e0b9..af72d22 100755
--- a/core/res/res/drawable/timepicker_down_disabled.9.png
+++ b/core/res/res/drawable/timepicker_down_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_down_disabled_focused.9.png b/core/res/res/drawable/timepicker_down_disabled_focused.9.png
index 6f2373e..2d80424 100755
--- a/core/res/res/drawable/timepicker_down_disabled_focused.9.png
+++ b/core/res/res/drawable/timepicker_down_disabled_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_down_normal.9.png b/core/res/res/drawable/timepicker_down_normal.9.png
index a946355..c427fc3 100755
--- a/core/res/res/drawable/timepicker_down_normal.9.png
+++ b/core/res/res/drawable/timepicker_down_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_down_pressed.9.png b/core/res/res/drawable/timepicker_down_pressed.9.png
index fb4d817..ac6ac53 100755
--- a/core/res/res/drawable/timepicker_down_pressed.9.png
+++ b/core/res/res/drawable/timepicker_down_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_down_selected.9.png b/core/res/res/drawable/timepicker_down_selected.9.png
index 1db8bc1..f710b57 100755
--- a/core/res/res/drawable/timepicker_down_selected.9.png
+++ b/core/res/res/drawable/timepicker_down_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_input_disabled.9.png b/core/res/res/drawable/timepicker_input_disabled.9.png
index f73658e..97da87a 100755
--- a/core/res/res/drawable/timepicker_input_disabled.9.png
+++ b/core/res/res/drawable/timepicker_input_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_input_normal.9.png b/core/res/res/drawable/timepicker_input_normal.9.png
index 8032ada..eb101c5 100755
--- a/core/res/res/drawable/timepicker_input_normal.9.png
+++ b/core/res/res/drawable/timepicker_input_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_input_pressed.9.png b/core/res/res/drawable/timepicker_input_pressed.9.png
index 30d8d5f..c83b1eb 100755
--- a/core/res/res/drawable/timepicker_input_pressed.9.png
+++ b/core/res/res/drawable/timepicker_input_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_input_selected.9.png b/core/res/res/drawable/timepicker_input_selected.9.png
index 874f18f..e152848 100755
--- a/core/res/res/drawable/timepicker_input_selected.9.png
+++ b/core/res/res/drawable/timepicker_input_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_up_disabled.9.png b/core/res/res/drawable/timepicker_up_disabled.9.png
index 93d0db4..1814bb4 100755
--- a/core/res/res/drawable/timepicker_up_disabled.9.png
+++ b/core/res/res/drawable/timepicker_up_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_up_disabled_focused.9.png b/core/res/res/drawable/timepicker_up_disabled_focused.9.png
index b5bf68d..9ad5b85 100755
--- a/core/res/res/drawable/timepicker_up_disabled_focused.9.png
+++ b/core/res/res/drawable/timepicker_up_disabled_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_up_normal.9.png b/core/res/res/drawable/timepicker_up_normal.9.png
index 978251d..35fc221 100755
--- a/core/res/res/drawable/timepicker_up_normal.9.png
+++ b/core/res/res/drawable/timepicker_up_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_up_pressed.9.png b/core/res/res/drawable/timepicker_up_pressed.9.png
index 924b03c..c910777 100755
--- a/core/res/res/drawable/timepicker_up_pressed.9.png
+++ b/core/res/res/drawable/timepicker_up_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable/timepicker_up_selected.9.png b/core/res/res/drawable/timepicker_up_selected.9.png
index 5c94d0d..549a7e5 100755
--- a/core/res/res/drawable/timepicker_up_selected.9.png
+++ b/core/res/res/drawable/timepicker_up_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable/title_bar.9.png b/core/res/res/drawable/title_bar.9.png
new file mode 100644
index 0000000..482d82e
--- /dev/null
+++ b/core/res/res/drawable/title_bar.9.png
Binary files differ
diff --git a/core/res/res/drawable/title_bar.xml b/core/res/res/drawable/title_bar.xml
deleted file mode 100644
index 24402dc..0000000
--- a/core/res/res/drawable/title_bar.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/activity_title_bar"
- android:dither="true"
-/>
diff --git a/core/res/res/drawable/zoom_ring_overview_tab.9.png b/core/res/res/drawable/zoom_ring_overview_tab.9.png
index d2658d8..4056f73 100644
--- a/core/res/res/drawable/zoom_ring_overview_tab.9.png
+++ b/core/res/res/drawable/zoom_ring_overview_tab.9.png
Binary files differ
diff --git a/core/res/res/drawable/zoom_ring_thumb_minus.png b/core/res/res/drawable/zoom_ring_thumb_minus.png
deleted file mode 100644
index faed674..0000000
--- a/core/res/res/drawable/zoom_ring_thumb_minus.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/zoom_ring_thumb_minus_arrow.png b/core/res/res/drawable/zoom_ring_thumb_minus_arrow.png
index abe1b8a..c7b87ef 100644
--- a/core/res/res/drawable/zoom_ring_thumb_minus_arrow.png
+++ b/core/res/res/drawable/zoom_ring_thumb_minus_arrow.png
Binary files differ
diff --git a/core/res/res/drawable/zoom_ring_thumb_plus.png b/core/res/res/drawable/zoom_ring_thumb_plus.png
deleted file mode 100644
index ba7aff2..0000000
--- a/core/res/res/drawable/zoom_ring_thumb_plus.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/zoom_ring_thumb_plus_arrow.png b/core/res/res/drawable/zoom_ring_thumb_plus_arrow.png
index d01ccb4..0591d39 100644
--- a/core/res/res/drawable/zoom_ring_thumb_plus_arrow.png
+++ b/core/res/res/drawable/zoom_ring_thumb_plus_arrow.png
Binary files differ
diff --git a/core/res/res/drawable/zoom_ring_track.png b/core/res/res/drawable/zoom_ring_track.png
index 1d5a44c..60a15b7 100644
--- a/core/res/res/drawable/zoom_ring_track.png
+++ b/core/res/res/drawable/zoom_ring_track.png
Binary files differ
diff --git a/core/res/res/drawable/zoom_ring_track_absolute.png b/core/res/res/drawable/zoom_ring_track_absolute.png
index 2b87699..0195b9e 100644
--- a/core/res/res/drawable/zoom_ring_track_absolute.png
+++ b/core/res/res/drawable/zoom_ring_track_absolute.png
Binary files differ
diff --git a/core/res/res/layout/alert_dialog_simple_text.xml b/core/res/res/layout/alert_dialog_simple_text.xml
deleted file mode 100644
index ab82be7..0000000
--- a/core/res/res/layout/alert_dialog_simple_text.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- This layout can be set as the AlertDialog's view to display vertically centered text. -->
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@android:id/text1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:padding="10dip"
- />
-
-
diff --git a/core/res/res/layout/global_actions_item.xml b/core/res/res/layout/global_actions_item.xml
index 63bb0f4..4383127 100644
--- a/core/res/res/layout/global_actions_item.xml
+++ b/core/res/res/layout/global_actions_item.xml
@@ -14,48 +14,38 @@
limitations under the License.
-->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="?android:attr/listPreferredItemHeight"
-
- android:paddingLeft="11dip"
- android:paddingTop="6dip"
- android:paddingBottom="6dip"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingTop="10dip"
+ android:paddingBottom="10dip"
+ android:minHeight="?android:attr/listPreferredItemHeight"
>
<ImageView android:id="@+id/icon"
android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:layout_alignParentTop="true"
- android:layout_alignParentBottom="true"
- android:layout_marginRight="9dip"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="6dip"
+ android:layout_gravity="center_vertical"
/>
-
- <TextView android:id="@+id/status"
- android:layout_width="fill_parent"
- android:layout_height="26dip"
-
- android:layout_toRightOf="@id/icon"
- android:layout_alignParentBottom="true"
- android:layout_alignParentRight="true"
-
- android:textAppearance="?android:attr/textAppearanceSmallInverse"
- />
-
-
- <TextView android:id="@+id/message"
- android:layout_width="fill_parent"
+ <LinearLayout android:orientation="vertical"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical">
- android:layout_toRightOf="@id/icon"
- android:layout_alignParentRight="true"
- android:layout_alignParentTop="true"
- android:layout_above="@id/status"
- android:layout_alignWithParentIfMissing="true"
- android:gravity="center_vertical"
- android:textAppearance="?android:attr/textAppearanceLargeInverse"
- />
+ <TextView android:id="@+id/message"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceLargeInverse"
+ />
+ <TextView android:id="@+id/status"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmallInverse"
+ />
+ </LinearLayout>
-</RelativeLayout>
+</LinearLayout>
diff --git a/core/res/res/layout/input_method_extract_view.xml b/core/res/res/layout/input_method_extract_view.xml
index 13b619a..3f68bd3 100644
--- a/core/res/res/layout/input_method_extract_view.xml
+++ b/core/res/res/layout/input_method_extract_view.xml
@@ -18,38 +18,13 @@
*/
-->
-<LinearLayout
+<android.inputmethodservice.ExtractEditText
xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal">
-
- <android.inputmethodservice.ExtractEditText
- android:id="@+id/inputExtractEditText"
- android:layout_width="0px"
- android:layout_height="fill_parent"
- android:layout_weight="1"
- android:scrollbars="vertical"
- android:gravity="top"
- android:minLines="1"
- android:inputType="text"
- android:background="@android:drawable/extract_edit_text"
- >
- </android.inputmethodservice.ExtractEditText>
-
- <FrameLayout
- android:id="@+id/inputExtractAccessories"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:paddingLeft="10dip"
- android:paddingRight="10dip"
- android:background="@android:drawable/keyboard_accessory_bg_landscape"
- >
-
- <Button android:id="@+id/inputExtractAction"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- />
-
- </FrameLayout>
-
-</LinearLayout>
+ android:id="@+id/inputExtractEditText"
+ android:scrollbars="vertical"
+ android:gravity="top"
+ android:minLines="1"
+ android:inputType="text"
+ android:background="@android:drawable/extract_edit_text"
+ >
+</android.inputmethodservice.ExtractEditText>
diff --git a/core/res/res/layout/keyguard_screen_glogin_unlock.xml b/core/res/res/layout/keyguard_screen_glogin_unlock.xml
index b78bb94..beaa926 100644
--- a/core/res/res/layout/keyguard_screen_glogin_unlock.xml
+++ b/core/res/res/layout/keyguard_screen_glogin_unlock.xml
@@ -20,7 +20,7 @@
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
- android:background="#A0000000"
+ android:background="#FF000000"
>
<ScrollView
android:layout_width="fill_parent"
diff --git a/core/res/res/layout/keyguard_screen_lock.xml b/core/res/res/layout/keyguard_screen_lock.xml
index fbbc1a4..907859a 100644
--- a/core/res/res/layout/keyguard_screen_lock.xml
+++ b/core/res/res/layout/keyguard_screen_lock.xml
@@ -24,6 +24,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="bottom"
+ android:background="#FF000000"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
@@ -36,8 +37,6 @@
android:layout_marginBottom="15dip"
android:layout_marginLeft="15dip"
android:layout_marginRight="15dip"
- android:paddingTop="20dip"
- android:paddingBottom="20dip"
android:background="@android:drawable/popup_full_dark"
>
diff --git a/core/res/res/layout/keyguard_screen_sim_pin_landscape.xml b/core/res/res/layout/keyguard_screen_sim_pin_landscape.xml
index 19305c5..00a6487 100644
--- a/core/res/res/layout/keyguard_screen_sim_pin_landscape.xml
+++ b/core/res/res/layout/keyguard_screen_sim_pin_landscape.xml
@@ -20,7 +20,7 @@
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:background="#A0000000"
+ android:background="#FF000000"
>
<!-- displays dots as user enters pin -->
diff --git a/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml b/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
index 6a05488..d47ca5f 100644
--- a/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
@@ -20,7 +20,7 @@
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:background="#A0000000"
+ android:background="#FF000000"
>
<!-- header text ('Enter Pin Code') -->
diff --git a/core/res/res/layout/keyguard_screen_unlock_landscape.xml b/core/res/res/layout/keyguard_screen_unlock_landscape.xml
index ba1640a..175a3a5 100644
--- a/core/res/res/layout/keyguard_screen_unlock_landscape.xml
+++ b/core/res/res/layout/keyguard_screen_unlock_landscape.xml
@@ -23,9 +23,9 @@
<com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
+ android:background="#FF000000"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:background="#A0000000"
>
<!-- left side: instructions and emergency call button -->
@@ -114,11 +114,11 @@
</FrameLayout>
</LinearLayout>
- <!--View
+ <View
android:background="@android:drawable/code_lock_left"
android:layout_width="2dip"
- android:layout_height="fill_parent" /-->
-
+ android:layout_height="fill_parent" />
+
<!-- right side: lock pattern -->
<com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
android:layout_width="wrap_content"
diff --git a/core/res/res/layout/keyguard_screen_unlock_portrait.xml b/core/res/res/layout/keyguard_screen_unlock_portrait.xml
index f09c422..b591b10 100644
--- a/core/res/res/layout/keyguard_screen_unlock_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_unlock_portrait.xml
@@ -23,9 +23,9 @@
<com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
+ android:background="#FF000000"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
- android:background="#A0000000"
>
<!-- lock icon and header message -->
@@ -53,18 +53,17 @@
android:textSize="18sp"/>
</LinearLayout>
- <!--View
+ <View
android:background="@android:drawable/code_lock_top"
android:layout_width="fill_parent"
- android:layout_height="2dip" /-->
+ android:layout_height="2dip" />
<com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- <!--View
+ android:layout_height="wrap_content" />
+ <View
android:background="@android:drawable/code_lock_bottom"
android:layout_width="fill_parent"
- android:layout_height="8dip" /-->
+ android:layout_height="8dip" />
<!-- footer -->
<FrameLayout
@@ -101,10 +100,6 @@
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1.0"
- android:layout_marginTop="4dip"
- android:layout_marginBottom="4dip"
- android:layout_marginLeft="4dip"
- android:layout_marginRight="2dip"
android:text="@android:string/lockscreen_emergency_call"
android:textSize="14sp"
android:drawableLeft="@drawable/ic_emergency"
@@ -114,10 +109,6 @@
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1.0"
- android:layout_marginTop="4dip"
- android:layout_marginBottom="4dip"
- android:layout_marginLeft="2dip"
- android:layout_marginRight="4dip"
android:textSize="14sp"
android:visibility="invisible"
/>
diff --git a/core/res/res/layout/search_bar.xml b/core/res/res/layout/search_bar.xml
index ef347da..657ee1f 100644
--- a/core/res/res/layout/search_bar.xml
+++ b/core/res/res/layout/search_bar.xml
@@ -33,7 +33,6 @@
shadow, plus the desired padding of "8" against the user-visible (grey)
pixels, minus "1" to correct for positioning of the edittext & button. -->
<LinearLayout
- android:id="@+id/search_plate"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
@@ -78,11 +77,7 @@
android:layout_weight="1.0"
android:paddingLeft="8dip"
android:paddingRight="6dip"
- android:inputType="text|textAutoComplete"
- android:dropDownWidth="fill_parent"
- android:dropDownAnchor="@id/search_plate"
- android:dropDownVerticalOffset="-15dip"
- />
+ android:inputType="text|textAutoComplete" />
<!-- android:focusableInTouchMode="false" -->
<!-- android:singleLine="true" -->
<!-- android:selectAllOnFocus="true" -->
diff --git a/core/res/res/layout/select_dialog_item.xml b/core/res/res/layout/select_dialog_item.xml
index f1840ba..0983b66 100644
--- a/core/res/res/layout/select_dialog_item.xml
+++ b/core/res/res/layout/select_dialog_item.xml
@@ -28,8 +28,7 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:textColor="@android:color/bright_foreground_light"
+ android:textAppearance="?android:attr/textAppearanceLargeInverse"
android:gravity="center_vertical"
android:paddingLeft="14dip"
android:paddingRight="15dip"
diff --git a/core/res/res/layout/status_bar_latest_event_content.xml b/core/res/res/layout/status_bar_latest_event_content.xml
index eeb9d9d..fbe4c32 100644
--- a/core/res/res/layout/status_bar_latest_event_content.xml
+++ b/core/res/res/layout/status_bar_latest_event_content.xml
@@ -22,8 +22,6 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:singleLine="true"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal"
android:textStyle="bold"
android:textSize="18sp"
android:paddingLeft="4dp"
@@ -40,8 +38,6 @@
android:layout_weight="1"
android:textColor="#ff000000"
android:singleLine="true"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal"
android:textSize="14sp"
android:paddingLeft="4dp"
/>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 13aca371..672c4b9 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -103,15 +103,7 @@
<string name="global_action_toggle_silent_mode">"Tichý režim"</string>
<string name="global_action_silent_mode_on_status">"Zvuk je VYPNUTÝ."</string>
<string name="global_action_silent_mode_off_status">"Zvuk je zapnutý"</string>
- <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
- <skip />
<string name="safeMode">"Nouzový režim"</string>
- <!-- no translation found for android_system_label (6577375335728551336) -->
- <skip />
<string name="permgrouplab_costMoney">"Zpoplatněné služby"</string>
<string name="permgroupdesc_costMoney">"Umožňuje aplikacím provádět činnosti, které vás mohou stát peníze."</string>
<string name="permgrouplab_messages">"Vaše zprávy"</string>
@@ -397,10 +389,9 @@
<string name="lockscreen_emergency_call">"Tísňové volání"</string>
<string name="lockscreen_pattern_correct">"Správně!"</string>
<string name="lockscreen_pattern_wrong">"Zkuste to prosím znovu"</string>
- <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
- <skip />
+ <string name="lockscreen_plugged_in">"Nabíjení (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
<string name="lockscreen_low_battery">"Připojte dobíjecí zařízení."</string>
- <string name="lockscreen_missing_sim_message_short">"Není vložena SIM karta."</string>
+ <string name="lockscreen_missing_sim_message_short">"Není vložena karta SIM."</string>
<string name="lockscreen_missing_sim_message">"V telefonu není žádná karta SIM."</string>
<string name="lockscreen_missing_sim_instructions">"Prosím vložte kartu SIM."</string>
<string name="lockscreen_network_locked_message">"Síť je blokována"</string>
@@ -408,8 +399,8 @@
<string name="lockscreen_sim_puk_locked_instructions">"Prosím kontaktujte podporu zákazníků."</string>
<string name="lockscreen_sim_locked_message">"Karta SIM je zablokována."</string>
<string name="lockscreen_sim_unlock_progress_dialog_message">"Odblokování karty SIM..."</string>
- <string name="lockscreen_too_many_failed_attempts_dialog_message">"<xliff:g id="NUMBER_0">%d</xliff:g>krát jste nakreslili nesprávné bezpečnostní gesto. "\n\n"Opakujte prosím akci za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
- <string name="lockscreen_failed_attempts_almost_glogin">"<xliff:g id="NUMBER_0">%d</xliff:g>krát jste nesprávně nakreslili své bezpečnostní gesto. Po dalších neúspěšných pokusech (<xliff:g id="NUMBER_1">%d</xliff:g>) budete požádáni o odemčení telefonu pomocí přihlášení do účtu Google."\n\n" Akci prosím opakujte za několik sekund (<xliff:g id="NUMBER_2">%d</xliff:g>)."</string>
+ <string name="lockscreen_too_many_failed_attempts_dialog_message">"<xliff:g id="NUMBER_0">%d</xliff:g>krát jste použili nesprávné gesto pro odemčení. "\n\n"Opakujte prosím akci za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
+ <string name="lockscreen_failed_attempts_almost_glogin">"<xliff:g id="NUMBER_0">%d</xliff:g>krát jste nesprávně nakreslili své gesto odemknutí. Po dalších neúspěšných pokusech (<xliff:g id="NUMBER_1">%d</xliff:g>) budete požádání o odemčení telefonu pomocí přihlášení Google."\n\n" Akci prosím opakujte za několik sekund (<xliff:g id="NUMBER_2">%d</xliff:g>)."</string>
<string name="lockscreen_too_many_failed_attempts_countdown">"Sekundy zbývající do dalšího pokusu: <xliff:g id="NUMBER">%d</xliff:g>."</string>
<string name="lockscreen_forgot_pattern_button_text">"Zapomněli jste gesto?"</string>
<string name="lockscreen_glogin_too_many_attempts">"Gesta: Příliš mnoho pokusů"</string>
@@ -421,15 +412,15 @@
<string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
<string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
<string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
- <!-- no translation found for hour_ampm (4329881288269772723) -->
+ <!-- no translation found for hour_ampm (7618670480400517084) -->
<skip />
- <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
+ <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
<skip />
<string name="status_bar_clear_all_button">"Vymazat oznámení"</string>
<string name="status_bar_no_notifications_title">"Žádná oznámení"</string>
<string name="status_bar_ongoing_events_title">"Probíhající"</string>
<string name="status_bar_latest_events_title">"Oznámení"</string>
- <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
+ <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
<skip />
<string name="battery_status_charging">"Nabíjení..."</string>
<string name="battery_low_title">"Prosím připojte dobíjecí zařízení"</string>
@@ -578,12 +569,12 @@
<string name="Noon">"Poledne"</string>
<string name="midnight">"půlnoc"</string>
<string name="Midnight">"Půlnoc"</string>
- <!-- no translation found for month_day (3693060561170538204) -->
+ <!-- no translation found for month_day (5565829181417740906) -->
<skip />
- <!-- no translation found for month (1976700695144952053) -->
+ <!-- no translation found for month (7026169712234774086) -->
<skip />
<string name="month_day_year">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for month_year (2106203387378728384) -->
+ <!-- no translation found for month_year (9219019380312413367) -->
<skip />
<string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
<string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="DAY">%-d</xliff:g>. <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
@@ -612,11 +603,11 @@
<string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>. <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>. <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="abbrev_month_day_year">"<xliff:g id="DAY">%-d</xliff:g>. <xliff:g id="MONTH">%b</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for abbrev_month_year (5966980891147982768) -->
+ <!-- no translation found for abbrev_month_year (3856424847226891943) -->
<skip />
- <!-- no translation found for abbrev_month_day (3156047263406783231) -->
+ <!-- no translation found for abbrev_month_day (5028815883653985933) -->
<skip />
- <!-- no translation found for abbrev_month (7304935052615731208) -->
+ <!-- no translation found for abbrev_month (3131032032850777433) -->
<skip />
<string name="day_of_week_long_sunday">"neděle"</string>
<string name="day_of_week_long_monday">"pondělí"</string>
@@ -722,8 +713,8 @@
<string name="aerr_process">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> byl neočekávaně ukončen. Opakujte prosím akci."</string>
<string name="anr_title">"Omlouváme se"</string>
<string name="anr_activity_application">"Činnost <xliff:g id="ACTIVITY">%1$s</xliff:g> (v aplikaci <xliff:g id="APPLICATION">%2$s</xliff:g>) neodpovídá."</string>
- <string name="anr_activity_process">"Služba <xliff:g id="ACTIVITY">%1$s</xliff:g> (<xliff:g id="PROCESS">%2$s</xliff:g>) nereaguje."</string>
- <string name="anr_application_process">"Služba <xliff:g id="APPLICATION">%1$s</xliff:g> (<xliff:g id="PROCESS">%2$s</xliff:g>) nereaguje."</string>
+ <string name="anr_activity_process">"Činnost <xliff:g id="ACTIVITY">%1$s</xliff:g> (v procesu <xliff:g id="PROCESS">%2$s</xliff:g>) neodpovídá."</string>
+ <string name="anr_application_process">"Aplikace <xliff:g id="APPLICATION">%1$s</xliff:g> (v procesu <xliff:g id="PROCESS">%2$s</xliff:g>) neodpovídá."</string>
<string name="anr_process">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> neodpovídá."</string>
<string name="force_close">"Ukončit aplikaci"</string>
<string name="wait">"Počkat"</string>
@@ -743,11 +734,11 @@
<string name="ringtone_picker_title">"Vyzváněcí tóny"</string>
<string name="ringtone_unknown">"Neznámý vyzváněcí tón"</string>
<plurals name="wifi_available">
- <item quantity="one">"K dispozici je síť WiFi."</item>
+ <item quantity="one">"Je k dispozici síť WiFi."</item>
<item quantity="other">"Jsou k dispozici sítě WiFi."</item>
</plurals>
<plurals name="wifi_available_detailed">
- <item quantity="one">"K dispozici je veřejná síť WiFi"</item>
+ <item quantity="one">"Je k dispozici veřejná síť WiFi"</item>
<item quantity="other">"Jsou k dispozici veřejné sítě WiFi"</item>
</plurals>
<string name="select_character">"Vkládání znaků"</string>
@@ -780,8 +771,8 @@
<string name="extmedia_format_message">"Opravdu chcete kartu SD naformátovat? Všechna data na kartě budou ztracena."</string>
<string name="extmedia_format_button_format">"Formátovat"</string>
<string name="select_input_method">"Výběr metody zadávání dat"</string>
- <string name="fast_scroll_alphabet">" AÁBCČDĎEÉĚFGHCHIÍJKLMNŇOÓPQRŘSŠTŤUÚVWXYÝZŽ"</string>
- <string name="fast_scroll_numeric_alphabet">" 0123456789AÁBCČDĎEÉĚFGHCHIÍJKLMNŇOÓPQRŘSŠTŤUÚVWXYÝZŽ"</string>
+ <string name="fast_scroll_alphabet">"AÁBCČDĎEÉĚFGHCHIÍJKLMNŇOÓPQRŘSŠTŤUÚVWXYÝZŽ"</string>
+ <string name="fast_scroll_numeric_alphabet">"0123456789AÁBCČDĎEÉĚFGHCHIÍJKLMNŇOÓPQRŘSŠTŤUÚVWXYÝZŽ"</string>
<string name="candidates_style"><u>"kandidáti"</u></string>
<string name="ext_media_checking_notification_title">"Příprava karty SD"</string>
<string name="ext_media_checking_notification_message">"Kontrola chyb"</string>
@@ -798,18 +789,6 @@
<string name="activity_list_empty">"Nebyly nalezeny žádné odpovídající aktivity."</string>
<string name="permlab_pkgUsageStats">"aktualizovat statistiku použití součástí"</string>
<string name="permdesc_pkgUsageStats">"Umožňuje změnu shromážděných statistických údajů o použití součástí. Není určeno pro běžné aplikace."</string>
- <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
- <skip />
- <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
- <skip />
- <!-- no translation found for ime_action_go (8320845651737369027) -->
- <skip />
- <!-- no translation found for ime_action_search (658110271822807811) -->
- <skip />
- <!-- no translation found for ime_action_send (2316166556349314424) -->
- <skip />
- <!-- no translation found for ime_action_next (3138843904009813834) -->
- <skip />
- <!-- no translation found for ime_action_default (2840921885558045721) -->
+ <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
<skip />
</resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index cda8cbc..113c226 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -103,15 +103,7 @@
<string name="global_action_toggle_silent_mode">"Lautlos"</string>
<string name="global_action_silent_mode_on_status">"Ton ist bereits AUS"</string>
<string name="global_action_silent_mode_off_status">"Ton ist momentan AN"</string>
- <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
- <skip />
<string name="safeMode">"Abgesicherter Modus"</string>
- <!-- no translation found for android_system_label (6577375335728551336) -->
- <skip />
<string name="permgrouplab_costMoney">"Kostenpflichtige Dienste"</string>
<string name="permgroupdesc_costMoney">"Ermöglicht Anwendungen die Ausführung eventuell kostenpflichtiger Aktionen."</string>
<string name="permgrouplab_messages">"Ihre Nachrichten"</string>
@@ -397,8 +389,7 @@
<string name="lockscreen_emergency_call">"Notruf"</string>
<string name="lockscreen_pattern_correct">"Korrekt!"</string>
<string name="lockscreen_pattern_wrong">"Tut uns leid. Versuchen Sie es noch einmal."</string>
- <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
- <skip />
+ <string name="lockscreen_plugged_in">"Wird aufgeladen (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
<string name="lockscreen_low_battery">"Bitte Ladegerät anschließen"</string>
<string name="lockscreen_missing_sim_message_short">"Keine SIM-Karte."</string>
<string name="lockscreen_missing_sim_message">"Keine SIM-Karte im Telefon."</string>
@@ -421,15 +412,15 @@
<string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
<string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
<string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
- <!-- no translation found for hour_ampm (4329881288269772723) -->
+ <!-- no translation found for hour_ampm (7618670480400517084) -->
<skip />
- <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
+ <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
<skip />
<string name="status_bar_clear_all_button">"Benachrichtigungen löschen"</string>
<string name="status_bar_no_notifications_title">"Keine Benachrichtigungen"</string>
<string name="status_bar_ongoing_events_title">"Aktuell"</string>
<string name="status_bar_latest_events_title">"Benachrichtigungen"</string>
- <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
+ <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
<skip />
<string name="battery_status_charging">"Wird aufgeladen..."</string>
<string name="battery_low_title">"Ladegerät anschließen"</string>
@@ -578,12 +569,12 @@
<string name="Noon">"Mittag"</string>
<string name="midnight">"Mitternacht"</string>
<string name="Midnight">"Mitternacht"</string>
- <!-- no translation found for month_day (3693060561170538204) -->
+ <!-- no translation found for month_day (5565829181417740906) -->
<skip />
- <!-- no translation found for month (1976700695144952053) -->
+ <!-- no translation found for month (7026169712234774086) -->
<skip />
<string name="month_day_year">"<xliff:g id="DAY">%-d</xliff:g>. <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for month_year (2106203387378728384) -->
+ <!-- no translation found for month_year (9219019380312413367) -->
<skip />
<string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
<string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="DAY">%-d</xliff:g>. <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
@@ -612,11 +603,11 @@
<string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g>. <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>. <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>. <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>. <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="abbrev_month_day_year">"<xliff:g id="DAY">%-d</xliff:g>. <xliff:g id="MONTH">%b</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for abbrev_month_year (5966980891147982768) -->
+ <!-- no translation found for abbrev_month_year (3856424847226891943) -->
<skip />
- <!-- no translation found for abbrev_month_day (3156047263406783231) -->
+ <!-- no translation found for abbrev_month_day (5028815883653985933) -->
<skip />
- <!-- no translation found for abbrev_month (7304935052615731208) -->
+ <!-- no translation found for abbrev_month (3131032032850777433) -->
<skip />
<string name="day_of_week_long_sunday">"Sonntag"</string>
<string name="day_of_week_long_monday">"Montag"</string>
@@ -780,8 +771,8 @@
<string name="extmedia_format_message">"Möchten Sie die SD-Karte wirklich formatieren? Alle Daten auf Ihrer Karte gehen dann verloren."</string>
<string name="extmedia_format_button_format">"Format"</string>
<string name="select_input_method">"Eingabemethode auswählen"</string>
- <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
- <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style"><u>"Kandidaten"</u></string>
<string name="ext_media_checking_notification_title">"SD-Karte wird vorbereitet"</string>
<string name="ext_media_checking_notification_message">"Nach Fehlern wird gesucht"</string>
@@ -798,18 +789,6 @@
<string name="activity_list_empty">"Keine passenden Aktivitäten gefunden"</string>
<string name="permlab_pkgUsageStats">"Nutzungsstatistik der Komponente aktualisieren"</string>
<string name="permdesc_pkgUsageStats">"Ermöglicht die Änderung von gesammelten Nutzungsstatistiken der Komponente. Nicht für normale Anwendungen vorgesehen."</string>
- <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
- <skip />
- <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
- <skip />
- <!-- no translation found for ime_action_go (8320845651737369027) -->
- <skip />
- <!-- no translation found for ime_action_search (658110271822807811) -->
- <skip />
- <!-- no translation found for ime_action_send (2316166556349314424) -->
- <skip />
- <!-- no translation found for ime_action_next (3138843904009813834) -->
- <skip />
- <!-- no translation found for ime_action_default (2840921885558045721) -->
+ <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
<skip />
</resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 495f8aa..dc3fcd5 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -101,17 +101,9 @@
<string name="global_action_lock">"Bloqueo de pantalla"</string>
<string name="global_action_power_off">"Apagar"</string>
<string name="global_action_toggle_silent_mode">"Modo silencio"</string>
- <string name="global_action_silent_mode_on_status">"El sonido está desactivado. Activar."</string>
- <string name="global_action_silent_mode_off_status">"El sonido está activado. Desactivar."</string>
- <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
- <skip />
+ <string name="global_action_silent_mode_on_status">"El sonido está desactivado."</string>
+ <string name="global_action_silent_mode_off_status">"El sonido está activado."</string>
<string name="safeMode">"Modo seguro"</string>
- <!-- no translation found for android_system_label (6577375335728551336) -->
- <skip />
<string name="permgrouplab_costMoney">"Servicios por los que tienes que pagar"</string>
<string name="permgroupdesc_costMoney">"Permite que las aplicaciones realicen acciones por las que puede que tengas que pagar."</string>
<string name="permgrouplab_messages">"Tus mensajes"</string>
@@ -268,8 +260,8 @@
<string name="permdesc_brick">"Permite que la aplicación inhabilite todas las funciones del teléfono de forma permanente. Este permiso es muy peligroso."</string>
<string name="permlab_reboot">"forzar reinicio del teléfono"</string>
<string name="permdesc_reboot">"Permite que la aplicación fuerce al teléfono a reiniciarse."</string>
- <string name="permlab_mount_unmount_filesystems">"activar y desactivar sistemas de archivos"</string>
- <string name="permdesc_mount_unmount_filesystems">"Permite que las aplicaciones activen y desactiven sistemas de archivos para un almacenamiento extraíble."</string>
+ <string name="permlab_mount_unmount_filesystems">"montar y desmontar sistemas de archivos"</string>
+ <string name="permdesc_mount_unmount_filesystems">"Permite que las aplicaciones monten y desmonten sistemas de archivos para un almacenamiento extraíble."</string>
<string name="permlab_mount_format_filesystems">"formatear almacenamiento externo"</string>
<string name="permdesc_mount_format_filesystems">"Permite a la aplicación formatear un almacenamiento extraíble."</string>
<string name="permlab_vibrate">"controlar vibración"</string>
@@ -283,13 +275,13 @@
<string name="permlab_callPrivileged">"llamar directamente a cualquier número de teléfono"</string>
<string name="permdesc_callPrivileged">"Permite que la aplicación llame a cualquier número de teléfono, incluidos los números de emergencia, sin que el usuario intervenga. Las aplicaciones malintencionadas pueden realizar llamadas innecesarias e ilícitas a los servicios de emergencias."</string>
<string name="permlab_locationUpdates">"controlar las notificaciones de actualización de la ubicación"</string>
- <string name="permdesc_locationUpdates">"Permite habilitar/inhabilitar las notificaciones de actualización de la señal móvil. No está destinado al uso por parte de aplicaciones normales."</string>
+ <string name="permdesc_locationUpdates">"Permite habilitar/inhabilitar las notificaciones de actualización de la ubicación de la radio. No está destinado al uso por parte de aplicaciones normales."</string>
<string name="permlab_checkinProperties">"acceder a propiedades de registro"</string>
<string name="permdesc_checkinProperties">"Permite el acceso de lectura/escritura a las propiedades cargadas por el servicio de registro. No está destinado al uso por parte de aplicaciones normales."</string>
<string name="permlab_bindGadget">"seleccionar gadgets"</string>
<string name="permdesc_bindGadget">"Permite a la aplicación indicar al sistema qué gadgets puede utilizar cada aplicación. Con este permiso, las aplicaciones pueden permitir a otras aplicaciones acceder a datos personales. No está destinado al uso por parte de aplicaciones normales."</string>
<string name="permlab_modifyPhoneState">"modificar estado del teléfono"</string>
- <string name="permdesc_modifyPhoneState">"Permite que la aplicación controle las funciones de teléfono del dispositivo. Una aplicación con este permiso puede cambiar redes, activar y desactivar la señal móvil, etc., sin necesidad de notificar al usuario."</string>
+ <string name="permdesc_modifyPhoneState">"Permite que la aplicación controle las funciones de teléfono del dispositivo. Una aplicación con este permiso puede cambiar redes, activar y desactivar la radio, etc., sin necesidad de notificar al usuario."</string>
<string name="permlab_readPhoneState">"leer el estado del teléfono"</string>
<string name="permdesc_readPhoneState">"Permite que la aplicación acceda a las funciones de teléfono del dispositivo. Una aplicación con este permiso puede determinar el número de teléfono de este teléfono, si una llamada está activa, el número al que está vinculado esa llamada, etc."</string>
<string name="permlab_wakeLock">"impedir que el teléfono entre en modo de suspensión"</string>
@@ -353,7 +345,7 @@
<item>"Personalizar"</item>
</string-array>
<string-array name="emailAddressTypes">
- <item>"Personal"</item>
+ <item>"Personal?????"</item>
<item>"Trabajo"</item>
<item>"Otra"</item>
<item>"Personalizar"</item>
@@ -387,20 +379,19 @@
</string-array>
<string name="keyguard_password_enter_pin_code">"Introduce el código PIN"</string>
<string name="keyguard_password_wrong_pin_code">"El código PIN es incorrecto."</string>
- <string name="keyguard_label_text">"Para desbloquear el teléfono, pulsa la tecla de menú y, a continuación, pulsa 0."</string>
+ <string name="keyguard_label_text">"Para desbloquear el teléfono, pulsa MENU y, a continuación, pulsa 0."</string>
<string name="emergency_call_dialog_number_for_display">"Número de emergencia"</string>
- <string name="lockscreen_carrier_default">"(Sin cobertura)"</string>
+ <string name="lockscreen_carrier_default">"(Sin servicio)"</string>
<string name="lockscreen_screen_locked">"Pantalla bloqueada"</string>
- <string name="lockscreen_instructions_when_pattern_enabled">"Pulsa la tecla de menú para desbloquear el teléfono o realizar una llamada de emergencia."</string>
- <string name="lockscreen_instructions_when_pattern_disabled">"Pulsa la tecla de menú para desbloquear la pantalla."</string>
- <string name="lockscreen_pattern_instructions">"Dibujar patrón de desbloqueo"</string>
+ <string name="lockscreen_instructions_when_pattern_enabled">"Pulsa MENU para desbloquear el teléfono o realizar una llamada de emergencia."</string>
+ <string name="lockscreen_instructions_when_pattern_disabled">"Pulsa MENU para desbloquear el teléfono."</string>
+ <string name="lockscreen_pattern_instructions">"Crear patrón para desbloquear"</string>
<string name="lockscreen_emergency_call">"Llamada de emergencia"</string>
<string name="lockscreen_pattern_correct">"Correcto"</string>
<string name="lockscreen_pattern_wrong">"Inténtalo de nuevo"</string>
- <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
- <skip />
+ <string name="lockscreen_plugged_in">"Cargando (<xliff:g id="NUMBER">%d%%</xliff:g>)..."</string>
<string name="lockscreen_low_battery">"Conecta el cargador"</string>
- <string name="lockscreen_missing_sim_message_short">"Falta la tarjeta SIM"</string>
+ <string name="lockscreen_missing_sim_message_short">"No hay ninguna tarjeta SIM."</string>
<string name="lockscreen_missing_sim_message">"No se ha insertado ninguna tarjeta SIM en el teléfono."</string>
<string name="lockscreen_missing_sim_instructions">"Inserta una tarjeta SIM."</string>
<string name="lockscreen_network_locked_message">"Bloqueada para la red"</string>
@@ -421,20 +412,20 @@
<string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
<string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
<string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
- <!-- no translation found for hour_ampm (4329881288269772723) -->
+ <!-- no translation found for hour_ampm (7618670480400517084) -->
<skip />
- <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
+ <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
<skip />
<string name="status_bar_clear_all_button">"Cerrar notificaciones"</string>
- <string name="status_bar_no_notifications_title">"No tienes notificaciones"</string>
+ <string name="status_bar_no_notifications_title">"Ninguna notificación"</string>
<string name="status_bar_ongoing_events_title">"Entrante"</string>
<string name="status_bar_latest_events_title">"Notificaciones"</string>
- <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
+ <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
<skip />
<string name="battery_status_charging">"Cargando..."</string>
<string name="battery_low_title">"Conecta el cargador"</string>
<string name="battery_low_subtitle">"Se está agotando la batería:"</string>
- <string name="battery_low_percent_format">"menos del <xliff:g id="NUMBER">%d%%</xliff:g> disponible."</string>
+ <string name="battery_low_percent_format">"menos de <xliff:g id="NUMBER">%d%%</xliff:g> disponible."</string>
<string name="factorytest_failed">"Fallo en la prueba de fábrica"</string>
<string name="factorytest_not_system">"La acción FACTORY_TEST sólo es compatible con los paquetes instalados en /system/app."</string>
<string name="factorytest_no_action">"No se ha encontrado ningún paquete que proporcione la acción FACTORY_TEST."</string>
@@ -556,7 +547,7 @@
<string name="VideoView_error_button">"Aceptar"</string>
<string name="am">"a.m."</string>
<string name="pm">"p.m."</string>
- <string name="numeric_date">"<xliff:g id="DAY">%d</xliff:g>/<xliff:g id="MONTH">%m</xliff:g>/<xliff:g id="YEAR">%Y</xliff:g>"</string>
+ <string name="numeric_date">"<xliff:g id="MONTH">%m</xliff:g>/<xliff:g id="DAY">%d</xliff:g>/<xliff:g id="YEAR">%Y</xliff:g>"</string>
<string name="wday1_date1_time1_wday2_date2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DATE1">%2$s</xliff:g>, <xliff:g id="TIME1">%3$s</xliff:g> – <xliff:g id="WEEKDAY2">%4$s</xliff:g>, <xliff:g id="DATE2">%5$s</xliff:g>, <xliff:g id="TIME2">%6$s</xliff:g>"</string>
<string name="wday1_date1_wday2_date2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DATE1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%4$s</xliff:g>, <xliff:g id="DATE2">%5$s</xliff:g>"</string>
<string name="date1_time1_date2_time2">"<xliff:g id="DATE1">%2$s</xliff:g>, <xliff:g id="TIME1">%3$s</xliff:g> – <xliff:g id="DATE2">%5$s</xliff:g>, <xliff:g id="TIME2">%6$s</xliff:g>"</string>
@@ -569,7 +560,7 @@
<string name="relative_time">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="time_wday">"<xliff:g id="TIME_RANGE">%1$s</xliff:g>, <xliff:g id="WEEKDAY">%2$s</xliff:g>"</string>
<string name="full_date_month_first" format="date">"<xliff:g id="DAY">d</xliff:g>' de '<xliff:g id="MONTH">MMMM</xliff:g>' de '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
- <string name="full_date_day_first" format="date">"<xliff:g id="DAY">d</xliff:g>' de '<xliff:g id="MONTH">MMMM</xliff:g>' de '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
+ <string name="full_date_day_first" format="date">"<xliff:g id="MONTH">MMMM</xliff:g>' de '<xliff:g id="DAY">d</xliff:g>' de '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
<string name="medium_date_month_first" format="date">"<xliff:g id="DAY">d</xliff:g>' de '<xliff:g id="MONTH">MMM</xliff:g>' de '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
<string name="medium_date_day_first" format="date">"<xliff:g id="DAY">d</xliff:g>' '<xliff:g id="MONTH">MMM</xliff:g>', '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
<string name="twelve_hour_time_format" format="date">"<xliff:g id="HOUR">h</xliff:g>':'<xliff:g id="MINUTE">mm</xliff:g>' '<xliff:g id="AMPM">a</xliff:g>"</string>
@@ -578,45 +569,45 @@
<string name="Noon">"Mediodía"</string>
<string name="midnight">"medianoche"</string>
<string name="Midnight">"Medianoche"</string>
- <!-- no translation found for month_day (3693060561170538204) -->
+ <!-- no translation found for month_day (5565829181417740906) -->
<skip />
- <!-- no translation found for month (1976700695144952053) -->
+ <!-- no translation found for month (7026169712234774086) -->
<skip />
- <string name="month_day_year">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for month_year (2106203387378728384) -->
+ <string name="month_day_year">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
+ <!-- no translation found for month_year (9219019380312413367) -->
<skip />
<string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
<string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <string name="same_year_md1_md2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>"</string>
- <string name="same_year_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>"</string>
- <string name="same_year_mdy1_mdy2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="YEAR">%9$s</xliff:g>"</string>
+ <string name="same_year_md1_md2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>"</string>
+ <string name="same_year_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>"</string>
+ <string name="same_year_mdy1_mdy2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="YEAR">%9$s</xliff:g>"</string>
<string name="same_year_wday1_mdy1_wday2_mdy2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="YEAR">%9$s</xliff:g>"</string>
- <string name="same_year_md1_time1_md2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> de <xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> de <xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
- <string name="same_year_wday1_md1_time1_wday2_md2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+ <string name="same_year_md1_time1_md2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> de <xliff:g id="MONTH1">%2$s</xliff:g> de <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> de <xliff:g id="MONTH2">%7$s</xliff:g> de <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+ <string name="same_year_wday1_md1_time1_wday2_md2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_year_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> de <xliff:g id="MONTH1">%2$s</xliff:g> de <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> de <xliff:g id="MONTH2">%7$s</xliff:g> de <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
- <string name="same_year_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
- <string name="numeric_md1_md2">"<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>"</string>
+ <string name="same_year_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+ <string name="numeric_md1_md2">"<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2">%8$s</xliff:g>"</string>
<string name="numeric_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1_0">%3$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2_1">%8$s</xliff:g>"</string>
- <string name="numeric_mdy1_mdy2">"<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>"</string>
+ <string name="numeric_mdy1_mdy2">"<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>"</string>
<string name="numeric_wday1_mdy1_wday2_mdy2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>"</string>
- <string name="numeric_md1_time1_md2_time2">"<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
- <string name="numeric_wday1_md1_time1_wday2_md2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
- <string name="numeric_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
- <string name="numeric_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
- <string name="same_month_md1_md2">"<xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>"</string>
+ <string name="numeric_md1_time1_md2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1">%3$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+ <string name="numeric_wday1_md1_time1_wday2_md2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1_0">%3$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+ <string name="numeric_mdy1_time1_mdy2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+ <string name="numeric_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+ <string name="same_month_md1_md2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>"</string>
<string name="same_month_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>"</string>
- <string name="same_month_mdy1_mdy2">"<xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>"</string>
+ <string name="same_month_mdy1_mdy2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>"</string>
<string name="same_month_wday1_mdy1_wday2_mdy2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> de <xliff:g id="MONTH1">%2$s</xliff:g> de <xliff:g id="YEAR1">%4$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> de <xliff:g id="MONTH2">%7$s</xliff:g> de <xliff:g id="YEAR2">%9$s</xliff:g>"</string>
- <string name="same_month_md1_time1_md2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
- <string name="same_month_wday1_md1_time1_wday2_md2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+ <string name="same_month_md1_time1_md2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+ <string name="same_month_wday1_md1_time1_wday2_md2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="abbrev_month_day_year">"<xliff:g id="DAY">%-d</xliff:g> de <xliff:g id="MONTH">%b</xliff:g> de <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for abbrev_month_year (5966980891147982768) -->
+ <!-- no translation found for abbrev_month_year (3856424847226891943) -->
<skip />
- <!-- no translation found for abbrev_month_day (3156047263406783231) -->
+ <!-- no translation found for abbrev_month_day (5028815883653985933) -->
<skip />
- <!-- no translation found for abbrev_month (7304935052615731208) -->
+ <!-- no translation found for abbrev_month (3131032032850777433) -->
<skip />
<string name="day_of_week_long_sunday">"Domingo"</string>
<string name="day_of_week_long_monday">"Lunes"</string>
@@ -714,7 +705,7 @@
<string name="capital_off">"Desconectado"</string>
<string name="whichApplication">"Completar acción utilizando"</string>
<string name="alwaysUse">"Utilizar de forma predeterminada para esta acción"</string>
- <string name="clearDefaultHintMsg">"Borrar valores predeterminados en la página de configuración de la pantalla de inicio del teléfono &gt; Aplicaciones &gt; Administrar aplicaciones\"."</string>
+ <string name="clearDefaultHintMsg">"Borrar valores predeterminados en \"Página principal &gt; menú de configuración &gt; Aplicaciones &gt; Administrar aplicaciones\"."</string>
<string name="chooseActivity">"Seleccionar una acción"</string>
<string name="noApplications">"Ninguna aplicación puede realizar esta acción."</string>
<string name="aerr_title">"Lo sentimos."</string>
@@ -728,7 +719,7 @@
<string name="force_close">"Forzar cierre"</string>
<string name="wait">"Esperar"</string>
<string name="debug">"Depurar"</string>
- <string name="sendText">"Seleccionar la opción para compartir"</string>
+ <string name="sendText">"Seleccionar una acción para el texto"</string>
<string name="volume_ringtone">"Volumen del timbre"</string>
<string name="volume_music">"Volumen multimedia"</string>
<string name="volume_music_hint_playing_through_bluetooth">"Reproduciendo a través de Bluetooth"</string>
@@ -763,25 +754,25 @@
<string name="perms_show_all"><b>"Mostrar todos"</b></string>
<string name="googlewebcontenthelper_loading">"Cargando..."</string>
<string name="usb_storage_title">"Conectado por USB"</string>
- <string name="usb_storage_message">"Has conectado el teléfono al equipo mediante USB. Selecciona \"Activar\" si deseas copiar archivos entre el equipo y la tarjeta SD del teléfono."</string>
- <string name="usb_storage_button_mount">"Activar"</string>
- <string name="usb_storage_button_unmount">"No activar"</string>
+ <string name="usb_storage_message">"Has conectado el teléfono al equipo mediante USB. Selecciona \"Montar\" si deseas copiar archivos entre el equipo y la tarjeta SD del teléfono."</string>
+ <string name="usb_storage_button_mount">"Montar"</string>
+ <string name="usb_storage_button_unmount">"No montar"</string>
<string name="usb_storage_error_message">"Se ha producido un problema al intentar utilizar la tarjeta SD para el almacenamiento USB."</string>
<string name="usb_storage_notification_title">"Conectado por USB"</string>
<string name="usb_storage_notification_message">"Seleccionar para copiar archivos al/desde el equipo"</string>
- <string name="usb_storage_stop_notification_title">"Desactivar almacenar en USB"</string>
- <string name="usb_storage_stop_notification_message">"Seleccionar para desactivar USB."</string>
+ <string name="usb_storage_stop_notification_title">"Desactivar almacenamiento USB"</string>
+ <string name="usb_storage_stop_notification_message">"Selecciona esta opción para desactivar el almacenamiento USB."</string>
<string name="usb_storage_stop_title">"Desactivar almacenamiento USB"</string>
- <string name="usb_storage_stop_message">"Antes de desactivar el almacenamiento USB, asegúrate de haber desactivado el host USB. Selecciona \"Desactivar\" para desactivar el almacenamiento USB."</string>
+ <string name="usb_storage_stop_message">"Antes de desactivar el almacenamiento USB, asegúrate de haber desmontado el host USB. Selecciona \"Desactivar\" para desactivar el almacenamiento USB."</string>
<string name="usb_storage_stop_button_mount">"Desactivar"</string>
<string name="usb_storage_stop_button_unmount">"Cancelar"</string>
- <string name="usb_storage_stop_error_message">"Se ha producido un problema al desactivar el almacenamiento USB. Asegúrate de que has desactivado el host USB e inténtalo de nuevo."</string>
+ <string name="usb_storage_stop_error_message">"Se ha producido un problema al desactivar el almacenamiento USB. Asegúrate de que has desmontado el host USB e inténtalo de nuevo."</string>
<string name="extmedia_format_title">"Formatear tarjeta SD"</string>
<string name="extmedia_format_message">"¿Estás seguro de que quieres formatear la tarjeta SD? Se perderán todos los datos de la tarjeta."</string>
<string name="extmedia_format_button_format">"Formato"</string>
<string name="select_input_method">"Seleccionar método de introducción de texto"</string>
- <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
- <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style"><u>"candidatos"</u></string>
<string name="ext_media_checking_notification_title">"Preparando tarjeta SD"</string>
<string name="ext_media_checking_notification_message">"Comprobando errores"</string>
@@ -790,26 +781,14 @@
<string name="ext_media_unmountable_notification_title">"Tarjeta SD dañada"</string>
<string name="ext_media_unmountable_notification_message">"La tarjeta SD está dañada. Es posible que sea necesario volver a formatearla."</string>
<string name="ext_media_badremoval_notification_title">"La tarjeta SD se ha extraído inesperadamente."</string>
- <string name="ext_media_badremoval_notification_message">"Desactiva la tarjeta SD antes de extraerla para evitar la pérdida de datos."</string>
+ <string name="ext_media_badremoval_notification_message">"Desmonta la tarjeta SD antes de extraerla para evitar la pérdida de datos."</string>
<string name="ext_media_safe_unmount_notification_title">"Es seguro extraer la tarjeta SD."</string>
- <string name="ext_media_safe_unmount_notification_message">"Ya puedes extraer la tarjeta SD."</string>
+ <string name="ext_media_safe_unmount_notification_message">"Ya puedes extraer la tarjeta SD de forma segura."</string>
<string name="ext_media_nomedia_notification_title">"Tarjeta SD extraída"</string>
<string name="ext_media_nomedia_notification_message">"La tarjeta SD se ha extraído. Inserta una nueva tarjeta SD para aumentar la capacidad de almacenamiento de tu dispositivo."</string>
<string name="activity_list_empty">"No se ha encontrado ninguna actividad coincidente."</string>
<string name="permlab_pkgUsageStats">"actualizar estadísticas de uso de componentes"</string>
<string name="permdesc_pkgUsageStats">"Permite la modificación de estadísticas recopiladas sobre el uso de componentes. No está destinado al uso por parte de aplicaciones normales."</string>
- <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
- <skip />
- <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
- <skip />
- <!-- no translation found for ime_action_go (8320845651737369027) -->
- <skip />
- <!-- no translation found for ime_action_search (658110271822807811) -->
- <skip />
- <!-- no translation found for ime_action_send (2316166556349314424) -->
- <skip />
- <!-- no translation found for ime_action_next (3138843904009813834) -->
- <skip />
- <!-- no translation found for ime_action_default (2840921885558045721) -->
+ <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
<skip />
</resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 8bd064d..45b8f03 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -58,8 +58,8 @@
<string name="serviceClassData">"Données"</string>
<string name="serviceClassFAX">"Télécopie"</string>
<string name="serviceClassSMS">"SMS"</string>
- <string name="serviceClassDataAsync">"Asynchrones"</string>
- <string name="serviceClassDataSync">"Synchrones"</string>
+ <string name="serviceClassDataAsync">"Asynchronisées"</string>
+ <string name="serviceClassDataSync">"Synchroniser"</string>
<string name="serviceClassPacket">"Paquet"</string>
<string name="serviceClassPAD">"PAD"</string>
<string name="cfTemplateNotForwarded">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g> : non transféré"</string>
@@ -84,7 +84,7 @@
<string name="httpErrorFileNotFound">"Le fichier demandé est introuvable."</string>
<string name="httpErrorTooManyRequests">"Trop de requêtes sont en cours de traitement. Veuillez réessayer ultérieurement."</string>
<string name="contentServiceSync">"Synchroniser"</string>
- <string name="contentServiceSyncNotificationTitle">"Synchronisation"</string>
+ <string name="contentServiceSyncNotificationTitle">"Synchroniser"</string>
<string name="contentServiceTooManyDeletesNotificationDesc">"Trop de contenus supprimés (<xliff:g id="CONTENT_TYPE">%s</xliff:g>)."</string>
<string name="low_memory">"La mémoire du téléphone est pleine ! Supprimez des fichiers pour libérer de l\'espace."</string>
<string name="me">"Moi"</string>
@@ -103,15 +103,7 @@
<string name="global_action_toggle_silent_mode">"Mode silencieux"</string>
<string name="global_action_silent_mode_on_status">"Le son est désactivé."</string>
<string name="global_action_silent_mode_off_status">"Le son est activé."</string>
- <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
- <skip />
<string name="safeMode">"Mode sécurisé"</string>
- <!-- no translation found for android_system_label (6577375335728551336) -->
- <skip />
<string name="permgrouplab_costMoney">"Services payants"</string>
<string name="permgroupdesc_costMoney">"Permet aux applications d\'effectuer des opérations payantes."</string>
<string name="permgrouplab_messages">"Vos messages"</string>
@@ -124,7 +116,7 @@
<string name="permgroupdesc_network">"Permet à des applications d\'accéder à différentes fonctionnalités du réseau."</string>
<string name="permgrouplab_accounts">"Vos comptes Google"</string>
<string name="permgroupdesc_accounts">"Accédez aux comptes Google disponibles."</string>
- <string name="permgrouplab_hardwareControls">"Commandes du matériel"</string>
+ <string name="permgrouplab_hardwareControls">"Contrôles du matériel"</string>
<string name="permgroupdesc_hardwareControls">"Permet d\'accéder directement au matériel de l\'appareil."</string>
<string name="permgrouplab_phoneCalls">"Appels"</string>
<string name="permgroupdesc_phoneCalls">"Suivre, enregistrer et traiter les appels téléphoniques"</string>
@@ -132,215 +124,215 @@
<string name="permgroupdesc_systemTools">"Accès et contrôle de faible niveau du système."</string>
<string name="permgrouplab_developmentTools">"Outils de développement"</string>
<string name="permgroupdesc_developmentTools">"Ces fonctionnalités sont réservées aux développeurs d\'applications."</string>
- <string name="permlab_statusBar">"Désactivation ou modification de la barre d\'état"</string>
+ <string name="permlab_statusBar">"Désactiver ou modifier la barre d\'état"</string>
<string name="permdesc_statusBar">"Permet à une application de désactiver la barre d\'état ou d\'ajouter/supprimer des icônes système."</string>
<string name="permlab_expandStatusBar">"Agrandir/réduire la barre d\'état"</string>
<string name="permdesc_expandStatusBar">"Permet à l\'application de réduire ou d\'agrandir la barre d\'état."</string>
- <string name="permlab_processOutgoingCalls">"Interception d\'appels sortants"</string>
+ <string name="permlab_processOutgoingCalls">"Intercepter les appels sortants"</string>
<string name="permdesc_processOutgoingCalls">"Permet à l\'application de traiter des appels en cours et de modifier le numéro à composer. Des applications malveillantes peuvent suivre, rediriger ou empêcher des appels sortants."</string>
- <string name="permlab_receiveSms">"Réception de SMS"</string>
- <string name="permdesc_receiveSms">"Permet à une application de recevoir et traiter des messages SMS. Des applications malveillantes peuvent surveiller ou effacer vos messages sans que vous les ayez lus."</string>
- <string name="permlab_receiveMms">"Réception des MMS"</string>
- <string name="permdesc_receiveMms">"Permet à une application de recevoir et traiter des messages MMS. Des applications malveillantes peuvent utiliser cette fonctionnalité pour surveiller ou effacer vos messages sans que vous les ayez lus."</string>
- <string name="permlab_sendSms">"Envoi de messages SMS"</string>
+ <string name="permlab_receiveSms">"Recevoir SMS"</string>
+ <string name="permdesc_receiveSms">"Permet à une application de recevoir et traiter des messages SMS. Des applications malveillantes peuvent surveiller vos messages ou les effacer sans que vous en ayez pris connaissance."</string>
+ <string name="permlab_receiveMms">"recevoir des MMS"</string>
+ <string name="permdesc_receiveMms">"Permet à une application de recevoir et traiter des messages MMS. Des applications malveillantes peuvent utiliser cette fonctionnalité pour surveiller vos messages ou les effacer sans que vous en ayez pris connaissance."</string>
+ <string name="permlab_sendSms">"Envoyer des messages SMS"</string>
<string name="permdesc_sendSms">"Permet aux applications d\'envoyer des messages SMS. Des applications malveillantes peuvent entraîner des frais en envoyant des messages sans vous en demander la confirmation."</string>
- <string name="permlab_readSms">"Lecture des SMS ou MMS"</string>
- <string name="permdesc_readSms">"Permet à l\'application de lire les SMS enregistrés dans la mémoire de votre téléphone ou sur votre carte SIM. Des applications malveillantes peuvent lire vos messages confidentiels."</string>
- <string name="permlab_writeSms">"Modification de SMS ou de MMS"</string>
- <string name="permdesc_writeSms">"Permet à une application de modifier des messages SMS enregistrés sur votre téléphone ou sur votre carte SIM. Des applications malveillantes peuvent ainsi supprimer vos messages."</string>
- <string name="permlab_receiveWapPush">"Réception de WAP"</string>
+ <string name="permlab_readSms">"Lire les SMS ou MMS"</string>
+ <string name="permdesc_readSms">"Permet à l\'application de lire les messages SMS enregistrés dans la mémoire de votre téléphone ou sur votre carte SD. Des applications malveillantes peuvent lire vos messages confidentiels."</string>
+ <string name="permlab_writeSms">"Modifier un SMS ou un MMS"</string>
+ <string name="permdesc_writeSms">"Permet à une application d\'éditer des messages SMS enregistrés sur votre téléphone ou sur votre carte SIM. Des applications malveillantes peuvent ainsi supprimer vos messages."</string>
+ <string name="permlab_receiveWapPush">"Recevoir WAP"</string>
<string name="permdesc_receiveWapPush">"Permet à l\'application de recevoir et de traiter des messages WAP. Des applications malveillantes peuvent ainsi surveiller vos messages ou les effacer sans que vous en ayez pris connaissance."</string>
- <string name="permlab_getTasks">"Récupération des applications en cours d\'exécution"</string>
+ <string name="permlab_getTasks">"Récupérer les applications en cours d\'exécution"</string>
<string name="permdesc_getTasks">"Permet à l\'application de récupérer des informations sur des tâches en cours d\'exécution ou récemment utilisées. Des applications malveillantes peuvent ainsi obtenir des informations d\'ordre privé concernant d\'autres applications."</string>
- <string name="permlab_reorderTasks">"Réorganisation des applications en cours d\'exécution"</string>
+ <string name="permlab_reorderTasks">"Réorganiser les applications en cours d\'exécution"</string>
<string name="permdesc_reorderTasks">"Permet à une application de placer des tâches au premier plan ou en arrière-plan. Des applications malveillantes peuvent se placer inopinément au premier plan sans votre autorisation."</string>
- <string name="permlab_setDebugApp">"Activation du débogage de l\'application"</string>
+ <string name="permlab_setDebugApp">"Activer le débogage de l\'application"</string>
<string name="permdesc_setDebugApp">"Permet à une application d\'activer le mode de débogage d\'une autre application. Des applications malveillantes peuvent utiliser cette fonctionnalité pour interrompre d\'autres applications de façon inopinée."</string>
- <string name="permlab_changeConfiguration">"Modification des paramètres de l\'IU"</string>
+ <string name="permlab_changeConfiguration">"Modifier les paramètres de l\'IU"</string>
<string name="permdesc_changeConfiguration">"Permet à une application de modifier la configuration actuelle (par ex. : la taille de la police générale ou des paramètres régionaux)."</string>
- <string name="permlab_restartPackages">"Démarrage d\'autres applications"</string>
+ <string name="permlab_restartPackages">"Relancer d\'autres applications"</string>
<string name="permdesc_restartPackages">"Permet à une application de forcer le lancement d\'autres applications."</string>
- <string name="permlab_setProcessForeground">"Non-possibilité d\'interruption"</string>
+ <string name="permlab_setProcessForeground">"Empêcher l\'interruption"</string>
<string name="permdesc_setProcessForeground">"Permet à une application d\'exécuter tout processus au premier plan afin qu\'il ne puisse pas être interrompu. Les applications normales ne devraient jamais nécessiter cette fonctionnalité."</string>
- <string name="permlab_forceBack">"Fermeture forcée de l\'application"</string>
+ <string name="permlab_forceBack">"Obliger l\'application à se fermer"</string>
<string name="permdesc_forceBack">"Permet à une application de forcer une autre application exécutée au premier plan à se fermer et à passer en arrière-plan. Les applications normales ne devraient jamais avoir recours à cette fonctionnalité."</string>
- <string name="permlab_dump">"Vérification de l\'état interne du système"</string>
+ <string name="permlab_dump">"Récupérer l\'état interne du système"</string>
<string name="permdesc_dump">"Permet à l\'application de récupérer l\'état interne du système. Des applications malveillantes peuvent obtenir de nombreuses informations personnelles et sécurisées auxquelles elles ne devraient pas avoir accès."</string>
<string name="permlab_addSystemService">"Éditer des services à faible niveau"</string>
- <string name="permdesc_addSystemService">"Permet à l\'application de publier ses propres services de système de niveau inférieur. Des applications malveillantes peuvent prendre le contrôle du système et subtiliser ou endommager ses données."</string>
- <string name="permlab_runSetActivityWatcher">"Contrôle du lancement des applications"</string>
+ <string name="permdesc_addSystemService">"Permet à l\'application de publier ses propres services de système de niveau inférieur. Des applications malveillantes peuvent prendre le contrôle du système et voler ou corrompre les données qu\'il contient."</string>
+ <string name="permlab_runSetActivityWatcher">"Surveiller et contrôler tout lancement d\'application"</string>
<string name="permdesc_runSetActivityWatcher">"Permet à une application de suivre et de contrôler la façon dont le système lance des activités. Des applications malveillantes peuvent entièrement déstabiliser le système. Cette autorisation est uniquement nécessaire au développement et non pour l\'utilisation normale du téléphone."</string>
<string name="permlab_broadcastPackageRemoved">"Envoyer une diffusion sans paquet"</string>
<string name="permdesc_broadcastPackageRemoved">"Permet à une application de diffuser une notification lorsqu\'un paquet d\'application a été supprimé. Des applications malveillantes peuvent utiliser cette fonctionnalité pour interrompre d\'autres applications en cours d\'exécution."</string>
<string name="permlab_broadcastSmsReceived">"Envoyer une diffusion reçue par SMS"</string>
<string name="permdesc_broadcastSmsReceived">"Permet à une application de diffuser une notification lors de la réception d\'un message SMS. Des applications malveillantes peuvent utiliser cette fonctionnalité pour falsifier des messages SMS entrants."</string>
- <string name="permlab_broadcastWapPush">"Envoi de diffusion de réception de WAP PUSH"</string>
- <string name="permdesc_broadcastWapPush">"Permet à une application d\'envoyer une notification lors de la réception d\'un message WAP PUSH. Des applications malveillantes peuvent utiliser cette fonctionnalité pour créer de faux accusés de réception de MMS ou remplacer le contenu de toute page Web par des données malveillantes."</string>
- <string name="permlab_setProcessLimit">"Nombre maximal de processus en cours d\'exécution"</string>
+ <string name="permlab_broadcastWapPush">"Envoyer une diffusion de réception de WAP PUSH"</string>
+ <string name="permdesc_broadcastWapPush">"Permet à une application d\'envoyer une notification lors de la réception d\'un message WAP PUSH. Des applications malveillantes peuvent utiliser cette fonctionnalité pour créer de faux accusés de réception de MMS ou remplacer le contenu de toute page Internet par des données malveillantes."</string>
+ <string name="permlab_setProcessLimit">"Limiter le nombre de processus en cours d\'exécution"</string>
<string name="permdesc_setProcessLimit">"Permet à une application de contrôler le nombre de processus maximal exécutés en même temps. Les applications normales n\'ont jamais recours à cette fonctionnalité."</string>
- <string name="permlab_setAlwaysFinish">"Fermeture de toutes les applications en tâche de fond"</string>
+ <string name="permlab_setAlwaysFinish">"Fermer toutes les applications en tâche de fond"</string>
<string name="permdesc_setAlwaysFinish">"Permet à une application de vérifier si des activités sont systématiquement interrompues lorsqu\'elles sont placées en tâche de fond. Cette fonctionnalité n\'est jamais utilisée par les applications normales."</string>
- <string name="permlab_fotaUpdate">"Installation des mises à jour du système"</string>
- <string name="permdesc_fotaUpdate">"Permet à une application de recevoir des notifications sur des mises à jour système en cours et de lancer leur installation. Des applications malveillantes peuvent utiliser cette fonctionnalité pour endommager le système avec des mises à jour non autorisées ou interférer avec le processus de mise à jour."</string>
- <string name="permlab_batteryStats">"Modification des statistiques de la batterie"</string>
+ <string name="permlab_fotaUpdate">"Installer automatiquement les mises à jour du système"</string>
+ <string name="permdesc_fotaUpdate">"Permet à une application de recevoir des notifications concernant des mises à jour système en cours et de lancer leur installation. Des applications malveillantes peuvent utiliser cette fonctionnalité pour corrompre le système avec des mises à jour non autorisées ou plus généralement, pour interférer avec le processus de mise à jour."</string>
+ <string name="permlab_batteryStats">"Modifier les statistiques de la batterie"</string>
<string name="permdesc_batteryStats">"Autoriser la modification des statistiques de la batterie. Les applications normales n\'utilisent pas cette fonctionnalité."</string>
- <string name="permlab_internalSystemWindow">"Affichage de fenêtres non autorisées"</string>
+ <string name="permlab_internalSystemWindow">"Afficher les fenêtres non autorisées"</string>
<string name="permdesc_internalSystemWindow">"Permet de créer des fenêtres conçues pour l\'interface utilisateur du système interne. Les applications normales n\'utilisent pas cette fonctionnalité."</string>
- <string name="permlab_systemAlertWindow">"Affichage d\'alertes système"</string>
+ <string name="permlab_systemAlertWindow">"Afficher les alertes au niveau du système"</string>
<string name="permdesc_systemAlertWindow">"Permet à une application d\'afficher des fenêtres d\'alerte système. Des applications malveillantes peuvent masquer la totalité de l\'écran du téléphone."</string>
- <string name="permlab_setAnimationScale">"Réglage de la vitesse des animations"</string>
- <string name="permdesc_setAnimationScale">"Permet à une application de modifier à tout moment la vitesse générale des animations (pour les rendre plus lentes ou plus rapides)."</string>
- <string name="permlab_manageAppTokens">"Gestion des repères des applications"</string>
+ <string name="permlab_setAnimationScale">"Modifier la vitesse générale des animations"</string>
+ <string name="permdesc_setAnimationScale">"Permet à une application de modifier à tout moment la vitesse globale des animations (pour les rendre plus lentes ou plus rapides)."</string>
+ <string name="permlab_manageAppTokens">"Gérer les repères des applications"</string>
<string name="permdesc_manageAppTokens">"Permet à des applications de créer et gérer leurs propres jetons en ignorant leur ordre de plan normal. Les applications normales ne devraient jamais avoir recours à cette fonctionnalité."</string>
- <string name="permlab_injectEvents">"Utilisation des touches ou contrôle des commandes"</string>
+ <string name="permlab_injectEvents">"Appuyer sur des touches ou contrôler des commandes"</string>
<string name="permdesc_injectEvents">"Permet à une application de fournir ses propres commandes (touches enfoncées, etc.) à d\'autres applications. Des applications malveillantes peuvent utiliser cette fonctionnalité pour prendre le contrôle de votre téléphone."</string>
<string name="permlab_readInputState">"Enregistrer le texte saisi et les actions effectuées"</string>
<string name="permdesc_readInputState">"Permet à des applications d\'identifier les touches sur lesquelles vous appuyez même lorsque vous utilisez une autre application (lors de la saisie d\'un mot de passe, par exemple). Les applications normales ne devraient jamais avoir recours à cette fonctionnalité."</string>
- <string name="permlab_bindInputMethod">"Association à un mode de saisie"</string>
+ <string name="permlab_bindInputMethod">"connecter à un mode de saisie"</string>
<string name="permdesc_bindInputMethod">"Permet au support de se connecter à l\'interface de plus haut niveau d\'un mode de saisie. Les applications normales ne devraient jamais avoir recours à cette fonctionnalité."</string>
- <string name="permlab_setOrientation">"Changement d\'orientation de l\'écran"</string>
+ <string name="permlab_setOrientation">"Changer l\'orientation de l\'écran"</string>
<string name="permdesc_setOrientation">"Permet à une application de modifier la rotation de l\'écran à tout moment. Les applications normales ne devraient jamais avoir recours à cette fonctionnalité."</string>
- <string name="permlab_signalPersistentProcesses">"Envoi de signaux Linux aux applications"</string>
+ <string name="permlab_signalPersistentProcesses">"Envoyer des signaux Linux aux applications"</string>
<string name="permdesc_signalPersistentProcesses">"Permet à une application de demander que le signal fourni soit envoyé à tous les processus persistants."</string>
- <string name="permlab_persistentActivity">"Exécution de l\'application en continu"</string>
+ <string name="permlab_persistentActivity">"Exécuter l\'application en continu"</string>
<string name="permdesc_persistentActivity">"Permet à une application de perdurer en partie afin que le système ne puisse pas l\'utiliser pour d\'autres applications."</string>
<string name="permlab_deletePackages">"Supprimer des applications"</string>
<string name="permdesc_deletePackages">"Permet à une application de supprimer des paquets de données Android. Des applications malveillantes peuvent utiliser cette fonctionnalité pour supprimer des applications importantes."</string>
- <string name="permlab_clearAppUserData">"Suppression des données d\'autres applications"</string>
+ <string name="permlab_clearAppUserData">"Supprimer les données d\'autres applications"</string>
<string name="permdesc_clearAppUserData">"Permet à une application d\'effacer les données de l\'utilisateur."</string>
- <string name="permlab_deleteCacheFiles">"Suppression du cache d\'autres applications"</string>
+ <string name="permlab_deleteCacheFiles">"Supprimer le cache d\'autres applications"</string>
<string name="permdesc_deleteCacheFiles">"Permet à une application de supprimer des fichiers du cache."</string>
- <string name="permlab_getPackageSize">"Évaluation de l\'espace de stockage de l\'application"</string>
+ <string name="permlab_getPackageSize">"Évaluer l\'espace de stockage de l\'application"</string>
<string name="permdesc_getPackageSize">"Permet à une application de récupérer la taille de son code, de ses données et de son cache."</string>
- <string name="permlab_installPackages">"Installation directe d\'applications"</string>
+ <string name="permlab_installPackages">"Installer directement les applications"</string>
<string name="permdesc_installPackages">"Permet à une application d\'installer des nouveaux paquets de données ou des mises à jour Android. Des applications malveillantes peuvent utiliser cette fonctionnalité pour ajouter de nouvelles applications disposant d\'autorisations anormalement élevées."</string>
- <string name="permlab_clearAppCache">"Suppression des données du cache de toutes les applications"</string>
+ <string name="permlab_clearAppCache">"Effacer les données du cache de toutes les applications"</string>
<string name="permdesc_clearAppCache">"Permet à une application de libérer de l\'espace dans la mémoire du téléphone en supprimant des fichiers du répertoire du cache des applications. Cet accès est en général limité aux processus système."</string>
- <string name="permlab_readLogs">"Lecture des fichiers journaux du système"</string>
+ <string name="permlab_readLogs">"Lire les fichiers journaux du système"</string>
<string name="permdesc_readLogs">"Permet à une application de lire les différents fichiers journaux du système afin d\'obtenir des informations générales sur la façon dont vous utilisez votre téléphone, sans pour autant récupérer des informations d\'ordre personnel ou privé."</string>
- <string name="permlab_diagnostic">"Lecture/écriture dans les ressources appartenant aux diagnostics"</string>
+ <string name="permlab_diagnostic">"Lire/écrire dans les ressources appartenant aux diagnostics"</string>
<string name="permdesc_diagnostic">"Permet à une application de lire et d\'éditer toute ressource appartenant au groupe de diagnostics (par exemple, les fichiers in/dev). Ceci peut affecter la stabilité et la sécurité du système. Cette fonctionnalité est UNIQUEMENT réservée aux diagnostics matériels effectués par le fabricant ou l\'opérateur."</string>
<string name="permlab_changeComponentState">"Activer ou désactiver des éléments de l\'application"</string>
<string name="permdesc_changeComponentState">"Permet à une application d\'envoyer une notification lors de la réception d\'un message WAP PUSH. Des applications malveillantes peuvent utiliser cette fonctionnalité pour créer de faux accusés de réception de MMS ou remplacer le contenu de toute page Web par des données malveillantes."</string>
- <string name="permlab_setPreferredApplications">"Définition des applications préférées"</string>
+ <string name="permlab_setPreferredApplications">"Définir les applications préférées"</string>
<string name="permdesc_setPreferredApplications">"Permet à une application de modifier vos applications préférées. Des applications malveillantes peuvent utiliser cette fonctionnalité pour modifier discrètement les applications en cours d\'exécution, en imitant vos applications existantes afin de récupérer des données personnelles vous concernant."</string>
- <string name="permlab_writeSettings">"Modification des paramètres généraux du système"</string>
- <string name="permdesc_writeSettings">"Permet à une application de modifier les données des paramètres système. Des applications malveillantes peuvent utiliser cette fonctionnalité pour endommager la configuration de votre système."</string>
+ <string name="permlab_writeSettings">"Modifier les paramètres généraux du système"</string>
+ <string name="permdesc_writeSettings">"Permet à une application de modifier les données des paramètres du système. Des applications malveillantes peuvent utiliser cette fonctionnalité pour corrompre la configuration de votre système."</string>
<string name="permlab_writeSecureSettings">"Modifier les paramètres de sécurité du système"</string>
<string name="permdesc_writeSecureSettings">"Permet à une application de modifier les données des paramètres de sécurité du système. Les applications normales n\'utilisent pas cette fonctionnalité."</string>
- <string name="permlab_writeGservices">"Modification de la carte des services Google"</string>
+ <string name="permlab_writeGservices">"Modifier la carte des services Google"</string>
<string name="permdesc_writeGservices">"Permet à une application de modifier la carte des services Google. Les applications normales n\'utilisent pas cette fonctionnalité."</string>
- <string name="permlab_receiveBootCompleted">"Lancement automatique au démarrage"</string>
+ <string name="permlab_receiveBootCompleted">"Lancer automatiquement au démarrage"</string>
<string name="permdesc_receiveBootCompleted">"Permet à une application de se lancer dès la fin du démarrage du système. Cela peut rallonger le temps de démarrage requis par le téléphone. L\'application étant alors constamment en cours d\'exécution, le fonctionnement général du téléphone risque d\'être ralenti."</string>
- <string name="permlab_broadcastSticky">"Envoi d\'une diffusion persistante"</string>
+ <string name="permlab_broadcastSticky">"Envoyer une diffusion persistante"</string>
<string name="permdesc_broadcastSticky">"Permet à une application d\'envoyer des diffusions \"persistantes\", qui perdurent après la fin de la diffusion. Des applications malveillantes peuvent ainsi ralentir le téléphone ou le rendre instable en l\'obligeant à utiliser trop de mémoire."</string>
- <string name="permlab_readContacts">"Accès aux données des contacts"</string>
+ <string name="permlab_readContacts">"Lire les données des contacts"</string>
<string name="permdesc_readContacts">"Permet à une application de lire toutes les données des contacts (adresses) enregistrées sur votre téléphone. Des applications malveillantes peuvent utiliser cette fonctionnalité pour envoyer vos données à d\'autres personnes."</string>
- <string name="permlab_writeContacts">"Édition des données d\'un contact"</string>
+ <string name="permlab_writeContacts">"Éditer les données d\'un contact"</string>
<string name="permdesc_writeContacts">"Permet à une application de modifier toutes les données de contact (adresses) enregistrées sur le téléphone. Des applications malveillantes peuvent utiliser cette fonctionnalité pour effacer ou modifier vos données de contact."</string>
- <string name="permlab_writeOwnerData">"Édition les données du propriétaire"</string>
+ <string name="permlab_writeOwnerData">"Éditer les données du propriétaire"</string>
<string name="permdesc_writeOwnerData">"Permet à une application de modifier les données du propriétaire du téléphone enregistrées sur votre appareil. Des applications malveillantes peuvent utiliser cette fonctionnalité pour effacer ou modifier ces données."</string>
- <string name="permlab_readOwnerData">"Lecture des données du propriétaire"</string>
+ <string name="permlab_readOwnerData">"Lire des données du propriétaire"</string>
<string name="permdesc_readOwnerData">"Permet à une application de lire les données du propriétaire du téléphone enregistrées sur votre appareil. Des applications malveillantes peuvent utiliser cette fonctionnalité pour lire ces données."</string>
- <string name="permlab_readCalendar">"Lecture des données de l\'agenda"</string>
+ <string name="permlab_readCalendar">"Lire les données de l\'agenda"</string>
<string name="permdesc_readCalendar">"Permet à une application de lire tous les événements de l\'agenda enregistrés sur votre téléphone. Des applications malveillantes peuvent utiliser cette fonctionnalité pour envoyer les événements de votre agenda à d\'autres personnes."</string>
- <string name="permlab_writeCalendar">"Écriture des données de l\'agenda"</string>
+ <string name="permlab_writeCalendar">"Écrire les données de l\'agenda"</string>
<string name="permdesc_writeCalendar">"Permet à une application de modifier les événements de l\'agenda enregistrés sur votre téléphone. Des applications malveillantes peuvent utiliser cette fonctionnalité pour effacer ou modifier les données de votre agenda."</string>
- <string name="permlab_accessMockLocation">"Création de sources géographiques fictives à des fins de test"</string>
+ <string name="permlab_accessMockLocation">"Créer des sources géographiques fictives à des fins de test"</string>
<string name="permdesc_accessMockLocation">"Permet de créer des sources de position géographique fictives à des fins de test. Des applications malveillantes peuvent utiliser cette fonctionnalité pour remplacer la position géographique et/ou l\'état fournis par des sources réelles comme le GPS ou les fournisseurs d\'accès."</string>
- <string name="permlab_accessLocationExtraCommands">"Accès aux commandes de fournisseur de position géographique supplémentaires"</string>
+ <string name="permlab_accessLocationExtraCommands">"Accéder à des commandes de fournisseur de position géographique supplémentaires"</string>
<string name="permdesc_accessLocationExtraCommands">"Permet d\'accéder à des commandes de fournisseur de position géographique supplémentaires. Des applications malveillantes peuvent utiliser cette fonctionnalité pour interférer avec l\'utilisation du GPS ou d\'autres sources de positionnement géographique."</string>
- <string name="permlab_accessFineLocation">"Localisation OK (GPS)"</string>
+ <string name="permlab_accessFineLocation">"Position géo. OK (GPS)"</string>
<string name="permdesc_accessFineLocation">"Permet d\'accéder à des sources de positionnement géographique précises comme le Global Positioning System (GPS) sur le téléphone, lorsque ces services sont disponibles. Des applications malveillantes peuvent utiliser cette fonctionnalité pour déterminer l\'endroit où vous vous trouvez et augmenter la consommation de la batterie de votre téléphone."</string>
<string name="permlab_accessCoarseLocation">"Position géo. approximative (selon le réseau)"</string>
- <string name="permdesc_accessCoarseLocation">"Accès à des sources de positionnement approximatif (par ex. des bases de données de réseaux mobiles) pour déterminer la position géographique du téléphone, lorsque cette option est disponible. Des applications malveillantes peuvent utiliser cette fonctionnalité pour déterminer approximativement l\'endroit où vous vous trouvez."</string>
- <string name="permlab_accessSurfaceFlinger">"Accès à SurfaceFlinger"</string>
+ <string name="permdesc_accessCoarseLocation">"Accéder à des sources de positionnement géographique approximatif (par ex. des bases de données de réseaux mobiles) pour déterminer la position géographique du téléphone, lorsque cette option est disponible. Des applications malveillantes peuvent utiliser cette fonctionnalité pour déterminer approximativement l\'endroit où vous vous trouvez."</string>
+ <string name="permlab_accessSurfaceFlinger">"Accéder à SurfaceFlinger"</string>
<string name="permdesc_accessSurfaceFlinger">"Permet à certaines applications d\'utiliser les fonctionnalités SurfaceFlinger de bas niveau."</string>
- <string name="permlab_readFrameBuffer">"Lecture de la mémoire tampon graphique"</string>
+ <string name="permlab_readFrameBuffer">"Lire la mémoire tampon graphique"</string>
<string name="permdesc_readFrameBuffer">"Permet aux applications de lire/utiliser le contenu de la mémoire tampon graphique."</string>
- <string name="permlab_modifyAudioSettings">"Modification de vos paramètres audio"</string>
+ <string name="permlab_modifyAudioSettings">"Modifier vos paramètres audio"</string>
<string name="permdesc_modifyAudioSettings">"Permet à l\'application de modifier les paramètres audio généraux (p. ex. le volume et le routage)."</string>
- <string name="permlab_recordAudio">"Enregistrement de fichier audio"</string>
+ <string name="permlab_recordAudio">"Enregistrer un fichier audio"</string>
<string name="permdesc_recordAudio">"Permet à l\'application d\'accéder au chemin de l\'enregistrement audio."</string>
- <string name="permlab_camera">"Prise de photos"</string>
+ <string name="permlab_camera">"Prendre des photos"</string>
<string name="permdesc_camera">"Permet à l\'application de prendre des clichés avec l\'appareil photo. Cette fonctionnalité permet à l\'application de récupérer à tout moment les images perçues par l\'appareil."</string>
- <string name="permlab_brick">"Désactivation définitive du téléphone"</string>
+ <string name="permlab_brick">"Désactiver définitivement le téléphone"</string>
<string name="permdesc_brick">"Permet à l\'application de désactiver définitivement le téléphone. Cette fonctionnalité est très dangereuse."</string>
- <string name="permlab_reboot">"Redémarrage forcé du téléphone"</string>
+ <string name="permlab_reboot">"Forcer le redémarrage du téléphone"</string>
<string name="permdesc_reboot">"Permet à l\'application de forcer le redémarrage du téléphone."</string>
<string name="permlab_mount_unmount_filesystems">"Monter et démonter des systèmes de fichiers"</string>
<string name="permdesc_mount_unmount_filesystems">"Permet à l\'application de monter et démonter des systèmes de fichiers pour des périphériques de stockage amovibles."</string>
- <string name="permlab_mount_format_filesystems">"Formatage du périphérique de stockage externe"</string>
+ <string name="permlab_mount_format_filesystems">"formater le périphérique de stockage externe"</string>
<string name="permdesc_mount_format_filesystems">"Permet à l\'application de formater le périphérique de stockage amovible."</string>
- <string name="permlab_vibrate">"Contrôle du vibreur"</string>
+ <string name="permlab_vibrate">"Contrôler le vibreur"</string>
<string name="permdesc_vibrate">"Permet à l\'application de contrôler le vibreur."</string>
- <string name="permlab_flashlight">"Contrôle de la lampe de poche"</string>
+ <string name="permlab_flashlight">"Contrôler la lampe de poche"</string>
<string name="permdesc_flashlight">"Permet à l\'application de contrôler la lampe de poche."</string>
- <string name="permlab_hardware_test">"Tests du matériel"</string>
+ <string name="permlab_hardware_test">"Tester le matériel"</string>
<string name="permdesc_hardware_test">"Permet à l\'application de contrôler différents périphériques à des fins de test matériel."</string>
- <string name="permlab_callPhone">"Appel direct des numéros de téléphone"</string>
- <string name="permdesc_callPhone">"Permet à l\'application d\'appeler des numéros sans votre intervention. Des applications malveillantes peuvent ainsi passer des appels à votre insu qui s\'ajoutent à votre facture téléphonique. Cette fonctionnalité ne permet pas à l\'application d\'appeler des numéros d\'urgence."</string>
- <string name="permlab_callPrivileged">"Appel direct de tout numéro de téléphone"</string>
+ <string name="permlab_callPhone">"Appeler directement des numéros de téléphone"</string>
+ <string name="permdesc_callPhone">"Permet à l\'application d\'appeler des numéros de téléphone sans votre intervention. Des applications malveillantes peuvent ainsi passer appels non désirés , qui s\'ajoutent à votre facture téléphonique. Sachez que cette fonctionnalité ne permet pas à l\'application d\'appeler des numéros d\'urgence."</string>
+ <string name="permlab_callPrivileged">"Appeler directement tout numéro de téléphone"</string>
<string name="permdesc_callPrivileged">"Permet à une application d\'appeler tout numéro de téléphone (y compris les numéros d\'urgence) sans votre intervention. Des applications malveillantes peuvent passer des appels non nécessaires ou illégitimes à des services d\'urgence."</string>
- <string name="permlab_locationUpdates">"Contrôle des notifications de mise à jour de position géo."</string>
+ <string name="permlab_locationUpdates">"Contrôler les notifications de mise à jour de position géographique"</string>
<string name="permdesc_locationUpdates">"Permet l\'activation/la désactivation des notifications de mises à jour de la position géographique provenant de la radio. Les applications normales n\'utilisent pas cette fonctionnalité."</string>
- <string name="permlab_checkinProperties">"Accès aux propriétés d\'enregistrement"</string>
+ <string name="permlab_checkinProperties">"Accéder aux propriétés d\'enregistrement"</string>
<string name="permdesc_checkinProperties">"Permet un accès en lecture/écriture à des propriétés envoyées par le service d\'inscription. Les applications normales n\'utilisent pas cette fonctionnalité."</string>
<string name="permlab_bindGadget">"choisir les gadgets"</string>
<string name="permdesc_bindGadget">"Permet à l\'application de signaler au système quels gadgets peuvent être utilisés pour quelle application. Cette autorisation permet aux applications de fournir l\'accès à des données personnelles à d\'autres applications. Cette option n\'est pas utilisée par les applications standard."</string>
- <string name="permlab_modifyPhoneState">"Modification de l\'état du téléphone"</string>
- <string name="permdesc_modifyPhoneState">"Permet à une application de contrôler les fonctionnalités téléphoniques de l\'appareil. Une application bénéficiant de cette autorisation peut changer de réseau, éteindre et allumer la radio du téléphone, etc., sans vous en avertir."</string>
- <string name="permlab_readPhoneState">"Lecture de l\'état du téléphone"</string>
+ <string name="permlab_modifyPhoneState">"Modifier l\'état du téléphone"</string>
+ <string name="permdesc_modifyPhoneState">"Permet à une application de contrôler les fonctionnalités téléphoniques de l\'appareil. Une application bénéficiant de cette autorisation peut changer de réseau, éteindre et allumer la radio du téléphone, etc., sans vous en notifier."</string>
+ <string name="permlab_readPhoneState">"Lire l\'état du téléphone"</string>
<string name="permdesc_readPhoneState">"Permet à l\'application d\'accéder aux fonctionnalités d\'appel du téléphone. L\'application peut alors déterminer le numéro de téléphone de l\'appareil, savoir si un appel est en cours, identifier le numéro appelé, etc."</string>
- <string name="permlab_wakeLock">"Arrêt du mode veille sur le téléphone"</string>
+ <string name="permlab_wakeLock">"Empêcher le téléphone de passer en mode veille"</string>
<string name="permdesc_wakeLock">"Permet à une application d\'empêcher votre téléphone de passer en mode veille."</string>
<string name="permlab_devicePower">"Éteindre ou allumer le téléphone"</string>
<string name="permdesc_devicePower">"Permet à l\'application d\'éteindre et d\'allumer le téléphone."</string>
- <string name="permlab_factoryTest">"Exécution en mode Test d\'usine"</string>
+ <string name="permlab_factoryTest">"Exécuter en mode Test d\'usine"</string>
<string name="permdesc_factoryTest">"Permet d\'exécuter en tant que test fabricant de faible niveau en autorisant l\'accès au matériel du téléphone. Cette fonctionnalité est uniquement disponible lorsque le téléphone est en mode de test fabricant."</string>
- <string name="permlab_setWallpaper">"Configuration du fond d\'écran"</string>
- <string name="permdesc_setWallpaper">"Permet à une application de définir l\'arrière-plan du système."</string>
- <string name="permlab_setWallpaperHints">"Sélection de la la taille du fond d\'écran"</string>
- <string name="permdesc_setWallpaperHints">"Permet à une application de définir la taille d\'arrière-plan du système."</string>
- <string name="permlab_masterClear">"Réinitialisation du système à ses paramètres d\'usine"</string>
- <string name="permdesc_masterClear">"Permet à une application de réinitialiser entièrement le système afin de rétablir ses valeurs d\'usine et d\'effacer toutes les données, configurations et applications installées."</string>
- <string name="permlab_setTimeZone">"Sélection du fuseau horaire"</string>
+ <string name="permlab_setWallpaper">"Configurer le fond d\'écran"</string>
+ <string name="permdesc_setWallpaper">"Permet à une application de définir le fond d\'écran du système."</string>
+ <string name="permlab_setWallpaperHints">"Définir les informations relatives à la taille du fond d\'écran"</string>
+ <string name="permdesc_setWallpaperHints">"Permet à une application de définir les informations relatives à la taille du fond d\'écran du système."</string>
+ <string name="permlab_masterClear">"Réinitialiser le système à ses paramètres d\'usine"</string>
+ <string name="permdesc_masterClear">"Permet à une application de réinitialiser entièrement le système afin qu\'il récupère ses valeurs d\'usine et d\'effacer toutes les données, configurations et applications installées."</string>
+ <string name="permlab_setTimeZone">"Définir le fuseau horaire"</string>
<string name="permdesc_setTimeZone">"Permet à l\'application de modifier le fuseau horaire du téléphone."</string>
- <string name="permlab_getAccounts">"Identification des comptes connus"</string>
+ <string name="permlab_getAccounts">"Identifier des comptes connus"</string>
<string name="permdesc_getAccounts">"Permet à une application d\'obtenir la liste des comptes connus du téléphone."</string>
- <string name="permlab_accessNetworkState">"Affichage de l\'état du réseau"</string>
+ <string name="permlab_accessNetworkState">"Afficher l\'état du réseau"</string>
<string name="permdesc_accessNetworkState">"Permet à une application d\'afficher l\'état de tous les réseaux."</string>
<string name="permlab_createNetworkSockets">"Accès Internet complet"</string>
<string name="permdesc_createNetworkSockets">"Permet à une application de créer des connecteurs réseau."</string>
- <string name="permlab_writeApnSettings">"Écriture des paramètres \"Nom des points d\'accès\""</string>
+ <string name="permlab_writeApnSettings">"Écrire les paramètres de Nom des points d\'accès"</string>
<string name="permdesc_writeApnSettings">"Permet à une application de modifier les paramètres APN (Nom des points d\'accès), comme le proxy ou le port de tout APN."</string>
- <string name="permlab_changeNetworkState">"Modification de la connectivité du réseau"</string>
+ <string name="permlab_changeNetworkState">"Modifier la connectivité du réseau"</string>
<string name="permdesc_changeNetworkState">"Permet à une application de modifier la connectivité du réseau."</string>
<string name="permlab_changeBackgroundDataSetting">"modifier le paramètre d\'utilisation des données en arrière-plan"</string>
<string name="permdesc_changeBackgroundDataSetting">"Permet à une application de modifier le paramètre d\'utilisation des données en arrière-plan."</string>
- <string name="permlab_accessWifiState">"Affichage de l\'état du Wi-Fi"</string>
+ <string name="permlab_accessWifiState">"Afficher l\'état du Wi-Fi"</string>
<string name="permdesc_accessWifiState">"Permet à une application d\'afficher des informations concernant l\'état du Wi-Fi."</string>
<string name="permlab_changeWifiState">"Modifier l\'état du Wi-Fi"</string>
<string name="permdesc_changeWifiState">"Permet à une application de se connecter à des points d\'accès Wi-Fi, de s\'en déconnecter et de modifier des réseaux Wi-Fi configurés."</string>
<string name="permlab_bluetoothAdmin">"Gestion Bluetooth"</string>
<string name="permdesc_bluetoothAdmin">"Permet à une application de configurer le téléphone Bluetooth local, d\'identifier des périphériques distants et de les associer au téléphone."</string>
- <string name="permlab_bluetooth">"Création de connexions Bluetooth"</string>
+ <string name="permlab_bluetooth">"Créer des connexions Bluetooth"</string>
<string name="permdesc_bluetooth">"Permet à une application d\'obtenir la configuration du téléphone Bluetooth local et de créer et accepter des connexions à des appareils associés."</string>
- <string name="permlab_disableKeyguard">"Désactivation du verrouillage des touches"</string>
+ <string name="permlab_disableKeyguard">"Désactiver le verrouillage des touches"</string>
<string name="permdesc_disableKeyguard">"Permet à une application de désactiver le verrouillage des touches et toute sécurité par mot de passe. Exemple : Votre téléphone désactive le verrouillage du clavier lorsque vous recevez un appel, puis le réactive lorsque vous raccrochez."</string>
- <string name="permlab_readSyncSettings">"Lecture des paramètres de synchronisation"</string>
+ <string name="permlab_readSyncSettings">"Lire les paramètres de synchronisation"</string>
<string name="permdesc_readSyncSettings">"Permet à une application de lire les paramètres de synchronisation (par ex. savoir si la synchronisation est activée pour les Contacts)."</string>
- <string name="permlab_writeSyncSettings">"Écriture des paramètres de synchronisation"</string>
+ <string name="permlab_writeSyncSettings">"Écrire les paramètres de synchronisation"</string>
<string name="permdesc_writeSyncSettings">"Permet à une application de modifier les paramètres de synchronisation (p. ex. si la synchronisation est activée pour les contacts)."</string>
- <string name="permlab_readSyncStats">"Lecture des statistiques de synchronisation"</string>
+ <string name="permlab_readSyncStats">"Lire les statistiques de synchronisation"</string>
<string name="permdesc_readSyncStats">"Permet à une application de lire les statistiques de synchronisation (par ex. l\'historique des synchronisations effectuées)."</string>
- <string name="permlab_subscribedFeedsRead">"Lecture des flux auxquels vous êtes abonné"</string>
+ <string name="permlab_subscribedFeedsRead">"Lire les flux auxquels vous êtes abonné"</string>
<string name="permdesc_subscribedFeedsRead">"Permet à une application d\'obtenir des informations sur les flux récemment synchronisés."</string>
- <string name="permlab_subscribedFeedsWrite">"Écriture des flux auxquels vous êtes abonné"</string>
+ <string name="permlab_subscribedFeedsWrite">"Écrire les flux auxquels vous êtes abonné"</string>
<string name="permdesc_subscribedFeedsWrite">"Permet à une application de modifier vos flux synchronisés actuels. Cette fonctionnalité peut permettre à des applications malveillantes de modifier vos flux synchronisés."</string>
- <string name="permlab_readDictionary">"Lecture du dictionnaire défini par l\'utilisateur"</string>
+ <string name="permlab_readDictionary">"lire le dictionnaire défini par l\'utilisateur"</string>
<string name="permdesc_readDictionary">"Permet à une application de lire tous les mots, noms et expressions que l\'utilisateur a pu enregistrer dans son dictionnaire personnel."</string>
- <string name="permlab_writeDictionary">"Enregistrement dans le dictionnaire défini par l\'utilisateur"</string>
+ <string name="permlab_writeDictionary">"enregistrer dans le dictionnaire défini par l\'utilisateur"</string>
<string name="permdesc_writeDictionary">"Permet à une application d\'enregistrer de nouveaux mots dans le dictionnaire personnel de l\'utilisateur."</string>
<string-array name="phoneTypes">
<item>"Domicile"</item>
@@ -396,9 +388,8 @@
<string name="lockscreen_pattern_instructions">"Dessinez un motif pour déverrouiller le téléphone"</string>
<string name="lockscreen_emergency_call">"Appel d\'urgence"</string>
<string name="lockscreen_pattern_correct">"Combinaison correcte !"</string>
- <string name="lockscreen_pattern_wrong">"Désolé. Merci de réessayer."</string>
- <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
- <skip />
+ <string name="lockscreen_pattern_wrong">"Désolé. Merci de réessayer"</string>
+ <string name="lockscreen_plugged_in">"Chargement (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
<string name="lockscreen_low_battery">"Branchez votre chargeur."</string>
<string name="lockscreen_missing_sim_message_short">"Aucune carte SIM n\'a été trouvée."</string>
<string name="lockscreen_missing_sim_message">"Aucune carte SIM n\'est insérée dans le téléphone."</string>
@@ -413,7 +404,7 @@
<string name="lockscreen_too_many_failed_attempts_countdown">"Réessayez dans <xliff:g id="NUMBER">%d</xliff:g> secondes."</string>
<string name="lockscreen_forgot_pattern_button_text">"Motif oublié ?"</string>
<string name="lockscreen_glogin_too_many_attempts">"Trop de tentatives de motif !"</string>
- <string name="lockscreen_glogin_instructions">"Pour débloquer votre téléphone,"\n"connectez-vous à l\'aide de votre compte Google"</string>
+ <string name="lockscreen_glogin_instructions">"Pour débloquer votre téléphone,"\n"connectez-vous à votre compte Google"</string>
<string name="lockscreen_glogin_username_hint">"Nom d\'utilisateur (e-mail)"</string>
<string name="lockscreen_glogin_password_hint">"Mot de passe"</string>
<string name="lockscreen_glogin_submit_button">"Se connecter"</string>
@@ -421,19 +412,20 @@
<string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
<string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
<string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
- <!-- no translation found for hour_ampm (4329881288269772723) -->
+ <!-- no translation found for hour_ampm (7618670480400517084) -->
<skip />
- <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
+ <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
<skip />
<string name="status_bar_clear_all_button">"Effacer les notifications"</string>
<string name="status_bar_no_notifications_title">"Aucune notification"</string>
<string name="status_bar_ongoing_events_title">"En cours"</string>
<string name="status_bar_latest_events_title">"Notifications"</string>
- <string name="battery_status_text_percent_format">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
+ <skip />
<string name="battery_status_charging">"Chargement..."</string>
<string name="battery_low_title">"Branchez le chargeur"</string>
- <string name="battery_low_subtitle">"Le niveau de la batterie est bas :"</string>
- <string name="battery_low_percent_format">"Batterie restante inférieure à <xliff:g id="NUMBER">%d%%</xliff:g>."</string>
+ <string name="battery_low_subtitle">"La batterie commence à faiblir :"</string>
+ <string name="battery_low_percent_format">"Batterie restante : <xliff:g id="NUMBER">%d%%</xliff:g>"</string>
<string name="factorytest_failed">"Échec du test usine"</string>
<string name="factorytest_not_system">"L\'action FACTORY_TEST est uniquement prise en charge pour les paquets de données installés dans in/system/app."</string>
<string name="factorytest_no_action">"Impossible de trouver un paquet proposant l\'action FACTORY_TEST."</string>
@@ -556,7 +548,7 @@
<string name="am">"AM"</string>
<string name="pm">"PM"</string>
<string name="numeric_date">"<xliff:g id="DAY">%d</xliff:g>/<xliff:g id="MONTH">%m</xliff:g>/<xliff:g id="YEAR">%Y</xliff:g>"</string>
- <string name="wday1_date1_time1_wday2_date2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g> <xliff:g id="DATE1">%2$s</xliff:g>, <xliff:g id="TIME1">%3$s</xliff:g> – <xliff:g id="WEEKDAY2">%4$s</xliff:g> <xliff:g id="DATE2">%5$s</xliff:g>, <xliff:g id="TIME2">%6$s</xliff:g>"</string>
+ <string name="wday1_date1_time1_wday2_date2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DATE1">%2$s</xliff:g> <xliff:g id="TIME1">%3$s</xliff:g> – <xliff:g id="WEEKDAY2">%4$s</xliff:g>, <xliff:g id="DATE2">%5$s</xliff:g> <xliff:g id="TIME2">%6$s</xliff:g>"</string>
<string name="wday1_date1_wday2_date2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DATE1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%4$s</xliff:g>, <xliff:g id="DATE2">%5$s</xliff:g>"</string>
<string name="date1_time1_date2_time2">"<xliff:g id="DATE1">%2$s</xliff:g>, <xliff:g id="TIME1">%3$s</xliff:g> – <xliff:g id="DATE2">%5$s</xliff:g>, <xliff:g id="TIME2">%6$s</xliff:g>"</string>
<string name="date1_date2">"<xliff:g id="DATE1">%2$s</xliff:g> – <xliff:g id="DATE2">%5$s</xliff:g>"</string>
@@ -577,16 +569,17 @@
<string name="Noon">"Midi"</string>
<string name="midnight">"minuit"</string>
<string name="Midnight">"Minuit"</string>
- <string name="month_day">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g>"</string>
- <!-- no translation found for month (1976700695144952053) -->
+ <!-- no translation found for month_day (5565829181417740906) -->
+ <skip />
+ <!-- no translation found for month (7026169712234774086) -->
<skip />
<string name="month_day_year">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for month_year (2106203387378728384) -->
+ <!-- no translation found for month_year (9219019380312413367) -->
<skip />
<string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
<string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
<string name="same_year_md1_md2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>"</string>
- <string name="same_year_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>"</string>
+ <string name="same_year_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>"</string>
<string name="same_year_mdy1_mdy2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR">%9$s</xliff:g>"</string>
<string name="same_year_wday1_mdy1_wday2_mdy2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR">%9$s</xliff:g>"</string>
<string name="same_year_md1_time1_md2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="TIME2">%10$s</xliff:g>"</string>
@@ -594,26 +587,27 @@
<string name="same_year_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_year_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="numeric_md1_md2">"<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>"</string>
- <string name="numeric_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>"</string>
+ <string name="numeric_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>"</string>
<string name="numeric_mdy1_mdy2">"<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>"</string>
<string name="numeric_wday1_mdy1_wday2_mdy2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>"</string>
<string name="numeric_md1_time1_md2_time2">"<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="numeric_wday1_md1_time1_wday2_md2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="numeric_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
- <string name="numeric_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+ <string name="numeric_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_month_md1_md2">"<xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>"</string>
<string name="same_month_wday1_md1_wday2_md2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>"</string>
<string name="same_month_mdy1_mdy2">"<xliff:g id="DAY1">%3$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>"</string>
- <string name="same_month_wday1_mdy1_wday2_mdy2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>"</string>
+ <string name="same_month_wday1_mdy1_wday2_mdy2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>"</string>
<string name="same_month_md1_time1_md2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_month_wday1_md1_time1_wday2_md2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
- <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
+ <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="abbrev_month_day_year">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%b</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for abbrev_month_year (5966980891147982768) -->
+ <!-- no translation found for abbrev_month_year (3856424847226891943) -->
<skip />
- <string name="abbrev_month_day">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%b</xliff:g>"</string>
- <!-- no translation found for abbrev_month (7304935052615731208) -->
+ <!-- no translation found for abbrev_month_day (5028815883653985933) -->
+ <skip />
+ <!-- no translation found for abbrev_month (3131032032850777433) -->
<skip />
<string name="day_of_week_long_sunday">"dimanche"</string>
<string name="day_of_week_long_monday">"lundi"</string>
@@ -623,33 +617,33 @@
<string name="day_of_week_long_friday">"vendredi"</string>
<string name="day_of_week_long_saturday">"samedi"</string>
<string name="day_of_week_medium_sunday">"dim."</string>
- <string name="day_of_week_medium_monday">"Lun"</string>
- <string name="day_of_week_medium_tuesday">"Mar"</string>
- <string name="day_of_week_medium_wednesday">"Mer"</string>
- <string name="day_of_week_medium_thursday">"Jeu"</string>
- <string name="day_of_week_medium_friday">"Ven"</string>
- <string name="day_of_week_medium_saturday">"Sam"</string>
- <string name="day_of_week_short_sunday">"Dim"</string>
- <string name="day_of_week_short_monday">"Lun"</string>
- <string name="day_of_week_short_tuesday">"Mar"</string>
- <string name="day_of_week_short_wednesday">"Mer"</string>
- <string name="day_of_week_short_thursday">"Jeu"</string>
- <string name="day_of_week_short_friday">"Ven"</string>
- <string name="day_of_week_short_saturday">"Sam"</string>
- <string name="day_of_week_shorter_sunday">"Dim"</string>
- <string name="day_of_week_shorter_monday">"Lun"</string>
- <string name="day_of_week_shorter_tuesday">"Mar"</string>
- <string name="day_of_week_shorter_wednesday">"Mer"</string>
- <string name="day_of_week_shorter_thursday">"Jeu"</string>
- <string name="day_of_week_shorter_friday">"Ven"</string>
+ <string name="day_of_week_medium_monday">"lun."</string>
+ <string name="day_of_week_medium_tuesday">"mar."</string>
+ <string name="day_of_week_medium_wednesday">"mer."</string>
+ <string name="day_of_week_medium_thursday">"jeu."</string>
+ <string name="day_of_week_medium_friday">"ven."</string>
+ <string name="day_of_week_medium_saturday">"sam."</string>
+ <string name="day_of_week_short_sunday">"dim."</string>
+ <string name="day_of_week_short_monday">"lun."</string>
+ <string name="day_of_week_short_tuesday">"mar."</string>
+ <string name="day_of_week_short_wednesday">"mer."</string>
+ <string name="day_of_week_short_thursday">"jeu."</string>
+ <string name="day_of_week_short_friday">"ven."</string>
+ <string name="day_of_week_short_saturday">"sam."</string>
+ <string name="day_of_week_shorter_sunday">"dim."</string>
+ <string name="day_of_week_shorter_monday">"lun."</string>
+ <string name="day_of_week_shorter_tuesday">"mar."</string>
+ <string name="day_of_week_shorter_wednesday">"mer."</string>
+ <string name="day_of_week_shorter_thursday">"jeu."</string>
+ <string name="day_of_week_shorter_friday">"ven."</string>
<string name="day_of_week_shorter_saturday">"sam."</string>
- <string name="day_of_week_shortest_sunday">"Dim"</string>
- <string name="day_of_week_shortest_monday">"Lun"</string>
- <string name="day_of_week_shortest_tuesday">"Mar"</string>
- <string name="day_of_week_shortest_wednesday">"Mer"</string>
- <string name="day_of_week_shortest_thursday">"Jeu"</string>
- <string name="day_of_week_shortest_friday">"Ven"</string>
- <string name="day_of_week_shortest_saturday">"Sam"</string>
+ <string name="day_of_week_shortest_sunday">"dim."</string>
+ <string name="day_of_week_shortest_monday">"lun."</string>
+ <string name="day_of_week_shortest_tuesday">"Mar."</string>
+ <string name="day_of_week_shortest_wednesday">"mer."</string>
+ <string name="day_of_week_shortest_thursday">"jeu."</string>
+ <string name="day_of_week_shortest_friday">"ven."</string>
+ <string name="day_of_week_shortest_saturday">"sam."</string>
<string name="month_long_january">"janvier"</string>
<string name="month_long_february">"février"</string>
<string name="month_long_march">"mars"</string>
@@ -675,7 +669,7 @@
<string name="month_medium_november">"nov."</string>
<string name="month_medium_december">"déc."</string>
<string name="month_shortest_january">"jan."</string>
- <string name="month_shortest_february">"Ven"</string>
+ <string name="month_shortest_february">"ven."</string>
<string name="month_shortest_march">"mars"</string>
<string name="month_shortest_april">"avr."</string>
<string name="month_shortest_may">"mai"</string>
@@ -690,7 +684,7 @@
<string name="elapsed_time_short_format_h_mm_ss">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
<string name="selectAll">"Tout sélectionner"</string>
<string name="selectText">"Sélectionner le texte"</string>
- <string name="stopSelectingText">"Arrêter sélection de texte"</string>
+ <string name="stopSelectingText">"Arrêter de sélectionner du texte"</string>
<string name="cut">"Couper"</string>
<string name="cutAll">"Tout couper"</string>
<string name="copy">"Copier"</string>
@@ -709,13 +703,13 @@
<string name="dialog_alert_title">"Attention"</string>
<string name="capital_on">"ON"</string>
<string name="capital_off">"OFF"</string>
- <string name="whichApplication">"Continuer avec"</string>
- <string name="alwaysUse">"Utiliser cette application par défaut pour cette action"</string>
- <string name="clearDefaultHintMsg">"Effacer les paramètres par défaut dans les Paramètres de page d\'accueil &gt; Applications &gt; Gérer les applications."</string>
+ <string name="whichApplication">"Terminer l\'action avec"</string>
+ <string name="alwaysUse">"Utiliser cette application par défaut pour cette action."</string>
+ <string name="clearDefaultHintMsg">"Effacez les paramètres par défaut dans les Paramètres d\'accueil &gt; Applications &gt; Gérer les applications."</string>
<string name="chooseActivity">"Sélectionner une action"</string>
<string name="noApplications">"Aucune application ne peut effectuer cette action."</string>
<string name="aerr_title">"Désolé !"</string>
- <string name="aerr_application">"Fermeture soudaine de l\'application <xliff:g id="APPLICATION">%1$s</xliff:g> (du processus <xliff:g id="PROCESS">%2$s</xliff:g>). Merci de réessayer."</string>
+ <string name="aerr_application">"L\'application <xliff:g id="APPLICATION">%1$s</xliff:g> (du processus <xliff:g id="PROCESS">%2$s</xliff:g>) s\'est interrompue inopinément. Merci de réessayer."</string>
<string name="aerr_process">"Le processus <xliff:g id="PROCESS">%1$s</xliff:g> s\'est interrompu de façon inopinée. Merci de réessayer."</string>
<string name="anr_title">"Désolé !"</string>
<string name="anr_activity_application">"L\'activité <xliff:g id="ACTIVITY">%1$s</xliff:g> (de l\'application <xliff:g id="APPLICATION">%2$s</xliff:g>) ne répond pas."</string>
@@ -727,11 +721,11 @@
<string name="debug">"Débogage"</string>
<string name="sendText">"Sélectionner une action pour le texte"</string>
<string name="volume_ringtone">"Volume de la sonnerie"</string>
- <string name="volume_music">"Volume"</string>
+ <string name="volume_music">"Volume des médias"</string>
<string name="volume_music_hint_playing_through_bluetooth">"Lecture via Bluetooth"</string>
<string name="volume_call">"Volume des appels entrants"</string>
<string name="volume_bluetooth_call">"Volume d\'appels entrants sur Bluetooth"</string>
- <string name="volume_alarm">"Volume"</string>
+ <string name="volume_alarm">"Volume de l\'alarme"</string>
<string name="volume_notification">"Volume des notifications"</string>
<string name="volume_unknown">"Volume"</string>
<string name="ringtone_default">"Sonnerie par défaut"</string>
@@ -765,7 +759,7 @@
<string name="usb_storage_button_unmount">"Ne pas monter"</string>
<string name="usb_storage_error_message">"Un problème est survenu lors de l\'utilisation de votre carte SD en tant que périphérique de stockage USB."</string>
<string name="usb_storage_notification_title">"Connecté avec un câble USB"</string>
- <string name="usb_storage_notification_message">"Activez pour copier des fichiers vers/de votre ordinateur."</string>
+ <string name="usb_storage_notification_message">"Sélectionnez cette option pour copier des fichiers vers/à partir de votre ordinateur."</string>
<string name="usb_storage_stop_notification_title">"Éteindre le périphérique de stockage USB"</string>
<string name="usb_storage_stop_notification_message">"Sélectionner pour éteindre le périphérique de stockage USB"</string>
<string name="usb_storage_stop_title">"Éteindre le périphérique de stockage USB"</string>
@@ -777,15 +771,15 @@
<string name="extmedia_format_message">"Voulez-vous vraiment formater la carte SD ? Toutes les données de cette carte seront perdues."</string>
<string name="extmedia_format_button_format">"Format"</string>
<string name="select_input_method">"Sélectionner un mode de saisie"</string>
- <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
- <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style"><u>"candidats"</u></string>
<string name="ext_media_checking_notification_title">"Préparation de la carte SD"</string>
<string name="ext_media_checking_notification_message">"Recherche d\'erreurs"</string>
<string name="ext_media_nofs_notification_title">"Carte SD vide"</string>
<string name="ext_media_nofs_notification_message">"La carte SD est vide ou utilise un système de fichiers non pris en charge."</string>
<string name="ext_media_unmountable_notification_title">"Carte SD endommagée"</string>
- <string name="ext_media_unmountable_notification_message">"La carte SD est endommagée. Vous devrez peut-être reformater votre carte."</string>
+ <string name="ext_media_unmountable_notification_message">"La carte SD est endommagée. Vous devez peut-être reformater votre carte."</string>
<string name="ext_media_badremoval_notification_title">"Carte SD retirée inopinément"</string>
<string name="ext_media_badremoval_notification_message">"Désactiver la carte SD avant de la retirer pour éviter toute perte de données."</string>
<string name="ext_media_safe_unmount_notification_title">"La carte SD peut être retirée en toute sécurité"</string>
@@ -795,17 +789,6 @@
<string name="activity_list_empty">"Aucune activité correspondante trouvée"</string>
<string name="permlab_pkgUsageStats">"mettre à jour les données statistiques du composant"</string>
<string name="permdesc_pkgUsageStats">"Permet de modifier les données statistiques collectées du composant. Cette option n\'est pas utilisée par les applications standard."</string>
- <string name="tutorial_double_tap_to_zoom_message_short">"Tapez deux fois pour le zoom"</string>
- <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
- <skip />
- <!-- no translation found for ime_action_go (8320845651737369027) -->
- <skip />
- <!-- no translation found for ime_action_search (658110271822807811) -->
- <skip />
- <!-- no translation found for ime_action_send (2316166556349314424) -->
- <skip />
- <!-- no translation found for ime_action_next (3138843904009813834) -->
- <skip />
- <!-- no translation found for ime_action_default (2840921885558045721) -->
+ <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
<skip />
</resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index b4cf458..2ac9699 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -103,15 +103,7 @@
<string name="global_action_toggle_silent_mode">"Modalità silenziosa"</string>
<string name="global_action_silent_mode_on_status">"Audio non attivo"</string>
<string name="global_action_silent_mode_off_status">"Audio attivo"</string>
- <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
- <skip />
<string name="safeMode">"Modalità provvisoria"</string>
- <!-- no translation found for android_system_label (6577375335728551336) -->
- <skip />
<string name="permgrouplab_costMoney">"Servizi che prevedono un costo"</string>
<string name="permgroupdesc_costMoney">"Consentono alle applicazioni di svolgere operazioni che possono comportare un costo."</string>
<string name="permgrouplab_messages">"I tuoi messaggi"</string>
@@ -134,246 +126,246 @@
<string name="permgroupdesc_developmentTools">"Funzionalità necessarie soltanto agli sviluppatori di applicazioni."</string>
<string name="permlab_statusBar">"disattivare o modificare la barra di stato"</string>
<string name="permdesc_statusBar">"Consente all\'applicazione di disattivare la barra di stato o di aggiungere e rimuovere icone di sistema."</string>
- <string name="permlab_expandStatusBar">"espansione/compressione barra di stato"</string>
+ <string name="permlab_expandStatusBar">"espandere/comprimere la barra di stato"</string>
<string name="permdesc_expandStatusBar">"Consente all\'applicazione di espandere o comprimere la barra di stato."</string>
- <string name="permlab_processOutgoingCalls">"intercettazione chiamate in uscita"</string>
+ <string name="permlab_processOutgoingCalls">"intercettare chiamate in uscita"</string>
<string name="permdesc_processOutgoingCalls">"Consente all\'applicazione di elaborare le chiamate in uscita e di modificare il numero da comporre. Le applicazioni dannose potrebbero monitorare, deviare o impedire le chiamate in uscita."</string>
- <string name="permlab_receiveSms">"ricezione SMS"</string>
+ <string name="permlab_receiveSms">"ricevere SMS"</string>
<string name="permdesc_receiveSms">"Consente il ricevimento e l\'elaborazione di SMS da parte dell\'applicazione. Le applicazioni dannose potrebbero monitorare i messaggi o eliminarli senza visualizzarli."</string>
- <string name="permlab_receiveMms">"ricezione MMS"</string>
+ <string name="permlab_receiveMms">"ricevere MMS"</string>
<string name="permdesc_receiveMms">"Consente il ricevimento e l\'elaborazione di MMS da parte dell\'applicazione. Le applicazioni dannose potrebbero monitorare i messaggi o eliminarli senza visualizzarli."</string>
- <string name="permlab_sendSms">"invio SMS"</string>
+ <string name="permlab_sendSms">"inviare SMS"</string>
<string name="permdesc_sendSms">"Consente all\'applicazione di inviare messaggi SMS. Le applicazioni dannose potrebbero inviare messaggi a tua insaputa facendoti sostenere dei costi."</string>
- <string name="permlab_readSms">"lettura SMS o MMS"</string>
+ <string name="permlab_readSms">"leggere SMS o MMS"</string>
<string name="permdesc_readSms">"Consente all\'applicazione di leggere SMS memorizzati sul telefono o sulla SIM. Le applicazioni dannose potrebbero leggere messaggi riservati."</string>
- <string name="permlab_writeSms">"modifica SMS o MMS"</string>
+ <string name="permlab_writeSms">"modificare SMS o MMS"</string>
<string name="permdesc_writeSms">"Consente all\'applicazione di rispondere a SMS memorizzati sul telefono o sulla SIM. Le applicazioni dannose potrebbero eliminare i messaggi."</string>
- <string name="permlab_receiveWapPush">"ricezione WAP"</string>
+ <string name="permlab_receiveWapPush">"ricevere WAP"</string>
<string name="permdesc_receiveWapPush">"Consente il ricevimento e l\'elaborazione di messaggi WAP da parte dell\'applicazione. Le applicazioni dannose potrebbero monitorare i messaggi o eliminarli senza visualizzarli."</string>
- <string name="permlab_getTasks">"recupero applicazioni in esecuzione"</string>
+ <string name="permlab_getTasks">"recuperare applicazioni in esecuzione"</string>
<string name="permdesc_getTasks">"Consente all\'applicazione di recuperare informazioni sulle attività in esecuzione ed eseguite di recente. Le applicazioni dannose potrebbero essere in grado di scoprire informazioni riservate su altre applicazioni."</string>
- <string name="permlab_reorderTasks">"riordinamento applicazioni in esecuz."</string>
+ <string name="permlab_reorderTasks">"ridisporre applicazioni in esecuzione"</string>
<string name="permdesc_reorderTasks">"Consente a un\'applicazione di spostare attività in primo e secondo piano. Le applicazioni dannose possono imporsi ponendosi automaticamente in primo piano."</string>
- <string name="permlab_setDebugApp">"attivazione debug delle applicazioni"</string>
+ <string name="permlab_setDebugApp">"attivare il debug delle applicazioni"</string>
<string name="permdesc_setDebugApp">"Consente a un\'applicazione di attivare il debug per un\'altra applicazione. Le applicazioni dannose possono sfruttare questa possibilità per interrompere altre applicazioni."</string>
- <string name="permlab_changeConfiguration">"modifica impostazioni UI"</string>
+ <string name="permlab_changeConfiguration">"cambiare le impostazioni della UI"</string>
<string name="permdesc_changeConfiguration">"Consente a un\'applicazione di modificare la configurazione corrente, come le dimensioni dei caratteri locali o complessive."</string>
- <string name="permlab_restartPackages">"riavvio altre applicazioni"</string>
+ <string name="permlab_restartPackages">"riavviare altre applicazioni"</string>
<string name="permdesc_restartPackages">"Consente a un\'applicazione di riavviare forzatamente altre applicazioni."</string>
<string name="permlab_setProcessForeground">"impedire l\'interruzione"</string>
<string name="permdesc_setProcessForeground">"Consente a un\'applicazione di eseguire i processi in primo piano in modo che non possano essere interrotti. Non dovrebbe essere mai necessario per le normali applicazioni."</string>
- <string name="permlab_forceBack">"chiusura forzata dell\'applicazione"</string>
+ <string name="permlab_forceBack">"forzare la chiusura delle applicazioni"</string>
<string name="permdesc_forceBack">"Consente a un\'applicazione di forzare la chiusura di attività in primo piano. Non dovrebbe essere mai necessario per le normali applicazioni."</string>
- <string name="permlab_dump">"recupero stato interno del sistema"</string>
+ <string name="permlab_dump">"recuperare lo stato interno del sistema"</string>
<string name="permdesc_dump">"Consente all\'applicazione di recuperare lo stato interno del sistema. Le applicazioni dannose potrebbero recuperare molte informazioni riservate e protette di cui non dovrebbero avere mai bisogno."</string>
- <string name="permlab_addSystemService">"pubblicaz. servizi di basso livello"</string>
+ <string name="permlab_addSystemService">"pubblicare servizi di basso livello"</string>
<string name="permdesc_addSystemService">"Consente a un\'applicazione di pubblicare i suoi servizi di sistema di basso livello. Le applicazioni dannose potrebbero assumere il controllo del sistema e impossessarsi di dati o danneggiarli."</string>
- <string name="permlab_runSetActivityWatcher">"monitoraggio e controllo avvio applicazioni"</string>
+ <string name="permlab_runSetActivityWatcher">"monitorare e controllare l\'avvio di tutte le applicazioni"</string>
<string name="permdesc_runSetActivityWatcher">"Consente a un\'applicazione di monitorare e controllare la modalità di avvio delle attività nel sistema. Le applicazioni dannose potrebbero compromettere totalmente il sistema. Questa autorizzazione è necessaria soltanto per lo sviluppo, mai per il normale utilizzo del telefono."</string>
- <string name="permlab_broadcastPackageRemoved">"invio broadcast rimossi dal pacchetto"</string>
+ <string name="permlab_broadcastPackageRemoved">"inviare broadcast rimossi dal pacchetto"</string>
<string name="permdesc_broadcastPackageRemoved">"Consente a un\'applicazione di trasmettere una notifica di rimozione del pacchetto di un\'applicazione. Le applicazioni dannose potrebbero sfruttare questa possibilità per interrompere ogni altra applicazione in esecuzione."</string>
- <string name="permlab_broadcastSmsReceived">"invio broadcast ricevuti tramite SMS"</string>
+ <string name="permlab_broadcastSmsReceived">"inviare broadcast ricevuti tramite SMS"</string>
<string name="permdesc_broadcastSmsReceived">"Consente a un\'applicazione di trasmettere una notifica di ricevimento di un SMS. Le applicazioni dannose potrebbero sfruttare questa possibilità per far credere che siano stati ricevuti SMS."</string>
- <string name="permlab_broadcastWapPush">"invio broadcast ricevuti tramite WAP-PUSH"</string>
- <string name="permdesc_broadcastWapPush">"Consente a un\'applicazione di trasmettere una notifica di ricevimento di un messaggio WAP PUSH. Le applicazioni dannose potrebbero sfruttare questa possibilità per far credere che sia stato ricevuto un MMS o per sostituire automaticamente contenuti di pagine web con varianti dannose."</string>
+ <string name="permlab_broadcastWapPush">"inviare broadcast ricevuti tramite WAP-PUSH"</string>
+ <string name="permdesc_broadcastWapPush">"Consente a un\'applicazione di trasmettere una notifica di ricevimento di un messaggio WAP PUSH. Le applicazioni dannose potrebbero sfruttare questa possibilità per far credere che sia stato ricevuto un MMS o per sostituire automaticamente il contenuto di pagine web con varianti dannose."</string>
<string name="permlab_setProcessLimit">"numero limite di processi in esecuzione"</string>
<string name="permdesc_setProcessLimit">"Consente a un\'applicazione di stabilire il numero massimo di processi in esecuzione. Mai necessario per le normali applicazioni."</string>
- <string name="permlab_setAlwaysFinish">"chiusura applicazioni in background"</string>
+ <string name="permlab_setAlwaysFinish">"chiudere tutte le applicazioni in background"</string>
<string name="permdesc_setAlwaysFinish">"Consente a un\'applicazione di controllare se le attività sono sempre completate quando vengono messe in secondo piano. Mai necessario per le normali applicazioni."</string>
- <string name="permlab_fotaUpdate">"installazione autom. aggiornamenti di sistema"</string>
+ <string name="permlab_fotaUpdate">"installare automaticamente aggiornamenti di sistema"</string>
<string name="permdesc_fotaUpdate">"Consente a un\'applicazione di ricevere notifiche sugli aggiornamenti del sistema in sospeso e di attivarne l\'installazione. Le applicazioni dannose possono sfruttare questa possibilità per danneggiare il sistema con aggiornamenti non autorizzati, o interferire con il processo di aggiornamento."</string>
- <string name="permlab_batteryStats">"modifica statistiche batteria"</string>
+ <string name="permlab_batteryStats">"modificare le statistiche della batteria"</string>
<string name="permdesc_batteryStats">"Consente la modifica delle statistiche sulla batteria raccolte. Da non usare per normali applicazioni."</string>
- <string name="permlab_internalSystemWindow">"visualizzazione finestre non autorizzate"</string>
+ <string name="permlab_internalSystemWindow">"visualizzare finestre non autorizzate"</string>
<string name="permdesc_internalSystemWindow">"Consente la creazione di finestre destinate all\'uso nell\'interfaccia utente di sistema interna. Da non usare per normali applicazioni."</string>
- <string name="permlab_systemAlertWindow">"visualizzazione avvisi di sistema"</string>
+ <string name="permlab_systemAlertWindow">"visualizzare avvisi a livello di sistema"</string>
<string name="permdesc_systemAlertWindow">"Consente a un\'applicazione di visualizzare finestre di avviso del sistema. Le applicazioni dannose possono sfruttare questa opzione per riempire lo schermo del telefono di messaggi."</string>
- <string name="permlab_setAnimationScale">"modifica velocità di animazione globale"</string>
+ <string name="permlab_setAnimationScale">"modificare velocità di animazione globali"</string>
<string name="permdesc_setAnimationScale">"Consente a un\'applicazione di modificare la velocità di animazione globale (animazioni più veloci o più lente) in qualsiasi momento."</string>
- <string name="permlab_manageAppTokens">"gestione token applicazioni"</string>
+ <string name="permlab_manageAppTokens">"gestire i token delle applicazioni"</string>
<string name="permdesc_manageAppTokens">"Consente alle applicazioni di creare e gestire i propri token, ignorando il normale ordinamento Z. Non dovrebbe essere mai necessario per le normali applicazioni."</string>
- <string name="permlab_injectEvents">"uso tasti e pulsanti di controllo"</string>
+ <string name="permlab_injectEvents">"premere tasti e pulsanti di controllo"</string>
<string name="permdesc_injectEvents">"Consente a un\'applicazione di offrire i suoi eventi di input (pressioni di tasti etc.) ad altre applicazioni. Le applicazioni dannose possono sfruttare questa possibilità per assumere il controllo del telefono."</string>
- <string name="permlab_readInputState">"registrazione testo digitato e azioni eseguite"</string>
+ <string name="permlab_readInputState">"registrare il testo digitato e le azioni effettuate"</string>
<string name="permdesc_readInputState">"Consente il rilevamento da parte delle applicazioni dei tasti premuti anche durante l\'interazione con un\'altra applicazione (come nel caso di inserimento di una password). Non dovrebbe essere mai necessario per le normali applicazioni."</string>
- <string name="permlab_bindInputMethod">"associaz. a un metodo di inserimento"</string>
+ <string name="permlab_bindInputMethod">"associare a un metodo di inserimento"</string>
<string name="permdesc_bindInputMethod">"Consente l\'associazione all\'interfaccia principale di un metodo di inserimento. Non dovrebbe essere mai necessario per le normali applicazioni."</string>
- <string name="permlab_setOrientation">"modifica orientamento dello schermo"</string>
+ <string name="permlab_setOrientation">"cambiare l\'orientamento dello schermo"</string>
<string name="permdesc_setOrientation">"Consente a un\'applicazione di cambiare la rotazione dello schermo in qualsiasi momento. Non dovrebbe essere mai necessario per le normali applicazioni."</string>
- <string name="permlab_signalPersistentProcesses">"invio segnali Linuz alle applicazioni"</string>
+ <string name="permlab_signalPersistentProcesses">"inviare segnali Linux alle applicazioni"</string>
<string name="permdesc_signalPersistentProcesses">"Consente all\'applicazione di richiedere l\'invio del segnale fornito a tutti i processi persistenti."</string>
- <string name="permlab_persistentActivity">"esecuzione permanente delle applicazioni"</string>
+ <string name="permlab_persistentActivity">"lasciare sempre in esecuzione le applicazioni"</string>
<string name="permdesc_persistentActivity">"Consente a un\'applicazione di rendere delle sue parti costanti in modo che il sistema non possa usarla per altre applicazioni."</string>
- <string name="permlab_deletePackages">"eliminazione applicazioni"</string>
+ <string name="permlab_deletePackages">"eliminare applicazioni"</string>
<string name="permdesc_deletePackages">"Consente a un\'applicazione di eliminare pacchetti Android. Le applicazioni dannose possono sfruttare questa possibilità per eliminare importanti applicazioni."</string>
- <string name="permlab_clearAppUserData">"eliminazione dati di altre applicazioni"</string>
+ <string name="permlab_clearAppUserData">"eliminare dati di altre applicazioni"</string>
<string name="permdesc_clearAppUserData">"Consente a un\'applicazione di cancellare dati dell\'utente."</string>
- <string name="permlab_deleteCacheFiles">"eliminazione cache altre applicazioni"</string>
+ <string name="permlab_deleteCacheFiles">"eliminare le cache di altre applicazioni"</string>
<string name="permdesc_deleteCacheFiles">"Consente a un\'applicazione di eliminare file della cache."</string>
- <string name="permlab_getPackageSize">"calcolo spazio di archiviazione applicazioni"</string>
+ <string name="permlab_getPackageSize">"stabilire lo spazio di archiviazione delle applicazioni"</string>
<string name="permdesc_getPackageSize">"Consente a un\'applicazione di recuperare i suoi codici, dati e dimensioni della cache"</string>
- <string name="permlab_installPackages">"installazione diretta di applicazioni"</string>
+ <string name="permlab_installPackages">"installare direttamente applicazioni"</string>
<string name="permdesc_installPackages">"Consente a un\'applicazione di installare nuovi pacchetti Android o aggiornamenti. Le applicazioni dannose possono sfruttare questa possibilità per aggiungere nuove applicazioni con potenti autorizzazioni arbitrarie."</string>
- <string name="permlab_clearAppCache">"eliminazione dati della cache applicazioni"</string>
+ <string name="permlab_clearAppCache">"eliminare tutti i dati della cache delle applicazioni"</string>
<string name="permdesc_clearAppCache">"Consente a un\'applicazione di liberare spazio sul telefono eliminando file nella directory della cache dell\'applicazione. L\'accesso è generalmente limitato a processi di sistema."</string>
- <string name="permlab_readLogs">"lettura file di registro sistema"</string>
+ <string name="permlab_readLogs">"leggere file di registro di sistema"</string>
<string name="permdesc_readLogs">"Consente a un\'applicazione di leggere vari file di registro del sistema per trovare informazioni generali sulle operazioni effettuate con il telefono. Tali file non dovrebbero contenere informazioni personali o riservate."</string>
- <string name="permlab_diagnostic">"lettura/scrittura risorse di proprietà di diag"</string>
+ <string name="permlab_diagnostic">"leggere/scrivere a risorse di proprietà di diag"</string>
<string name="permdesc_diagnostic">"Consente a un\'applicazione di leggere le risorse del gruppo diag e scrivere a esse, per esempio i file in /dev. Questa capacità potrebbe influire sulla stabilità e sicurezza del sistema. Dovrebbe essere utilizzata SOLTANTO per diagnostiche specifiche dell\'hardware effettuate dal produttore o dall\'operatore."</string>
- <string name="permlab_changeComponentState">"attivazione/disattivazione componenti applicazioni"</string>
+ <string name="permlab_changeComponentState">"attivare o disattivare componenti delle applicazioni"</string>
<string name="permdesc_changeComponentState">"Consente a un\'applicazione di attivare o disattivare un componente di un\'altra applicazione. Le applicazioni dannose possono sfruttare questa possibilità per disattivare importanti funzionalità del telefono. Prestare attenzione con questa autorizzazione perché è possibile rendere inutilizzabili, incoerenti o instabili i componenti delle applicazioni."</string>
- <string name="permlab_setPreferredApplications">"impostazione applicazioni preferite"</string>
+ <string name="permlab_setPreferredApplications">"impostare le applicazioni preferite"</string>
<string name="permdesc_setPreferredApplications">"Consente la modifica da parte di un\'applicazione delle applicazioni preferite. Le applicazioni dannose potrebbero essere in grado di modificare automaticamente le applicazioni in esecuzione, effettuando lo spoofing delle applicazioni esistenti per raccogliere dati riservati."</string>
- <string name="permlab_writeSettings">"modifica impostazioni di sistema globali"</string>
+ <string name="permlab_writeSettings">"modificare le impostazioni di sistema globali"</string>
<string name="permdesc_writeSettings">"Consente la modifica in un\'applicazione dei dati delle impostazioni del sistema. Le applicazioni dannose possono danneggiare la configurazione del sistema."</string>
<string name="permlab_writeSecureSettings">"modificare le impostazioni di protezione del sistema"</string>
<string name="permdesc_writeSecureSettings">"Consente a un\'applicazione di modificare i dati delle impostazioni di protezione del sistema. Da non usare per normali applicazioni."</string>
- <string name="permlab_writeGservices">"modifica mappa servizi Google"</string>
+ <string name="permlab_writeGservices">"modificare la mappa dei servizi Google"</string>
<string name="permdesc_writeGservices">"Consente a un\'applicazione di modificare la mappa dei servizi Google. Da non usare per normali applicazioni."</string>
- <string name="permlab_receiveBootCompleted">"apertura automatica all\'avvio"</string>
+ <string name="permlab_receiveBootCompleted">"aprire automaticamente all\'avvio"</string>
<string name="permdesc_receiveBootCompleted">"Consente a un\'applicazione di aprirsi automaticamente al termine dell\'avvio del sistema. Potrebbe essere necessario più tempo per l\'avvio del telefono e l\'applicazione potrebbe rallentare tutte le funzioni del telefono rimanendo sempre in esecuzione."</string>
- <string name="permlab_broadcastSticky">"invio broadcast permanenti"</string>
+ <string name="permlab_broadcastSticky">"inviare broadcast permanenti"</string>
<string name="permdesc_broadcastSticky">"Consente a un\'applicazione di inviare broadcast permanenti, che permangono anche al termine del broadcast. Le applicazioni dannose possono rendere il telefono lento o instabile tramite un uso eccessivo della memoria."</string>
- <string name="permlab_readContacts">"lettura dati di contatto"</string>
+ <string name="permlab_readContacts">"leggere dati di contatto"</string>
<string name="permdesc_readContacts">"Consente la lettura da parte di un\'applicazione di tutti i dati (gli indirizzi) di contatto memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per inviare i dati ad altre persone."</string>
- <string name="permlab_writeContacts">"scrittura dati di contatto"</string>
+ <string name="permlab_writeContacts">"scrivere dati di contatto"</string>
<string name="permdesc_writeContacts">"Consente a un\'applicazione di modificare i dati (gli indirizzi) di contatto memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per cancellare o modificare i dati di contatto."</string>
- <string name="permlab_writeOwnerData">"scrittura dati proprietario"</string>
+ <string name="permlab_writeOwnerData">"scrivere dati del proprietario"</string>
<string name="permdesc_writeOwnerData">"Consente a un\'applicazione di modificare i dati del proprietario del telefono memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per cancellare o modificare tali dati."</string>
- <string name="permlab_readOwnerData">"lettura dati proprietario"</string>
+ <string name="permlab_readOwnerData">"leggere dati del proprietario"</string>
<string name="permdesc_readOwnerData">"Consente a un\'applicazione di leggere i dati del proprietario del telefono memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per leggere tali dati."</string>
- <string name="permlab_readCalendar">"lettura dati di calendario"</string>
+ <string name="permlab_readCalendar">"leggere dati di calendario"</string>
<string name="permdesc_readCalendar">"Consente la lettura da parte di un\'applicazione di tutti gli eventi di calendario memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per inviare i tuoi eventi di calendario ad altre persone."</string>
- <string name="permlab_writeCalendar">"scrittura dati di calendario"</string>
+ <string name="permlab_writeCalendar">"scrivere dati di calendario"</string>
<string name="permdesc_writeCalendar">"Consente a un\'applicazione di modificare gli eventi di calendario memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per cancellare o modificare i dati del calendario."</string>
<string name="permlab_accessMockLocation">"fonti di localizzazione fittizie per test"</string>
<string name="permdesc_accessMockLocation">"Creare fonti di localizzazione fittizie per test. Le applicazioni dannose possono sfruttare questa possibilità per sostituire la posizione e/o lo stato restituito da reali fonti di localizzazione come GPS o provider di rete."</string>
- <string name="permlab_accessLocationExtraCommands">"accesso a comandi aggiuntivi del provider di localizz."</string>
+ <string name="permlab_accessLocationExtraCommands">"accedere a comandi aggiuntivi del provider di localizzazione"</string>
<string name="permdesc_accessLocationExtraCommands">"Accedere a comandi aggiuntivi del provider di localizzazione. Le applicazioni dannose possono sfruttare questa possibilità per interferire con il funzionamento del GPS o di altre fonti di localizzazione."</string>
<string name="permlab_accessFineLocation">"localizzazione precisa (GPS)"</string>
<string name="permdesc_accessFineLocation">"Consente l\'accesso a fonti di localizzazione precisa, come il sistema GPS del telefono, se disponibile. Le applicazioni dannose possono sfruttare questa possibilità per determinare la tua posizione e, nel farlo, far esaurire più in fretta la batteria."</string>
<string name="permlab_accessCoarseLocation">"localizzazione approssimativa (basata sulla rete)"</string>
<string name="permdesc_accessCoarseLocation">"Consente l\'accesso a fonti di localizzazione geografica non puntuale (come il database della rete cellulare) per determinare una posizione approssimativa del telefono, quando possibile. Le applicazioni dannose possono sfruttare questa possibilità per determinare approssimativamente dove ti trovi."</string>
- <string name="permlab_accessSurfaceFlinger">"accesso a SurfaceFlinger"</string>
+ <string name="permlab_accessSurfaceFlinger">"accedere a SurfaceFlinger"</string>
<string name="permdesc_accessSurfaceFlinger">"Consente l\'utilizzo dell\'applicazione di funzioni di basso livello SurfaceFlinger."</string>
- <string name="permlab_readFrameBuffer">"lettura buffer di frame"</string>
+ <string name="permlab_readFrameBuffer">"leggere il buffer di frame"</string>
<string name="permdesc_readFrameBuffer">"Consente la lettura da parte dell\'applicazione dei contenuti del buffer di frame."</string>
- <string name="permlab_modifyAudioSettings">"modifica impostazioni audio"</string>
+ <string name="permlab_modifyAudioSettings">"cambiare le impostazioni audio"</string>
<string name="permdesc_modifyAudioSettings">"Consente all\'applicazione di modificare impostazioni audio globali come volume e routing."</string>
- <string name="permlab_recordAudio">"registrazione audio"</string>
+ <string name="permlab_recordAudio">"registrare audio"</string>
<string name="permdesc_recordAudio">"Consente l\'accesso dell\'applicazione al percorso di registrazione dell\'audio."</string>
- <string name="permlab_camera">"acquisizione foto"</string>
+ <string name="permlab_camera">"scattare foto"</string>
<string name="permdesc_camera">"Consente di scattare foto nell\'applicazione con la fotocamera. L\'applicazione può acquisire in qualsiasi momento le immagini rilevate dalla fotocamera."</string>
- <string name="permlab_brick">"disattivazione telefono"</string>
+ <string name="permlab_brick">"disattivare definitivamente il telefono"</string>
<string name="permdesc_brick">"Consente all\'applicazione di disattivare l\'intero telefono in modo definitivo. Questa autorizzazione è molto pericolosa."</string>
- <string name="permlab_reboot">"riavvio forzato del telefono"</string>
+ <string name="permlab_reboot">"imporre il riavvio del telefono"</string>
<string name="permdesc_reboot">"Consente all\'applicazione di imporre il riavvio del telefono."</string>
- <string name="permlab_mount_unmount_filesystems">"installazione/disinstallazione filesystem"</string>
+ <string name="permlab_mount_unmount_filesystems">"montare e smontare filesystem"</string>
<string name="permdesc_mount_unmount_filesystems">"Consente montaggio e smontaggio da parte dell\'applicazione dei filesystem degli archivi rimovibili."</string>
- <string name="permlab_mount_format_filesystems">"formattazione archivio esterno"</string>
+ <string name="permlab_mount_format_filesystems">"formatta archivio esterno"</string>
<string name="permdesc_mount_format_filesystems">"Consente all\'applicazione di formattare l\'archivio rimovibile."</string>
- <string name="permlab_vibrate">"controllo vibrazione"</string>
+ <string name="permlab_vibrate">"controllare la vibrazione"</string>
<string name="permdesc_vibrate">"Consente all\'applicazione di controllare la vibrazione."</string>
- <string name="permlab_flashlight">"controllo flash"</string>
+ <string name="permlab_flashlight">"controllare il flash"</string>
<string name="permdesc_flashlight">"Consente all\'applicazione di controllare il flash."</string>
- <string name="permlab_hardware_test">"esecuzione test hardware"</string>
+ <string name="permlab_hardware_test">"testare l\'hardware"</string>
<string name="permdesc_hardware_test">"Consente all\'applicazione di controllare varie periferiche per il test dell\'hardware."</string>
- <string name="permlab_callPhone">"chiamata diretta n. telefono"</string>
+ <string name="permlab_callPhone">"chiamare direttamente i numeri di telefono"</string>
<string name="permdesc_callPhone">"Consente all\'applicazione di chiamare numeri automaticamente. Le applicazioni dannose potrebbero far risultare chiamate impreviste sulla bolletta telefonica. Questa autorizzazione non consente all\'applicazione di chiamare numeri di emergenza."</string>
- <string name="permlab_callPrivileged">"chiamata diretta di tutti i n. telefono"</string>
+ <string name="permlab_callPrivileged">"chiamare direttamente tutti i numeri di telefono"</string>
<string name="permdesc_callPrivileged">"Consente all\'applicazione di chiamare qualsiasi numero, compresi quelli di emergenza, automaticamente. Le applicazioni dannose potrebbero effettuare chiamate non necessarie e illegali a servizi di emergenza."</string>
- <string name="permlab_locationUpdates">"controllo notifiche aggiornamento posizione"</string>
- <string name="permdesc_locationUpdates">"Consente l\'attivazione/disattivazione delle notifiche di aggiornamento della posizione dal segnale cellulare. Da non usare per normali applicazioni."</string>
- <string name="permlab_checkinProperties">"accesso a proprietà di archiviazione"</string>
+ <string name="permlab_locationUpdates">"controllare le notifiche di aggiornamento della posizione"</string>
+ <string name="permdesc_locationUpdates">"Consente l\'attivazione/disattivazione delle notifiche di aggiornamento della posizione. Da non usare per normali applicazioni."</string>
+ <string name="permlab_checkinProperties">"accedere a proprietà di archiviazione"</string>
<string name="permdesc_checkinProperties">"Consente l\'accesso di lettura/scrittura alle proprietà caricate dal servizio di archiviazione. Da non usare per normali applicazioni."</string>
<string name="permlab_bindGadget">"scegliere gadget"</string>
<string name="permdesc_bindGadget">"Consente all\'applicazione di indicare al sistema quali gadget possono essere utilizzati e da quale applicazione. Con questa autorizzazione, le applicazioni possono consentire ad altre applicazioni di accedere a dati personali. Da non usare per normali applicazioni."</string>
- <string name="permlab_modifyPhoneState">"modifica stato del telefono"</string>
- <string name="permdesc_modifyPhoneState">"Consente all\'applicazione di controllare le funzioni telefoniche del dispositivo. Un\'applicazione con questa autorizzazione può cambiare rete, attivare e disattivare il segnale cellulare e così via, senza alcuna notifica."</string>
- <string name="permlab_readPhoneState">"lettura stato del telefono"</string>
+ <string name="permlab_modifyPhoneState">"modificare lo stato del telefono"</string>
+ <string name="permdesc_modifyPhoneState">"Consente all\'applicazione di controllare le funzioni telefoniche del dispositivo. Un\'applicazione con questa autorizzazione può cambiare rete, accendere e spegnere il modulo radio del telefono e così via, il tutto automaticamente."</string>
+ <string name="permlab_readPhoneState">"leggere lo stato del telefono"</string>
<string name="permdesc_readPhoneState">"Consente l\'accesso dell\'applicazione alle funzioni telefoniche del dispositivo. Un\'applicazione con questa autorizzazione può determinare il numero del telefono in uso, se una chiamata è attiva o meno, il numero a cui è collegata la chiamata e simili."</string>
- <string name="permlab_wakeLock">"disattivazione stand-by del telefono"</string>
- <string name="permdesc_wakeLock">"Consente a un\'applicazione di impedire lo stand-by del telefono."</string>
- <string name="permlab_devicePower">"accensione o spegnimento del telefono"</string>
+ <string name="permlab_wakeLock">"impedire la sospensione del telefono"</string>
+ <string name="permdesc_wakeLock">"Consente a un\'applicazione di impedire la sospensione del telefono."</string>
+ <string name="permlab_devicePower">"accendere o spegnere il telefono"</string>
<string name="permdesc_devicePower">"Consente all\'applicazione di accendere o spegnere il telefono."</string>
- <string name="permlab_factoryTest">"esecuzione in modalità test di fabbrica"</string>
+ <string name="permlab_factoryTest">"eseguire in modalità test di fabbrica"</string>
<string name="permdesc_factoryTest">"In esecuzione come test del produttore di basso livello, consentendo l\'accesso completo all\'hardware del telefono. Disponibile soltanto quando il telefono è in esecuzione in modalità test del produttore."</string>
- <string name="permlab_setWallpaper">"impostazione sfondo"</string>
+ <string name="permlab_setWallpaper">"impostare lo sfondo"</string>
<string name="permdesc_setWallpaper">"Consente all\'applicazione di impostare lo sfondo del sistema."</string>
- <string name="permlab_setWallpaperHints">"impostaz. suggerimenti dimensioni sfondo"</string>
+ <string name="permlab_setWallpaperHints">"impostare suggerimenti per le dimensioni dello sfondo"</string>
<string name="permdesc_setWallpaperHints">"Consente all\'applicazione di impostare i suggerimenti per le dimensioni dello sfondo del sistema."</string>
- <string name="permlab_masterClear">"ripristino impostazioni predef. di fabbrica"</string>
+ <string name="permlab_masterClear">"ripristinare impostazioni predefinite di fabbrica"</string>
<string name="permdesc_masterClear">"Consente a un\'applicazione di ripristinare le impostazioni di fabbrica del sistema, eliminando tutti i dati, le configurazioni e le applicazioni installate."</string>
- <string name="permlab_setTimeZone">"impostazione fuso orario"</string>
+ <string name="permlab_setTimeZone">"impostare il fuso orario"</string>
<string name="permdesc_setTimeZone">"Consente a un\'applicazione di modificare il fuso orario del telefono."</string>
- <string name="permlab_getAccounts">"rilevamento account noti"</string>
+ <string name="permlab_getAccounts">"trovare account noti"</string>
<string name="permdesc_getAccounts">"Consente a un\'applicazione di recuperare l\'elenco di account memorizzati sul telefono."</string>
- <string name="permlab_accessNetworkState">"visualizzazione stato della rete"</string>
+ <string name="permlab_accessNetworkState">"visualizzare lo stato della rete"</string>
<string name="permdesc_accessNetworkState">"Consente a un\'applicazione di visualizzare lo stato di tutte le reti."</string>
<string name="permlab_createNetworkSockets">"accesso completo a Internet"</string>
<string name="permdesc_createNetworkSockets">"Consente a un\'applicazione di creare socket di rete."</string>
- <string name="permlab_writeApnSettings">"scrittura impostazioni APN"</string>
+ <string name="permlab_writeApnSettings">"scrivere impostazioni di nomi di punti di accesso"</string>
<string name="permdesc_writeApnSettings">"Consente a un\'applicazione di modificare le impostazioni APN, come proxy e porta di qualsiasi APN."</string>
- <string name="permlab_changeNetworkState">"modifica connettività di rete"</string>
+ <string name="permlab_changeNetworkState">"cambiare connettività di rete"</string>
<string name="permdesc_changeNetworkState">"Consente a un\'applicazione di modificare lo stato di connettività di rete."</string>
<string name="permlab_changeBackgroundDataSetting">"cambiare l\'impostazione di utilizzo dei dati in background"</string>
<string name="permdesc_changeBackgroundDataSetting">"Consente a un\'applicazione di cambiare l\'impostazione di utilizzo dei dati in background."</string>
- <string name="permlab_accessWifiState">"visualizzazione stato Wi-Fi"</string>
+ <string name="permlab_accessWifiState">"visualizzare lo stato Wi-Fi"</string>
<string name="permdesc_accessWifiState">"Consente a un\'applicazione di visualizzare le informazioni relative allo stato della connessione Wi-Fi."</string>
- <string name="permlab_changeWifiState">"modifica stato Wi-Fi"</string>
+ <string name="permlab_changeWifiState">"cambiare stato Wi-Fi"</string>
<string name="permdesc_changeWifiState">"Consente a un\'applicazione di connettersi/disconnettersi da punti di accesso Wi-Fi e di apportare modifiche alle reti Wi-Fi configurate."</string>
<string name="permlab_bluetoothAdmin">"gestione Bluetooth"</string>
<string name="permdesc_bluetoothAdmin">"Consente a un\'applicazione di configurare il telefono Bluetooth locale e di rilevare e abbinare dispositivi remoti."</string>
- <string name="permlab_bluetooth">"creazione connessioni Bluetooth"</string>
+ <string name="permlab_bluetooth">"creare connessioni Bluetooth"</string>
<string name="permdesc_bluetooth">"Consente a un\'applicazione di visualizzare la configurazione del telefono Bluetooth locale e di stabilire e accettare connessioni con dispositivi associati."</string>
- <string name="permlab_disableKeyguard">"disattivazione blocco tastiera"</string>
+ <string name="permlab_disableKeyguard">"disattivare blocco tastiera"</string>
<string name="permdesc_disableKeyguard">"Consente la disattivazione da parte di un\'applicazione del blocco tastiera e di eventuali protezioni tramite password associate. Un valido esempio è la disattivazione da parte del telefono del blocco tastiera quando riceve una telefonata in entrata, e la successiva riattivazione del blocco al termine della chiamata."</string>
- <string name="permlab_readSyncSettings">"lettura impostazioni di sincronizz."</string>
+ <string name="permlab_readSyncSettings">"leggere impostazioni di sincronizzazione"</string>
<string name="permdesc_readSyncSettings">"Consente a un\'applicazione di leggere le impostazioni di sincronizzazione, come l\'attivazione o meno della sincronizzazione per Contatti."</string>
- <string name="permlab_writeSyncSettings">"scrittura impostazioni di sincronizz."</string>
+ <string name="permlab_writeSyncSettings">"scrivere impostazioni di sincronizzazione"</string>
<string name="permdesc_writeSyncSettings">"Consente a un\'applicazione di modificare le impostazioni di sincronizzazione, come l\'attivazione o meno della sincronizzazione per Contatti."</string>
- <string name="permlab_readSyncStats">"lettura statistiche di sincronizz."</string>
+ <string name="permlab_readSyncStats">"leggere statistiche di sincronizzazione"</string>
<string name="permdesc_readSyncStats">"Consente a un\'applicazione di leggere le statistiche di sincronizzazione, per esempio la cronologia delle sincronizzazioni effettuate."</string>
- <string name="permlab_subscribedFeedsRead">"lettura feed sottoscritti"</string>
+ <string name="permlab_subscribedFeedsRead">"leggere feed sottoscritti"</string>
<string name="permdesc_subscribedFeedsRead">"Consente a un\'applicazione di ottenere dettagli sui feed attualmente sincronizzati."</string>
- <string name="permlab_subscribedFeedsWrite">"scrittura feed sottoscritti"</string>
+ <string name="permlab_subscribedFeedsWrite">"scrivere feed sottoscritti"</string>
<string name="permdesc_subscribedFeedsWrite">"Consente la modifica da parte di un\'applicazione dei feed attualmente sincronizzati. Le applicazioni dannose potrebbero essere in grado di modificare i feed sincronizzati."</string>
- <string name="permlab_readDictionary">"lettura dizionario definito dall\'utente"</string>
+ <string name="permlab_readDictionary">"leggi dizionario definito dall\'utente"</string>
<string name="permdesc_readDictionary">"Consente a un\'applicazione di leggere parole, nomi e frasi private che l\'utente potrebbe aver memorizzato nel dizionario utente."</string>
- <string name="permlab_writeDictionary">"scrittura nel dizionario definito dall\'utente"</string>
+ <string name="permlab_writeDictionary">"scrivi nel dizionario definito dall\'utente"</string>
<string name="permdesc_writeDictionary">"Consente a un\'applicazione di scrivere nuove parole nel dizionario utente."</string>
<string-array name="phoneTypes">
<item>"Casa"</item>
<item>"Cellulare"</item>
- <item>"Ufficio"</item>
- <item>"Fax ufficio"</item>
- <item>"Fax casa"</item>
+ <item>"Lavoro"</item>
+ <item>"Fax lavoro"</item>
+ <item>"Fax abitazione"</item>
<item>"Cercapersone"</item>
<item>"Altro"</item>
- <item>"Personalizzato"</item>
+ <item>"Personale"</item>
</string-array>
<string-array name="emailAddressTypes">
<item>"Casa"</item>
- <item>"Ufficio"</item>
+ <item>"Lavoro"</item>
<item>"Altro"</item>
- <item>"Personalizzato"</item>
+ <item>"Personale"</item>
</string-array>
<string-array name="postalAddressTypes">
<item>"Casa"</item>
- <item>"Ufficio"</item>
+ <item>"Lavoro"</item>
<item>"Altro"</item>
- <item>"Personalizzato"</item>
+ <item>"Personale"</item>
</string-array>
<string-array name="imAddressTypes">
<item>"Casa"</item>
- <item>"Uffico"</item>
+ <item>"Lavoro"</item>
<item>"Altro"</item>
- <item>"Personalizzato"</item>
+ <item>"Personale"</item>
</string-array>
<string-array name="organizationTypes">
- <item>"Ufficio"</item>
+ <item>"Lavoro"</item>
<item>"Altro"</item>
- <item>"Personalizzato"</item>
+ <item>"Personale"</item>
</string-array>
<string-array name="imProtocols">
<item>"AIM"</item>
@@ -397,9 +389,8 @@
<string name="lockscreen_emergency_call">"Chiamata di emergenza"</string>
<string name="lockscreen_pattern_correct">"Corretta."</string>
<string name="lockscreen_pattern_wrong">"Riprova"</string>
- <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
- <skip />
- <string name="lockscreen_low_battery">"Collegare il caricabatterie."</string>
+ <string name="lockscreen_plugged_in">"In carica (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
+ <string name="lockscreen_low_battery">"Collega il caricabatterie."</string>
<string name="lockscreen_missing_sim_message_short">"Nessuna SIM presente."</string>
<string name="lockscreen_missing_sim_message">"Nessuna SIM presente nel telefono."</string>
<string name="lockscreen_missing_sim_instructions">"Inserisci una SIM."</string>
@@ -421,20 +412,20 @@
<string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
<string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
<string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
- <!-- no translation found for hour_ampm (4329881288269772723) -->
+ <!-- no translation found for hour_ampm (7618670480400517084) -->
<skip />
- <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
+ <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
<skip />
<string name="status_bar_clear_all_button">"Cancella notifiche"</string>
<string name="status_bar_no_notifications_title">"Nessuna notifica"</string>
<string name="status_bar_ongoing_events_title">"In corso"</string>
<string name="status_bar_latest_events_title">"Notifiche"</string>
- <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
+ <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
<skip />
<string name="battery_status_charging">"In carica..."</string>
- <string name="battery_low_title">"Collegare il caricabatterie"</string>
+ <string name="battery_low_title">"Collega il caricabatterie"</string>
<string name="battery_low_subtitle">"Batteria quasi scarica:"</string>
- <string name="battery_low_percent_format">"energia residua inferiore a <xliff:g id="NUMBER">%d%%</xliff:g>."</string>
+ <string name="battery_low_percent_format">"meno di <xliff:g id="NUMBER">%d%%</xliff:g> rimanenti."</string>
<string name="factorytest_failed">"Test di fabbrica non riuscito"</string>
<string name="factorytest_not_system">"L\'azione FACTORY_TEST è supportata soltanto per i pacchetti installati in /system/app."</string>
<string name="factorytest_no_action">"Nessun pacchetto trovato che fornisca l\'azione FACTORY_TEST."</string>
@@ -578,12 +569,12 @@
<string name="Noon">"Mezzogiorno"</string>
<string name="midnight">"mezzanotte"</string>
<string name="Midnight">"Mezzanotte"</string>
- <!-- no translation found for month_day (3693060561170538204) -->
+ <!-- no translation found for month_day (5565829181417740906) -->
<skip />
- <!-- no translation found for month (1976700695144952053) -->
+ <!-- no translation found for month (7026169712234774086) -->
<skip />
- <string name="month_day_year">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for month_year (2106203387378728384) -->
+ <string name="month_day_year">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
+ <!-- no translation found for month_year (9219019380312413367) -->
<skip />
<string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
<string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
@@ -612,11 +603,11 @@
<string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="abbrev_month_day_year">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%b</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for abbrev_month_year (5966980891147982768) -->
+ <!-- no translation found for abbrev_month_year (3856424847226891943) -->
<skip />
- <!-- no translation found for abbrev_month_day (3156047263406783231) -->
+ <!-- no translation found for abbrev_month_day (5028815883653985933) -->
<skip />
- <!-- no translation found for abbrev_month (7304935052615731208) -->
+ <!-- no translation found for abbrev_month (3131032032850777433) -->
<skip />
<string name="day_of_week_long_sunday">"Domenica"</string>
<string name="day_of_week_long_monday">"Lunedì"</string>
@@ -730,7 +721,7 @@
<string name="debug">"Debug"</string>
<string name="sendText">"Seleziona un\'azione per il testo"</string>
<string name="volume_ringtone">"Volume suoneria"</string>
- <string name="volume_music">"Volume app. multimediali"</string>
+ <string name="volume_music">"Volume media"</string>
<string name="volume_music_hint_playing_through_bluetooth">"Riproduzione tramite Bluetooth"</string>
<string name="volume_call">"Volume chiamate"</string>
<string name="volume_bluetooth_call">"Volume chiamate Bluetooth"</string>
@@ -768,7 +759,7 @@
<string name="usb_storage_button_unmount">"Non collegare"</string>
<string name="usb_storage_error_message">"Problema di utilizzo della scheda SD per l\'archiviazione USB."</string>
<string name="usb_storage_notification_title">"USB collegata"</string>
- <string name="usb_storage_notification_message">"Seleziona per copiare file sul/dal tuo computer."</string>
+ <string name="usb_storage_notification_message">"Seleziona per copiare file sul/dal computer in uso."</string>
<string name="usb_storage_stop_notification_title">"Disattiva archivio USB"</string>
<string name="usb_storage_stop_notification_message">"Seleziona per disattivare archivio USB."</string>
<string name="usb_storage_stop_title">"Disattiva archivio USB"</string>
@@ -780,8 +771,8 @@
<string name="extmedia_format_message">"Formattare la scheda SD? Tutti i dati sulla scheda verranno persi."</string>
<string name="extmedia_format_button_format">"Formatta"</string>
<string name="select_input_method">"Seleziona metodo di inserimento"</string>
- <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
- <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style"><u>"candidati"</u></string>
<string name="ext_media_checking_notification_title">"Preparazione scheda SD"</string>
<string name="ext_media_checking_notification_message">"Ricerca errori"</string>
@@ -794,22 +785,10 @@
<string name="ext_media_safe_unmount_notification_title">"È possibile rimuovere la scheda SD"</string>
<string name="ext_media_safe_unmount_notification_message">"È ora possibile rimuovere la scheda SD in modo sicuro."</string>
<string name="ext_media_nomedia_notification_title">"Scheda SD rimossa"</string>
- <string name="ext_media_nomedia_notification_message">"Inserisci una nuova scheda SD per aumentare la memoria del dispositivo."</string>
+ <string name="ext_media_nomedia_notification_message">"Scheda SD rimossa. Inserisci una nuova scheda SD per aumentare la memoria del dispositivo."</string>
<string name="activity_list_empty">"Nessuna attività corrispondente trovata"</string>
<string name="permlab_pkgUsageStats">"aggiornare le statistiche di utilizzo dei componenti"</string>
<string name="permdesc_pkgUsageStats">"Consente la modifica delle statistiche di utilizzo dei componenti raccolte. Da non usare per normali applicazioni."</string>
- <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
- <skip />
- <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
- <skip />
- <!-- no translation found for ime_action_go (8320845651737369027) -->
- <skip />
- <!-- no translation found for ime_action_search (658110271822807811) -->
- <skip />
- <!-- no translation found for ime_action_send (2316166556349314424) -->
- <skip />
- <!-- no translation found for ime_action_next (3138843904009813834) -->
- <skip />
- <!-- no translation found for ime_action_default (2840921885558045721) -->
+ <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
<skip />
</resources>
diff --git a/core/res/res/values-ja-rJP/arrays.xml b/core/res/res/values-ja-rJP/arrays.xml
deleted file mode 100644
index 74e8a59..0000000
--- a/core/res/res/values-ja-rJP/arrays.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/assets/res/any/colors.xml
-**
-** Copyright 2009, Google Inc.
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<resources>
-
- <!-- Do not translate. -->
- <integer-array name="maps_starting_lat_lng">
- <item>35666667</item>
- <item>139750000</item>
- </integer-array>
- <!-- Do not translate. -->
- <integer-array name="maps_starting_zoom">
- <item>5</item>
- </integer-array>
-
-</resources>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 2a21bd3..1fa3eee 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -103,15 +103,7 @@
<string name="global_action_toggle_silent_mode">"マナーモード"</string>
<string name="global_action_silent_mode_on_status">"音声オフ"</string>
<string name="global_action_silent_mode_off_status">"サウンド:オン"</string>
- <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
- <skip />
<string name="safeMode">"セーフモード"</string>
- <!-- no translation found for android_system_label (6577375335728551336) -->
- <skip />
<string name="permgrouplab_costMoney">"料金の発生するサービス"</string>
<string name="permgroupdesc_costMoney">"料金の発生する操作をアプリケーションに許可します。"</string>
<string name="permgrouplab_messages">"送受信したメッセージ"</string>
@@ -397,8 +389,7 @@
<string name="lockscreen_emergency_call">"緊急呼"</string>
<string name="lockscreen_pattern_correct">"一致しました"</string>
<string name="lockscreen_pattern_wrong">"やり直してください"</string>
- <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
- <skip />
+ <string name="lockscreen_plugged_in">"充電中 (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
<string name="lockscreen_low_battery">"充電してください。"</string>
<string name="lockscreen_missing_sim_message_short">"SIMカードが挿入されていません"</string>
<string name="lockscreen_missing_sim_message">"SIMカードが挿入されていません"</string>
@@ -421,15 +412,15 @@
<string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
<string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
<string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
- <!-- no translation found for hour_ampm (4329881288269772723) -->
+ <!-- no translation found for hour_ampm (7618670480400517084) -->
<skip />
- <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
+ <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
<skip />
<string name="status_bar_clear_all_button">"通知を消去"</string>
<string name="status_bar_no_notifications_title">"通知なし"</string>
<string name="status_bar_ongoing_events_title">"継続中"</string>
<string name="status_bar_latest_events_title">"通知"</string>
- <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
+ <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
<skip />
<string name="battery_status_charging">"充電中..."</string>
<string name="battery_low_title">"充電してください"</string>
@@ -578,12 +569,12 @@
<string name="Noon">"正午"</string>
<string name="midnight">"午前0時"</string>
<string name="Midnight">"午前0時"</string>
- <!-- no translation found for month_day (3693060561170538204) -->
+ <!-- no translation found for month_day (5565829181417740906) -->
<skip />
- <!-- no translation found for month (1976700695144952053) -->
+ <!-- no translation found for month (7026169712234774086) -->
<skip />
<string name="month_day_year">"<xliff:g id="YEAR">%Y</xliff:g>年<xliff:g id="MONTH">%B</xliff:g><xliff:g id="DAY">%-d</xliff:g>日"</string>
- <!-- no translation found for month_year (2106203387378728384) -->
+ <!-- no translation found for month_year (9219019380312413367) -->
<skip />
<string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
<string name="date_and_time">"<xliff:g id="YEAR">%Y</xliff:g>/<xliff:g id="MONTH">%B</xliff:g>/<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
@@ -612,11 +603,11 @@
<string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="YEAR1">%4$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1">%3$s</xliff:g><xliff:g id="TIME1">%5$s</xliff:g>~<xliff:g id="YEAR2">%9$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2">%8$s</xliff:g><xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="YEAR1">%4$s</xliff:g>/<xliff:g id="MONTH1">%2$s</xliff:g>/<xliff:g id="DAY1_0">%3$s</xliff:g><xliff:g id="WEEKDAY1">%1$s</xliff:g><xliff:g id="TIME1">%5$s</xliff:g>~<xliff:g id="YEAR2">%9$s</xliff:g>/<xliff:g id="MONTH2">%7$s</xliff:g>/<xliff:g id="DAY2_1">%8$s</xliff:g><xliff:g id="WEEKDAY2">%6$s</xliff:g><xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="abbrev_month_day_year">"<xliff:g id="YEAR">%Y</xliff:g>/<xliff:g id="MONTH">%b</xliff:g>/<xliff:g id="DAY">%-d</xliff:g>"</string>
- <!-- no translation found for abbrev_month_year (5966980891147982768) -->
+ <!-- no translation found for abbrev_month_year (3856424847226891943) -->
<skip />
- <!-- no translation found for abbrev_month_day (3156047263406783231) -->
+ <!-- no translation found for abbrev_month_day (5028815883653985933) -->
<skip />
- <!-- no translation found for abbrev_month (7304935052615731208) -->
+ <!-- no translation found for abbrev_month (3131032032850777433) -->
<skip />
<string name="day_of_week_long_sunday">"日曜日"</string>
<string name="day_of_week_long_monday">"月曜日"</string>
@@ -780,8 +771,8 @@
<string name="extmedia_format_message">"SDカードをフォーマットしてもよろしいですか?カード内のすべてのデータが失われます。"</string>
<string name="extmedia_format_button_format">"フォーマット"</string>
<string name="select_input_method">"入力方法の選択"</string>
- <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
- <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style"><u>"候補"</u></string>
<string name="ext_media_checking_notification_title">"SDカードの準備中"</string>
<string name="ext_media_checking_notification_message">"エラーを確認中"</string>
@@ -798,18 +789,6 @@
<string name="activity_list_empty">"一致するアクティビティが見つかりません"</string>
<string name="permlab_pkgUsageStats">"コンポーネント使用状況に関する統計情報の更新"</string>
<string name="permdesc_pkgUsageStats">"収集されたコンポーネント使用状況に関する統計情報の変更を許可します。通常のアプリケーションでは使用しません。"</string>
- <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
- <skip />
- <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
- <skip />
- <!-- no translation found for ime_action_go (8320845651737369027) -->
- <skip />
- <!-- no translation found for ime_action_search (658110271822807811) -->
- <skip />
- <!-- no translation found for ime_action_send (2316166556349314424) -->
- <skip />
- <!-- no translation found for ime_action_next (3138843904009813834) -->
- <skip />
- <!-- no translation found for ime_action_default (2840921885558045721) -->
+ <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
<skip />
</resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 8fc7d12..311f501 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -103,15 +103,7 @@
<string name="global_action_toggle_silent_mode">"무음 모드"</string>
<string name="global_action_silent_mode_on_status">"소리 꺼짐"</string>
<string name="global_action_silent_mode_off_status">"소리 켜짐"</string>
- <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
- <skip />
<string name="safeMode">"안전 모드"</string>
- <!-- no translation found for android_system_label (6577375335728551336) -->
- <skip />
<string name="permgrouplab_costMoney">"요금이 부과되는 서비스"</string>
<string name="permgroupdesc_costMoney">"응용프로그램이 요금이 부과될 수 있는 작업을 할 수 있습니다."</string>
<string name="permgrouplab_messages">"메시지"</string>
@@ -397,8 +389,7 @@
<string name="lockscreen_emergency_call">"비상 전화"</string>
<string name="lockscreen_pattern_correct">"맞습니다."</string>
<string name="lockscreen_pattern_wrong">"죄송합니다. 다시 시도하세요."</string>
- <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
- <skip />
+ <string name="lockscreen_plugged_in">"충전 중(<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
<string name="lockscreen_low_battery">"충전기를 연결하세요."</string>
<string name="lockscreen_missing_sim_message_short">"SIM 카드가 없습니다."</string>
<string name="lockscreen_missing_sim_message">"전화기에 SIM 카드가 없습니다."</string>
@@ -421,15 +412,15 @@
<string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
<string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
<string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
- <!-- no translation found for hour_ampm (4329881288269772723) -->
+ <!-- no translation found for hour_ampm (7618670480400517084) -->
<skip />
- <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
+ <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
<skip />
<string name="status_bar_clear_all_button">"알림 지우기"</string>
<string name="status_bar_no_notifications_title">"알림 없음"</string>
<string name="status_bar_ongoing_events_title">"사용 중"</string>
<string name="status_bar_latest_events_title">"알림"</string>
- <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
+ <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
<skip />
<string name="battery_status_charging">"충전 중..."</string>
<string name="battery_low_title">"충전기를 연결하세요."</string>
@@ -578,12 +569,12 @@
<string name="Noon">"정오"</string>
<string name="midnight">"자정"</string>
<string name="Midnight">"자정"</string>
- <!-- no translation found for month_day (3693060561170538204) -->
+ <!-- no translation found for month_day (5565829181417740906) -->
<skip />
- <!-- no translation found for month (1976700695144952053) -->
+ <!-- no translation found for month (7026169712234774086) -->
<skip />
<string name="month_day_year">"<xliff:g id="YEAR">%Y</xliff:g>, <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>"</string>
- <!-- no translation found for month_year (2106203387378728384) -->
+ <!-- no translation found for month_year (9219019380312413367) -->
<skip />
<string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
<string name="date_and_time">"<xliff:g id="YEAR">%Y</xliff:g>, <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
@@ -612,11 +603,11 @@
<string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>, <xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="abbrev_month_day_year">"<xliff:g id="YEAR">%Y</xliff:g> <xliff:g id="MONTH">%b</xliff:g>, <xliff:g id="DAY">%-d</xliff:g>"</string>
- <!-- no translation found for abbrev_month_year (5966980891147982768) -->
+ <!-- no translation found for abbrev_month_year (3856424847226891943) -->
<skip />
- <!-- no translation found for abbrev_month_day (3156047263406783231) -->
+ <!-- no translation found for abbrev_month_day (5028815883653985933) -->
<skip />
- <!-- no translation found for abbrev_month (7304935052615731208) -->
+ <!-- no translation found for abbrev_month (3131032032850777433) -->
<skip />
<string name="day_of_week_long_sunday">"일요일"</string>
<string name="day_of_week_long_monday">"월요일"</string>
@@ -780,8 +771,8 @@
<string name="extmedia_format_message">"SD 카드를 포맷하시겠습니까? 포맷하면 카드의 모든 데이터를 잃게 됩니다."</string>
<string name="extmedia_format_button_format">"포맷"</string>
<string name="select_input_method">"입력 방법 선택"</string>
- <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
- <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style"><u>"가능한 원인"</u></string>
<string name="ext_media_checking_notification_title">"SD 카드 준비 중"</string>
<string name="ext_media_checking_notification_message">"오류 확인 중"</string>
@@ -798,18 +789,6 @@
<string name="activity_list_empty">"일치하는 활동이 없습니다."</string>
<string name="permlab_pkgUsageStats">"구성요소 사용 통계 업데이트"</string>
<string name="permdesc_pkgUsageStats">"수집된 구성요소 사용 통계를 수정할 수 있는 권한을 부여합니다. 일반 응용프로그램은 이 권한을 사용할 수 없습니다."</string>
- <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
- <skip />
- <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
- <skip />
- <!-- no translation found for ime_action_go (8320845651737369027) -->
- <skip />
- <!-- no translation found for ime_action_search (658110271822807811) -->
- <skip />
- <!-- no translation found for ime_action_send (2316166556349314424) -->
- <skip />
- <!-- no translation found for ime_action_next (3138843904009813834) -->
- <skip />
- <!-- no translation found for ime_action_default (2840921885558045721) -->
+ <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
<skip />
</resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index c1944a4..9ee553f 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -103,15 +103,7 @@
<string name="global_action_toggle_silent_mode">"Stillemodus"</string>
<string name="global_action_silent_mode_on_status">"Lyden er av"</string>
<string name="global_action_silent_mode_off_status">"Lyden er på"</string>
- <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
- <skip />
<string name="safeMode">"Sikkermodus"</string>
- <!-- no translation found for android_system_label (6577375335728551336) -->
- <skip />
<string name="permgrouplab_costMoney">"Betaltjenester"</string>
<string name="permgroupdesc_costMoney">"Lar applikasjoner utføre operasjoner som kan koste deg penger."</string>
<string name="permgrouplab_messages">"Meldinger"</string>
@@ -397,8 +389,7 @@
<string name="lockscreen_emergency_call">"Nødanrop"</string>
<string name="lockscreen_pattern_correct">"Riktig!"</string>
<string name="lockscreen_pattern_wrong">"Beklager, prøv igjen:"</string>
- <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
- <skip />
+ <string name="lockscreen_plugged_in">"Lader (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
<string name="lockscreen_low_battery">"Koble til en batterilader."</string>
<string name="lockscreen_missing_sim_message_short">"Mangler SIM-kort."</string>
<string name="lockscreen_missing_sim_message">"Ikke noe SIM-kort i telefonen."</string>
@@ -421,15 +412,15 @@
<string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
<string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
<string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
- <!-- no translation found for hour_ampm (4329881288269772723) -->
+ <!-- no translation found for hour_ampm (7618670480400517084) -->
<skip />
- <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
+ <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
<skip />
<string name="status_bar_clear_all_button">"Fjern varslinger"</string>
<string name="status_bar_no_notifications_title">"Ingen varslinger"</string>
<string name="status_bar_ongoing_events_title">"Aktiviteter"</string>
<string name="status_bar_latest_events_title">"Varslinger"</string>
- <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
+ <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
<skip />
<string name="battery_status_charging">"Lader…"</string>
<string name="battery_low_title">"Koble til en lader"</string>
@@ -439,7 +430,7 @@
<string name="factorytest_not_system">"The FACTORY_TEST action is only supported for packages installed in /system/app."</string>
<string name="factorytest_no_action">"No package was found that provides the FACTORY_TEST action."</string>
<string name="factorytest_reboot">"Reboot"</string>
- <string name="js_dialog_title">"Siden \'<xliff:g id="TITLE">%s</xliff:g> sier:\""</string>
+ <string name="js_dialog_title">"Siden \\\'<xliff:g id="TITLE">%s</xliff:g>\\\' sier:"</string>
<string name="js_dialog_title_default">"JavaScript"</string>
<string name="js_dialog_before_unload">"Naviger bort fra denne siden?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Velg OK for å fortsette, eller Avbryt for å forbli på denne siden."</string>
<string name="save_password_label">"Bekreft"</string>
@@ -563,27 +554,27 @@
<string name="date1_date2">"<xliff:g id="DATE1">%2$s</xliff:g> – <xliff:g id="DATE2">%5$s</xliff:g>"</string>
<string name="time1_time2">"<xliff:g id="TIME1">%1$s</xliff:g> – <xliff:g id="TIME2">%2$s</xliff:g>"</string>
<string name="time_wday_date">"<xliff:g id="TIME_RANGE">%1$s</xliff:g>, <xliff:g id="WEEKDAY">%2$s</xliff:g> <xliff:g id="DATE">%3$s</xliff:g>"</string>
- <string name="wday_date">"<xliff:g id="WEEKDAY">%2$s</xliff:g> <xliff:g id="DATE">%3$s</xliff:g>PLACEHOLDERplaceholder"</string>
+ <string name="wday_date">"<xliff:g id="WEEKDAY">%2$s</xliff:g> <xliff:g id="DATE">%3$s</xliff:g>"</string>
<string name="time_date">"<xliff:g id="TIME_RANGE">%1$s</xliff:g>, <xliff:g id="DATE">%3$s</xliff:g>"</string>
<string name="date_time">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="relative_time">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="time_wday">"<xliff:g id="TIME_RANGE">%1$s</xliff:g>, <xliff:g id="WEEKDAY">%2$s</xliff:g>"</string>
- <string name="full_date_month_first" format="date">"<xliff:g id="MONTH">MMMM</xliff:g>' '<xliff:g id="DAY">d</xliff:g>'., '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
- <string name="full_date_day_first" format="date">"<xliff:g id="DAY">d</xliff:g>'. '<xliff:g id="MONTH">MMMM</xliff:g>' '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
- <string name="medium_date_month_first" format="date">"<xliff:g id="MONTH">MMM</xliff:g>' '<xliff:g id="DAY">d</xliff:g>', '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
- <string name="medium_date_day_first" format="date">"<xliff:g id="DAY">d</xliff:g>'. '<xliff:g id="MONTH">MMM</xliff:g>' '<xliff:g id="YEAR">yyyy</xliff:g>"</string>
- <string name="twelve_hour_time_format" format="date">"<xliff:g id="HOUR">h</xliff:g>':'<xliff:g id="MINUTE">mm</xliff:g>' '<xliff:g id="AMPM">a</xliff:g>"</string>
- <string name="twenty_four_hour_time_format" format="date">"<xliff:g id="HOUR">H</xliff:g>':'<xliff:g id="MINUTE">mm</xliff:g>"</string>
+ <string name="full_date_month_first" format="date">"<xliff:g id="MONTH">MMMM</xliff:g>'\\\'\'\\\'\' \\\'\'\\\'\''<xliff:g id="DAY">d</xliff:g>'\\\'\'\\\'\'., \\\'\'\\\'\''<xliff:g id="YEAR">yyyy</xliff:g>"</string>
+ <string name="full_date_day_first" format="date">"<xliff:g id="DAY">d</xliff:g>'\\\'\'\\\'\'. \\\'\'\\\'\''<xliff:g id="MONTH">MMMM</xliff:g>'\\\'\'\\\'\' \\\'\'\\\'\''<xliff:g id="YEAR">yyyy</xliff:g>"</string>
+ <string name="medium_date_month_first" format="date">"<xliff:g id="MONTH">MMM</xliff:g>'\\\'\'\\\'\' \\\'\'\\\'\''<xliff:g id="DAY">d</xliff:g>'\\\'\'\\\'\', \\\'\'\\\'\''<xliff:g id="YEAR">yyyy</xliff:g>"</string>
+ <string name="medium_date_day_first" format="date">"<xliff:g id="DAY">d</xliff:g>'\\\'\'\\\'\'. \\\'\'\\\'\''<xliff:g id="MONTH">MMM</xliff:g>'\\\'\'\\\'\' \\\'\'\\\'\''<xliff:g id="YEAR">yyyy</xliff:g>"</string>
+ <string name="twelve_hour_time_format" format="date">"<xliff:g id="HOUR">h</xliff:g>'\\\'\'\\\'\':\\\'\'\\\'\''<xliff:g id="MINUTE">mm</xliff:g>'\\\'\'\\\'\' \\\'\'\\\'\''<xliff:g id="AMPM">a</xliff:g>"</string>
+ <string name="twenty_four_hour_time_format" format="date">"<xliff:g id="HOUR">H</xliff:g>'\\\'\'\\\'\':\\\'\'\\\'\''<xliff:g id="MINUTE">mm</xliff:g>"</string>
<string name="noon">"middag"</string>
<string name="Noon">"Middag"</string>
<string name="midnight">"midnatt"</string>
<string name="Midnight">"Midnatt"</string>
- <!-- no translation found for month_day (3693060561170538204) -->
+ <!-- no translation found for month_day (5565829181417740906) -->
<skip />
- <!-- no translation found for month (1976700695144952053) -->
+ <!-- no translation found for month (7026169712234774086) -->
<skip />
<string name="month_day_year">"<xliff:g id="DAY">%-d</xliff:g>. <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for month_year (2106203387378728384) -->
+ <!-- no translation found for month_year (9219019380312413367) -->
<skip />
<string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
<string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="DAY">%-d</xliff:g>. <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
@@ -612,11 +603,11 @@
<string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g>. <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g> <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g>. <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g> <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>. <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g> <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>. <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g> <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="abbrev_month_day_year">"<xliff:g id="DAY">%-d</xliff:g>. <xliff:g id="MONTH">%b</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for abbrev_month_year (5966980891147982768) -->
+ <!-- no translation found for abbrev_month_year (3856424847226891943) -->
<skip />
- <!-- no translation found for abbrev_month_day (3156047263406783231) -->
+ <!-- no translation found for abbrev_month_day (5028815883653985933) -->
<skip />
- <!-- no translation found for abbrev_month (7304935052615731208) -->
+ <!-- no translation found for abbrev_month (3131032032850777433) -->
<skip />
<string name="day_of_week_long_sunday">"søndag"</string>
<string name="day_of_week_long_monday">"mandag"</string>
@@ -697,7 +688,7 @@
<string name="cut">"Klipp ut"</string>
<string name="cutAll">"Klipp ut alt"</string>
<string name="copy">"Kopier"</string>
- <string name="copyAll">"Kopier alt"</string>
+ <string name="copyAll">"Koiper alt"</string>
<string name="paste">"Lim inn"</string>
<string name="copyUrl">"Kopier URL"</string>
<string name="inputMethod">"Inndatametode"</string>
@@ -753,7 +744,7 @@
<string name="select_character">"Sett inn tegn"</string>
<string name="sms_control_default_app_name">"Ukjent applikasjon"</string>
<string name="sms_control_title">"Sending SMS messages"</string>
- <string name="sms_control_message">"A large number of SMS messages are being sent. Select \"OK\" to continue, or \"Cancel\" to stop sending."</string>
+ <string name="sms_control_message">"A large number of SMS messages are being sent. Select \\\\\\\"OK\\\\\\\" to continue, or \\\\\\\"Cancel\\\\\\\" to stop sending."</string>
<string name="sms_control_yes">"OK"</string>
<string name="sms_control_no">"Avbryt"</string>
<string name="date_time_set">"Lagre"</string>
@@ -763,7 +754,7 @@
<string name="perms_show_all"><b>"Vis alle"</b></string>
<string name="googlewebcontenthelper_loading">"Laster inn…"</string>
<string name="usb_storage_title">"USB koblet til"</string>
- <string name="usb_storage_message">"Du har koblet telefonen til en datamaskin via USB. Velg \"Monter\" dersom du ønsker å kopiere filer mellom datmaskinen og minnekortet i telefonen."</string>
+ <string name="usb_storage_message">"Du har koblet telefonen til en datamaskin via USB. Velg \\\\\\\"Monter\\\\\\\" dersom du ønsker å kopiere filer mellom datmaskinen og minnekortet i telefonen."</string>
<string name="usb_storage_button_mount">"Monter"</string>
<string name="usb_storage_button_unmount">"Ikke monter"</string>
<string name="usb_storage_error_message">"Det oppsto et problem med å bruke minnekortet ditt for USB-lagring."</string>
@@ -780,8 +771,8 @@
<string name="extmedia_format_message">"Er du sikker på at du ønsker å formatere minnekortet? Alle data på kortet vil gå tapt."</string>
<string name="extmedia_format_button_format">"Format"</string>
<string name="select_input_method">"Velg inndatametode"</string>
- <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"</string>
- <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"</string>
+ <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"</string>
+ <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"</string>
<string name="candidates_style">"TAG_FONT"<u>"kandidater"</u>"CLOSE_FONT"</string>
<string name="ext_media_checking_notification_title">"Forbereder minnekort"</string>
<string name="ext_media_checking_notification_message">"Sjekker for feil"</string>
@@ -798,18 +789,6 @@
<string name="activity_list_empty">"Fant ingen tilsvarende aktiviteter"</string>
<string name="permlab_pkgUsageStats">"oppdater statistikk over komponentbruk"</string>
<string name="permdesc_pkgUsageStats">"Tillater endring av innsamlet data om bruk av komponenter. Ikke ment for vanlige applikasjoner."</string>
- <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
- <skip />
- <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
- <skip />
- <!-- no translation found for ime_action_go (8320845651737369027) -->
- <skip />
- <!-- no translation found for ime_action_search (658110271822807811) -->
- <skip />
- <!-- no translation found for ime_action_send (2316166556349314424) -->
- <skip />
- <!-- no translation found for ime_action_next (3138843904009813834) -->
- <skip />
- <!-- no translation found for ime_action_default (2840921885558045721) -->
+ <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
<skip />
</resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 725e369..a1446f5 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -40,7 +40,7 @@
<string name="mismatchPin">"De PIN-codes die u heeft ingevoerd, komen niet overeen."</string>
<string name="invalidPin">"Voer een PIN-code van 4 tot 8 cijfers in."</string>
<string name="needPuk">"Uw SIM-kaart is geblokkeerd met de PUK-code. Typ de PUK-code om de blokkering op te heffen."</string>
- <string name="needPuk2">"Voer de PUK2-code in om de SIM-kaart te ontgrendelen."</string>
+ <string name="needPuk2">"Voer de PUK2-code in om de SIM-kaart te deblokkeren."</string>
<string name="ClipMmi">"Inkomende beller-id"</string>
<string name="ClirMmi">"Uitgaande beller-id"</string>
<string name="CfMmi">"Oproep doorschakelen"</string>
@@ -103,21 +103,13 @@
<string name="global_action_toggle_silent_mode">"Stille modus"</string>
<string name="global_action_silent_mode_on_status">"Geluid is UIT"</string>
<string name="global_action_silent_mode_off_status">"Geluid is AAN"</string>
- <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
- <skip />
<string name="safeMode">"Veilige modus"</string>
- <!-- no translation found for android_system_label (6577375335728551336) -->
- <skip />
<string name="permgrouplab_costMoney">"Services waarvoor u moet betalen"</string>
<string name="permgroupdesc_costMoney">"Toepassingen toestaan activiteiten uit te voeren waarvoor mogelijk kosten in rekening worden gebracht."</string>
<string name="permgrouplab_messages">"Uw berichten"</string>
<string name="permgroupdesc_messages">"SMS, e-mail en andere berichten lezen en schrijven."</string>
<string name="permgrouplab_personalInfo">"Uw persoonlijke informatie"</string>
- <string name="permgroupdesc_personalInfo">"Rechtstreekse toegang tot de op uw telefoon opgeslagen contacten en agenda."</string>
+ <string name="permgroupdesc_personalInfo">"Rechtstreekse toegang tot de op uw telefoon opgeslagen contactpersonen en agenda."</string>
<string name="permgrouplab_location">"Uw locatie"</string>
<string name="permgroupdesc_location">"Uw fysieke locatie bijhouden"</string>
<string name="permgrouplab_network">"Netwerkcommunicatie"</string>
@@ -162,7 +154,7 @@
<string name="permdesc_restartPackages">"Hiermee kan een toepassing andere toepassingen opnieuw starten."</string>
<string name="permlab_setProcessForeground">"stoppen voorkomen"</string>
<string name="permdesc_setProcessForeground">"Hiermee kan een toepassing ervoor zorgen dat elk willekeurig proces op de voorgrond wordt uitgevoerd en dus niet kan worden afgesloten. Nooit vereist voor normale toepassingen."</string>
- <string name="permlab_forceBack">"toepassing nu sluiten"</string>
+ <string name="permlab_forceBack">"toepassing gedwongen sluiten"</string>
<string name="permdesc_forceBack">"Hiermee kan een toepassing elke willekeurige activiteit die op de voorgrond wordt uitgevoerd, sluiten en naar de achtergrond verplaatsen. Nooit vereist voor normale toepassingen."</string>
<string name="permlab_dump">"interne systeemstatus ophalen"</string>
<string name="permdesc_dump">"Hiermee kan een toepassing de interne status van het systeem ophalen. Schadelijke toepassingen kunnen privé- of veiligheidsgegevens ophalen die ze normaal niet nodig hebben."</string>
@@ -266,8 +258,8 @@
<string name="permdesc_camera">"Hiermee kan een toepassing foto\'s maken met de camera. De toepassing kan op deze manier op elk gewenste moment foto\'s verzamelen van wat de camera ziet."</string>
<string name="permlab_brick">"telefoon permanent uitschakelen"</string>
<string name="permdesc_brick">"Hiermee kan de toepassing de telefoon permanent uitschakelen. Dit is erg gevaarlijk."</string>
- <string name="permlab_reboot">"telefoon nu opnieuw opstarten"</string>
- <string name="permdesc_reboot">"Hiermee kan de toepassing de telefoon nu opnieuw opstarten."</string>
+ <string name="permlab_reboot">"telefoon gedwongen opnieuw opstarten"</string>
+ <string name="permdesc_reboot">"Hiermee kan de toepassing de telefoon gedwongen opnieuw opstarten."</string>
<string name="permlab_mount_unmount_filesystems">"bestandssystemen koppelen en ontkoppelen"</string>
<string name="permdesc_mount_unmount_filesystems">"Hiermee kan de toepassing bestandssystemen koppelen en ontkoppelen voor verwisselbare opslagruimte."</string>
<string name="permlab_mount_format_filesystems">"externe opslag formatteren"</string>
@@ -329,9 +321,9 @@
<string name="permlab_disableKeyguard">"toetsblokkering uitschakelen"</string>
<string name="permdesc_disableKeyguard">"Hiermee kan een toepassing de toetsblokkering en bijbehorende wachtwoordbeveiliging uitschakelen. Een voorbeeld: de telefoon schakelt de toetsblokkering uit als er een oproep binnenkomt en schakelt de toetsblokkering weer in als de oproep is beëindigd."</string>
<string name="permlab_readSyncSettings">"synchronisatie-instellingen lezen"</string>
- <string name="permdesc_readSyncSettings">"Hiermee kan een toepassing de synchronisatie-instellingen lezen, bijvoorbeeld of de synchronisatie van contacten is ingeschakeld."</string>
+ <string name="permdesc_readSyncSettings">"Hiermee kan een toepassing de synchronisatie-instellingen lezen, bijvoorbeeld of de synchronisatie van contactpersonen is ingeschakeld."</string>
<string name="permlab_writeSyncSettings">"synchronisatie-instellingen schrijven"</string>
- <string name="permdesc_writeSyncSettings">"Hiermee kan een toepassing uw synchronisatie-instellingen wijzigen, bijvoorbeeld of de synchronisatie van contacten is ingeschakeld."</string>
+ <string name="permdesc_writeSyncSettings">"Hiermee kan een toepassing uw synchronisatie-instellingen wijzigen, bijvoorbeeld of de synchronisatie van contactpersonen is ingeschakeld."</string>
<string name="permlab_readSyncStats">"synchronisatiestatistieken lezen"</string>
<string name="permdesc_readSyncStats">"Hiermee kan een toepassing de synchronisatiestatistieken lezen, zoals de geschiedenis van uitgevoerde synchronisaties."</string>
<string name="permlab_subscribedFeedsRead">"geabonneerde feeds lezen"</string>
@@ -387,18 +379,17 @@
</string-array>
<string name="keyguard_password_enter_pin_code">"PIN-code invoeren"</string>
<string name="keyguard_password_wrong_pin_code">"Onjuiste PIN-code!"</string>
- <string name="keyguard_label_text">"Druk op \'Menu\' en vervolgens op 0 om te ontgrendelen."</string>
+ <string name="keyguard_label_text">"Druk op \'Menu\' en vervolgens op 0 om te deblokkeren."</string>
<string name="emergency_call_dialog_number_for_display">"Alarmnummer"</string>
<string name="lockscreen_carrier_default">"(Geen service)"</string>
<string name="lockscreen_screen_locked">"Scherm geblokkeerd."</string>
- <string name="lockscreen_instructions_when_pattern_enabled">"Druk op \'Menu\' om te ontgrendelen of noodoproep te plaatsen."</string>
- <string name="lockscreen_instructions_when_pattern_disabled">"Druk op \'Menu\' om te ontgrendelen."</string>
- <string name="lockscreen_pattern_instructions">"Patroon tekenen om te ontgrendelen"</string>
+ <string name="lockscreen_instructions_when_pattern_enabled">"Druk op \'Menu\' om te deblokkeren of noodoproep te plaatsen."</string>
+ <string name="lockscreen_instructions_when_pattern_disabled">"Druk op \'Menu\' om te deblokkeren."</string>
+ <string name="lockscreen_pattern_instructions">"Patroon tekenen om te deblokkeren"</string>
<string name="lockscreen_emergency_call">"Noodoproep"</string>
<string name="lockscreen_pattern_correct">"Juist!"</string>
<string name="lockscreen_pattern_wrong">"Probeer het opnieuw"</string>
- <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
- <skip />
+ <string name="lockscreen_plugged_in">"Opladen (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
<string name="lockscreen_low_battery">"Sluit de oplader aan."</string>
<string name="lockscreen_missing_sim_message_short">"Geen SIM-kaart."</string>
<string name="lockscreen_missing_sim_message">"Geen SIM-kaart in telefoon."</string>
@@ -407,13 +398,13 @@
<string name="lockscreen_sim_puk_locked_message">"SIM-kaart is geblokkeerd met PUK-code."</string>
<string name="lockscreen_sim_puk_locked_instructions">"Neem contact op met de klantenservice."</string>
<string name="lockscreen_sim_locked_message">"SIM-kaart is geblokkeerd."</string>
- <string name="lockscreen_sim_unlock_progress_dialog_message">"SIM-kaart ontgrendelen..."</string>
+ <string name="lockscreen_sim_unlock_progress_dialog_message">"SIM-kaart deblokkeren..."</string>
<string name="lockscreen_too_many_failed_attempts_dialog_message">"U heeft uw deblokkeringspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. "\n\n"Probeer het over <xliff:g id="NUMBER_1">%d</xliff:g> seconden opnieuw."</string>
- <string name="lockscreen_failed_attempts_almost_glogin">"U heeft uw deblokkeringspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen, wordt u gevraagd om uw telefoon te ontgrendelen met uw Google aanmelding."\n\n" Probeer het over <xliff:g id="NUMBER_2">%d</xliff:g> seconden opnieuw."</string>
+ <string name="lockscreen_failed_attempts_almost_glogin">"U heeft uw deblokkeringspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen, wordt u gevraagd om uw telefoon te deblokkeren met uw Google aanmelding."\n\n" Probeer het over <xliff:g id="NUMBER_2">%d</xliff:g> seconden opnieuw."</string>
<string name="lockscreen_too_many_failed_attempts_countdown">"Probeer het over <xliff:g id="NUMBER">%d</xliff:g> seconden opnieuw."</string>
<string name="lockscreen_forgot_pattern_button_text">"Patroon vergeten?"</string>
<string name="lockscreen_glogin_too_many_attempts">"Te veel patroonpogingen!"</string>
- <string name="lockscreen_glogin_instructions">"U moet zich aanmelden bij uw Google-account"\n"om te ontgrendelen"</string>
+ <string name="lockscreen_glogin_instructions">"U moet zich aanmelden bij uw Google-account"\n"om te deblokkeren"</string>
<string name="lockscreen_glogin_username_hint">"Gebruikersnaam (e-mail)"</string>
<string name="lockscreen_glogin_password_hint">"Wachtwoord"</string>
<string name="lockscreen_glogin_submit_button">"Aanmelden"</string>
@@ -421,15 +412,15 @@
<string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
<string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
<string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
- <!-- no translation found for hour_ampm (4329881288269772723) -->
+ <!-- no translation found for hour_ampm (7618670480400517084) -->
<skip />
- <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
+ <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
<skip />
<string name="status_bar_clear_all_button">"Meldingen wissen"</string>
<string name="status_bar_no_notifications_title">"Geen meldingen"</string>
<string name="status_bar_ongoing_events_title">"Actief"</string>
<string name="status_bar_latest_events_title">"Meldingen"</string>
- <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
+ <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
<skip />
<string name="battery_status_charging">"Opladen..."</string>
<string name="battery_low_title">"Sluit de oplader aan"</string>
@@ -578,12 +569,12 @@
<string name="Noon">"Twaalf uur \'s middags"</string>
<string name="midnight">"middernacht"</string>
<string name="Midnight">"Middernacht"</string>
- <!-- no translation found for month_day (3693060561170538204) -->
+ <!-- no translation found for month_day (5565829181417740906) -->
<skip />
- <!-- no translation found for month (1976700695144952053) -->
+ <!-- no translation found for month (7026169712234774086) -->
<skip />
<string name="month_day_year">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for month_year (2106203387378728384) -->
+ <!-- no translation found for month_year (9219019380312413367) -->
<skip />
<string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
<string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
@@ -612,11 +603,11 @@
<string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="abbrev_month_day_year">"<xliff:g id="MONTH">%b</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for abbrev_month_year (5966980891147982768) -->
+ <!-- no translation found for abbrev_month_year (3856424847226891943) -->
<skip />
- <!-- no translation found for abbrev_month_day (3156047263406783231) -->
+ <!-- no translation found for abbrev_month_day (5028815883653985933) -->
<skip />
- <!-- no translation found for abbrev_month (7304935052615731208) -->
+ <!-- no translation found for abbrev_month (3131032032850777433) -->
<skip />
<string name="day_of_week_long_sunday">"Zondag"</string>
<string name="day_of_week_long_monday">"Maandag"</string>
@@ -701,7 +692,7 @@
<string name="paste">"Plakken"</string>
<string name="copyUrl">"URL kopiëren"</string>
<string name="inputMethod">"Invoermethode"</string>
- <string name="addToDictionary">"%s\' toevoegen aan woordenboek"</string>
+ <string name="addToDictionary">"\'%s\' toevoegen aan woordenboek"</string>
<string name="editTextMenuTitle">"Tekst bewerken"</string>
<string name="low_internal_storage_view_title">"Weinig ruimte"</string>
<string name="low_internal_storage_view_text">"Opslagruimte van telefoon raakt op."</string>
@@ -725,7 +716,7 @@
<string name="anr_activity_process">"Activiteit <xliff:g id="ACTIVITY">%1$s</xliff:g> (in proces <xliff:g id="PROCESS">%2$s</xliff:g>) reageert niet."</string>
<string name="anr_application_process">"Toepassing <xliff:g id="APPLICATION">%1$s</xliff:g> (in proces <xliff:g id="PROCESS">%2$s</xliff:g>) reageert niet."</string>
<string name="anr_process">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> reageert niet."</string>
- <string name="force_close">"Nu sluiten"</string>
+ <string name="force_close">"Gedwongen sluiten"</string>
<string name="wait">"Wachten"</string>
<string name="debug">"Foutopsporing"</string>
<string name="sendText">"Selecteer een actie voor tekst"</string>
@@ -780,8 +771,8 @@
<string name="extmedia_format_message">"Weet u zeker dat u de SD-kaart wilt formatteren? Alle gegevens op uw kaart gaan dan verloren."</string>
<string name="extmedia_format_button_format">"Formatteren"</string>
<string name="select_input_method">"Invoermethode selecteren"</string>
- <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
- <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style"><u>"kandidaten"</u></string>
<string name="ext_media_checking_notification_title">"SD-kaart voorbereiden"</string>
<string name="ext_media_checking_notification_message">"Controleren op fouten"</string>
@@ -798,18 +789,6 @@
<string name="activity_list_empty">"Geen overeenkomende activiteiten gevonden"</string>
<string name="permlab_pkgUsageStats">"gebruiksstatistieken van component bijwerken"</string>
<string name="permdesc_pkgUsageStats">"Hiermee kunnen verzamelde gebruiksstatistieken van een component worden gewijzigd. Niet voor gebruik door normale toepassingen."</string>
- <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
- <skip />
- <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
- <skip />
- <!-- no translation found for ime_action_go (8320845651737369027) -->
- <skip />
- <!-- no translation found for ime_action_search (658110271822807811) -->
- <skip />
- <!-- no translation found for ime_action_send (2316166556349314424) -->
- <skip />
- <!-- no translation found for ime_action_next (3138843904009813834) -->
- <skip />
- <!-- no translation found for ime_action_default (2840921885558045721) -->
+ <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
<skip />
</resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 641d335..a49b824 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -43,8 +43,8 @@
<string name="needPuk2">"Wprowadź kod PUK2, aby odblokować kartę SIM."</string>
<string name="ClipMmi">"Identyfikator dzwoniącego przy połączeniach przychodzących"</string>
<string name="ClirMmi">"Identyfikator dzwoniącego przy połączeniach wychodzących"</string>
- <string name="CfMmi">"Przekierowania połączeń"</string>
- <string name="CwMmi">"Połączenia oczekujące"</string>
+ <string name="CfMmi">"Przekierowanie połączeń"</string>
+ <string name="CwMmi">"Połączenie oczekujące"</string>
<string name="BaMmi">"Blokada dzwonienia"</string>
<string name="PwdMmi">"Zmiana hasła"</string>
<string name="PinMmi">"Zmiana kodu PIN"</string>
@@ -103,15 +103,7 @@
<string name="global_action_toggle_silent_mode">"Tryb cichy"</string>
<string name="global_action_silent_mode_on_status">"Dźwięk jest wyłączony"</string>
<string name="global_action_silent_mode_off_status">"Dźwięk jest włączony"</string>
- <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
- <skip />
<string name="safeMode">"Tryb awaryjny"</string>
- <!-- no translation found for android_system_label (6577375335728551336) -->
- <skip />
<string name="permgrouplab_costMoney">"Usługi płatne"</string>
<string name="permgroupdesc_costMoney">"Pozwól aplikacjom na wykonywanie płatnych operacji."</string>
<string name="permgrouplab_messages">"Twoje wiadomości"</string>
@@ -252,7 +244,7 @@
<string name="permdesc_accessLocationExtraCommands">"Dostęp do dodatkowych poleceń dostawcy informacji o położeniu. Szkodliwe aplikacje mogą go wykorzystać, aby wpływać na działanie urządzenia GPS lub innych źródeł ustalania położenia."</string>
<string name="permlab_accessFineLocation">"dokładne położenie (GPS)"</string>
<string name="permdesc_accessFineLocation">"Uzyskiwanie dostępu do dokładnych źródeł ustalania położenia w telefonie, takich jak system GPS, tam, gdzie są one dostępne. Szkodliwe aplikacje mogą to wykorzystać do określenia położenia użytkownika oraz mogą zużywać więcej energii baterii."</string>
- <string name="permlab_accessCoarseLocation">"przybliżone ustalanie położenia (oparte o sieć)"</string>
+ <string name="permlab_accessCoarseLocation">"zgrubne (oparte o sieć) ustalanie położenia"</string>
<string name="permdesc_accessCoarseLocation">"Dostęp do źródeł, takich jak bazy danych sieci komórkowych, jeśli są dostępne, które pozwalają określić przybliżone położenie telefonu. Szkodliwe aplikacje mogą go wykorzystać do określenia, gdzie w przybliżeniu znajduje się użytkownik."</string>
<string name="permlab_accessSurfaceFlinger">"dostęp do usługi SurfaceFlinger"</string>
<string name="permdesc_accessSurfaceFlinger">"Pozwala aplikacji na wykorzystanie funkcji niskiego poziomu usługi SurfaceFlinger."</string>
@@ -268,7 +260,7 @@
<string name="permdesc_brick">"Pozwala aplikacji na wyłączenie całego telefonu na stałe. Jest to bardzo niebezpieczne."</string>
<string name="permlab_reboot">"wymuszanie ponownego uruchomienia telefonu"</string>
<string name="permdesc_reboot">"Pozwala aplikacji na wymuszenie ponownego uruchomienia telefonu."</string>
- <string name="permlab_mount_unmount_filesystems">"podłączanie i odłączanie systemów plików"</string>
+ <string name="permlab_mount_unmount_filesystems">"montowanie i odmontowanie systemów plików"</string>
<string name="permdesc_mount_unmount_filesystems">"Pozwala aplikacjom na podłączanie i odłączanie systemów plików w pamięciach przenośnych."</string>
<string name="permlab_mount_format_filesystems">"formatowanie pamięci zewnętrznej"</string>
<string name="permdesc_mount_format_filesystems">"Zezwala aplikacji na formatowanie wymiennych nośników."</string>
@@ -387,18 +379,17 @@
</string-array>
<string name="keyguard_password_enter_pin_code">"Wprowadź kod PIN"</string>
<string name="keyguard_password_wrong_pin_code">"Błędny kod PIN!"</string>
- <string name="keyguard_label_text">"Aby odblokować, naciśnij Menu, a następnie 0."</string>
+ <string name="keyguard_label_text">"Aby odblokować, naciśnij przycisk Menu, a następnie 0."</string>
<string name="emergency_call_dialog_number_for_display">"Numer alarmowy"</string>
<string name="lockscreen_carrier_default">"(Brak usługi)"</string>
<string name="lockscreen_screen_locked">"Ekran zablokowany."</string>
- <string name="lockscreen_instructions_when_pattern_enabled">"Naciśnij Menu, aby odblokować lub wykonać połączenie alarmowe."</string>
- <string name="lockscreen_instructions_when_pattern_disabled">"Naciśnij Menu, aby odblokować."</string>
+ <string name="lockscreen_instructions_when_pattern_enabled">"Naciśnij przycisk Menu, aby odblokować lub wykonać połączenie alarmowe."</string>
+ <string name="lockscreen_instructions_when_pattern_disabled">"Naciśnij przycisk Menu, aby odblokować."</string>
<string name="lockscreen_pattern_instructions">"Narysuj wzór, aby odblokować"</string>
<string name="lockscreen_emergency_call">"Połączenie alarmowe"</string>
<string name="lockscreen_pattern_correct">"Poprawnie!"</string>
<string name="lockscreen_pattern_wrong">"Niestety, spróbuj ponownie"</string>
- <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
- <skip />
+ <string name="lockscreen_plugged_in">"Ładowanie (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
<string name="lockscreen_low_battery">"Podłącz ładowarkę."</string>
<string name="lockscreen_missing_sim_message_short">"Brak karty SIM."</string>
<string name="lockscreen_missing_sim_message">"Brak karty SIM w telefonie."</string>
@@ -421,15 +412,15 @@
<string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
<string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
<string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
- <!-- no translation found for hour_ampm (4329881288269772723) -->
+ <!-- no translation found for hour_ampm (7618670480400517084) -->
<skip />
- <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
+ <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
<skip />
<string name="status_bar_clear_all_button">"Wyczyść powiadomienia"</string>
<string name="status_bar_no_notifications_title">"Brak powiadomień"</string>
<string name="status_bar_ongoing_events_title">"Trwające"</string>
<string name="status_bar_latest_events_title">"Powiadomienia"</string>
- <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
+ <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
<skip />
<string name="battery_status_charging">"Ładowanie..."</string>
<string name="battery_low_title">"Podłącz ładowarkę"</string>
@@ -458,7 +449,7 @@
<string name="today">"Dzisiaj"</string>
<string name="yesterday">"Wczoraj"</string>
<string name="tomorrow">"Jutro"</string>
- <string name="oneMonthDurationPast">"1 miesiąc temu"</string>
+ <string name="oneMonthDurationPast">"miesiąc temu"</string>
<string name="beforeOneMonthDurationPast">"Ponad 1 miesiąc temu"</string>
<plurals name="num_seconds_ago">
<item quantity="one">"sekundę temu"</item>
@@ -539,13 +530,13 @@
<string name="weeks">"tygodni"</string>
<string name="year">"rok"</string>
<string name="years">"lat"</string>
- <string name="sunday">"niedziela"</string>
- <string name="monday">"poniedziałek"</string>
- <string name="tuesday">"wtorek"</string>
- <string name="wednesday">"środa"</string>
- <string name="thursday">"czwartek"</string>
- <string name="friday">"piątek"</string>
- <string name="saturday">"sobota"</string>
+ <string name="sunday">"Niedziela"</string>
+ <string name="monday">"Poniedziałek"</string>
+ <string name="tuesday">"Wtorek"</string>
+ <string name="wednesday">"Środa"</string>
+ <string name="thursday">"Czwartek"</string>
+ <string name="friday">"Piątek"</string>
+ <string name="saturday">"Sobota"</string>
<string name="every_weekday">"W każdy dzień roboczy (pon–pt)"</string>
<string name="daily">"Codziennie"</string>
<string name="weekly">"Co tydzień w <xliff:g id="DAY">%s</xliff:g>"</string>
@@ -578,12 +569,12 @@
<string name="Noon">"Południe"</string>
<string name="midnight">"północ"</string>
<string name="Midnight">"Północ"</string>
- <!-- no translation found for month_day (3693060561170538204) -->
+ <!-- no translation found for month_day (5565829181417740906) -->
<skip />
- <!-- no translation found for month (1976700695144952053) -->
+ <!-- no translation found for month (7026169712234774086) -->
<skip />
<string name="month_day_year">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for month_year (2106203387378728384) -->
+ <!-- no translation found for month_year (9219019380312413367) -->
<skip />
<string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
<string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
@@ -612,19 +603,19 @@
<string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>, <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>, <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="abbrev_month_day_year">"<xliff:g id="MONTH">%b</xliff:g> <xliff:g id="DAY">%-d</xliff:g>, <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for abbrev_month_year (5966980891147982768) -->
+ <!-- no translation found for abbrev_month_year (3856424847226891943) -->
<skip />
- <!-- no translation found for abbrev_month_day (3156047263406783231) -->
+ <!-- no translation found for abbrev_month_day (5028815883653985933) -->
<skip />
- <!-- no translation found for abbrev_month (7304935052615731208) -->
+ <!-- no translation found for abbrev_month (3131032032850777433) -->
<skip />
- <string name="day_of_week_long_sunday">"niedziela"</string>
- <string name="day_of_week_long_monday">"poniedziałek"</string>
- <string name="day_of_week_long_tuesday">"wtorek"</string>
- <string name="day_of_week_long_wednesday">"środa"</string>
- <string name="day_of_week_long_thursday">"czwartek"</string>
- <string name="day_of_week_long_friday">"piątek"</string>
- <string name="day_of_week_long_saturday">"sobota"</string>
+ <string name="day_of_week_long_sunday">"Niedziela"</string>
+ <string name="day_of_week_long_monday">"Poniedziałek"</string>
+ <string name="day_of_week_long_tuesday">"Wtorek"</string>
+ <string name="day_of_week_long_wednesday">"Środa"</string>
+ <string name="day_of_week_long_thursday">"Czwartek"</string>
+ <string name="day_of_week_long_friday">"Piątek"</string>
+ <string name="day_of_week_long_saturday">"Sobota"</string>
<string name="day_of_week_medium_sunday">"Nie"</string>
<string name="day_of_week_medium_monday">"Pon"</string>
<string name="day_of_week_medium_tuesday">"Wt"</string>
@@ -692,7 +683,7 @@
<string name="elapsed_time_short_format_mm_ss">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
<string name="elapsed_time_short_format_h_mm_ss">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
<string name="selectAll">"Zaznacz wszystko"</string>
- <string name="selectText">"Zaznacz tekst"</string>
+ <string name="selectText">"Wybierz tekst"</string>
<string name="stopSelectingText">"Zatrzymaj wybieranie tekstu"</string>
<string name="cut">"Wytnij"</string>
<string name="cutAll">"Wytnij wszystko"</string>
@@ -700,7 +691,7 @@
<string name="copyAll">"Kopiuj wszystko"</string>
<string name="paste">"Wklej"</string>
<string name="copyUrl">"Kopiuj adres URL"</string>
- <string name="inputMethod">"Wprowadzanie tekstu"</string>
+ <string name="inputMethod">"Metoda wejściowa"</string>
<string name="addToDictionary">"Dodaj „%s” do słownika"</string>
<string name="editTextMenuTitle">"Edytuj tekst"</string>
<string name="low_internal_storage_view_title">"Mało miejsca"</string>
@@ -712,7 +703,7 @@
<string name="dialog_alert_title">"Uwaga"</string>
<string name="capital_on">"Włącz"</string>
<string name="capital_off">"Wyłącz"</string>
- <string name="whichApplication">"Zakończ czynność korzystając z"</string>
+ <string name="whichApplication">"Zakończ działanie, korzystając z"</string>
<string name="alwaysUse">"Używaj domyślnie dla tej czynności."</string>
<string name="clearDefaultHintMsg">"Wyczyść domyślne w: Ustawienia strony głównej &gt; Aplikacje &gt; Zarządzaj aplikacjami."</string>
<string name="chooseActivity">"Wybierz czynność"</string>
@@ -721,8 +712,8 @@
<string name="aerr_application">"Aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) została niespodziewanie zatrzymana. Spróbuj ponownie."</string>
<string name="aerr_process">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> został niespodziewanie zatrzymany. Spróbuj ponownie."</string>
<string name="anr_title">"Przepraszamy!"</string>
- <string name="anr_activity_application">"<xliff:g id="ACTIVITY">%1$s</xliff:g> (w aplikacji <xliff:g id="APPLICATION">%2$s</xliff:g>) nie odpowiada."</string>
- <string name="anr_activity_process">"<xliff:g id="ACTIVITY">%1$s</xliff:g> (w procesie <xliff:g id="PROCESS">%2$s</xliff:g>) nie odpowiada."</string>
+ <string name="anr_activity_application">"Działanie <xliff:g id="ACTIVITY">%1$s</xliff:g> (w aplikacji <xliff:g id="APPLICATION">%2$s</xliff:g>) nie odpowiada."</string>
+ <string name="anr_activity_process">"Działanie <xliff:g id="ACTIVITY">%1$s</xliff:g> (w procesie <xliff:g id="PROCESS">%2$s</xliff:g>) nie odpowiada."</string>
<string name="anr_application_process">"Aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> (w procesie <xliff:g id="PROCESS">%2$s</xliff:g>) nie odpowiada."</string>
<string name="anr_process">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> nie odpowiada."</string>
<string name="force_close">"Wymuś zamknięcie"</string>
@@ -763,9 +754,9 @@
<string name="perms_show_all"><b>"Pokaż wszystko"</b></string>
<string name="googlewebcontenthelper_loading">"Ładowanie..."</string>
<string name="usb_storage_title">"Połączenie przez USB"</string>
- <string name="usb_storage_message">"Telefon został podłączony do komputera przez port USB. Wybierz polecenie „Podłącz”, jeśli chcesz skopiować pliki między komputerem a kartą SD w telefonie."</string>
- <string name="usb_storage_button_mount">"Podłącz"</string>
- <string name="usb_storage_button_unmount">"Nie podłączaj"</string>
+ <string name="usb_storage_message">"Telefon został podłączony do komputera przez port USB. Wybierz polecenie „Montuj”, jeśli chcesz skopiować pliki między komputerem a kartą SD w telefonie."</string>
+ <string name="usb_storage_button_mount">"Zamontuj"</string>
+ <string name="usb_storage_button_unmount">"Nie montuj"</string>
<string name="usb_storage_error_message">"Wystąpił problem z wykorzystaniem karty SD dla pamięci USB."</string>
<string name="usb_storage_notification_title">"Połączenie przez USB"</string>
<string name="usb_storage_notification_message">"Wybierz, aby skopiować pliki do/z komputera"</string>
@@ -779,9 +770,9 @@
<string name="extmedia_format_title">"Formatuj kartę SD"</string>
<string name="extmedia_format_message">"Czy na pewno sformatować kartę SD? Wszystkie dane na karcie zostaną utracone."</string>
<string name="extmedia_format_button_format">"Formatuj"</string>
- <string name="select_input_method">"Sposób wprowadzania tekstu"</string>
- <string name="fast_scroll_alphabet">" AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUVWXYZŹŻ"</string>
- <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="select_input_method">"Wybierz metodę wejściową"</string>
+ <string name="fast_scroll_alphabet">"AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUVWXYZŹŻ"</string>
+ <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style"><u>"kandydaci"</u></string>
<string name="ext_media_checking_notification_title">"Przygotowywanie karty SD"</string>
<string name="ext_media_checking_notification_message">"Sprawdzanie w poszukiwaniu błędów"</string>
@@ -798,18 +789,6 @@
<string name="activity_list_empty">"Nie znaleziono pasujących działań"</string>
<string name="permlab_pkgUsageStats">"aktualizowanie statystyk użycia komponentu"</string>
<string name="permdesc_pkgUsageStats">"Zezwala na modyfikacje zebranych statystyk użycia komponentu. Nieprzeznaczone dla zwykłych aplikacji."</string>
- <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
- <skip />
- <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
- <skip />
- <!-- no translation found for ime_action_go (8320845651737369027) -->
- <skip />
- <!-- no translation found for ime_action_search (658110271822807811) -->
- <skip />
- <!-- no translation found for ime_action_send (2316166556349314424) -->
- <skip />
- <!-- no translation found for ime_action_next (3138843904009813834) -->
- <skip />
- <!-- no translation found for ime_action_default (2840921885558045721) -->
+ <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
<skip />
</resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index ba88667..612a185 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -103,15 +103,7 @@
<string name="global_action_toggle_silent_mode">"Беззвучный режим"</string>
<string name="global_action_silent_mode_on_status">"Звук выключен"</string>
<string name="global_action_silent_mode_off_status">"Звук включен"</string>
- <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
- <skip />
<string name="safeMode">"Безопасный режим"</string>
- <!-- no translation found for android_system_label (6577375335728551336) -->
- <skip />
<string name="permgrouplab_costMoney">"Платные службы"</string>
<string name="permgroupdesc_costMoney">"Разрешить приложениям выполнять действия, за которые может взиматься плата."</string>
<string name="permgrouplab_messages">"Сообщения"</string>
@@ -397,8 +389,7 @@
<string name="lockscreen_emergency_call">"Экстренный вызов"</string>
<string name="lockscreen_pattern_correct">"Верно!"</string>
<string name="lockscreen_pattern_wrong">"Неверно, попробуйте еще раз"</string>
- <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
- <skip />
+ <string name="lockscreen_plugged_in">"Зарядка (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
<string name="lockscreen_low_battery">"Подключите зарядное устройство."</string>
<string name="lockscreen_missing_sim_message_short">"Нет SIM-карты."</string>
<string name="lockscreen_missing_sim_message">"В телефоне нет SIM-карты."</string>
@@ -421,15 +412,15 @@
<string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
<string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
<string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
- <!-- no translation found for hour_ampm (4329881288269772723) -->
+ <!-- no translation found for hour_ampm (7618670480400517084) -->
<skip />
- <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
+ <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
<skip />
<string name="status_bar_clear_all_button">"Очистить уведомления"</string>
<string name="status_bar_no_notifications_title">"Нет уведомлений"</string>
<string name="status_bar_ongoing_events_title">"Текущие"</string>
<string name="status_bar_latest_events_title">"Уведомления"</string>
- <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
+ <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
<skip />
<string name="battery_status_charging">"Идет зарядка..."</string>
<string name="battery_low_title">"Подключите зарядное устройство"</string>
@@ -578,12 +569,12 @@
<string name="Noon">"Полдень"</string>
<string name="midnight">"полночь"</string>
<string name="Midnight">"Полночь"</string>
- <!-- no translation found for month_day (3693060561170538204) -->
+ <!-- no translation found for month_day (5565829181417740906) -->
<skip />
- <!-- no translation found for month (1976700695144952053) -->
+ <!-- no translation found for month (7026169712234774086) -->
<skip />
<string name="month_day_year">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for month_year (2106203387378728384) -->
+ <!-- no translation found for month_year (9219019380312413367) -->
<skip />
<string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
<string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
@@ -612,11 +603,11 @@
<string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="DAY1">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="DAY2">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>, <xliff:g id="DAY1_0">%3$s</xliff:g> <xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="YEAR1">%4$s</xliff:g>, <xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>, <xliff:g id="DAY2_1">%8$s</xliff:g> <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="YEAR2">%9$s</xliff:g>, <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="abbrev_month_day_year">"<xliff:g id="DAY">%-d</xliff:g> <xliff:g id="MONTH">%b</xliff:g> <xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for abbrev_month_year (5966980891147982768) -->
+ <!-- no translation found for abbrev_month_year (3856424847226891943) -->
<skip />
- <!-- no translation found for abbrev_month_day (3156047263406783231) -->
+ <!-- no translation found for abbrev_month_day (5028815883653985933) -->
<skip />
- <!-- no translation found for abbrev_month (7304935052615731208) -->
+ <!-- no translation found for abbrev_month (3131032032850777433) -->
<skip />
<string name="day_of_week_long_sunday">"воскресенье"</string>
<string name="day_of_week_long_monday">"понедельник"</string>
@@ -780,8 +771,8 @@
<string name="extmedia_format_message">"Отформатировать карту SD? Все данные, находящиеся на карте, будут уничтожены."</string>
<string name="extmedia_format_button_format">"Формат"</string>
<string name="select_input_method">"Выбор способа ввода"</string>
- <string name="fast_scroll_alphabet">" АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ"</string>
- <string name="fast_scroll_numeric_alphabet">" 0123456789АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ"</string>
+ <string name="fast_scroll_alphabet">"АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ"</string>
+ <string name="fast_scroll_numeric_alphabet">"0123456789АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ"</string>
<string name="candidates_style"><u>"кандидаты"</u></string>
<string name="ext_media_checking_notification_title">"Подготовка карты SD"</string>
<string name="ext_media_checking_notification_message">"Поиск ошибок"</string>
@@ -798,18 +789,6 @@
<string name="activity_list_empty">"Подходящих действий не найдено"</string>
<string name="permlab_pkgUsageStats">"обновлять статистику использования компонентов"</string>
<string name="permdesc_pkgUsageStats">"Позволяет изменять собранную статистику использования компонентов. Не предназначено для использования обычными приложениями."</string>
- <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
- <skip />
- <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
- <skip />
- <!-- no translation found for ime_action_go (8320845651737369027) -->
- <skip />
- <!-- no translation found for ime_action_search (658110271822807811) -->
- <skip />
- <!-- no translation found for ime_action_send (2316166556349314424) -->
- <skip />
- <!-- no translation found for ime_action_next (3138843904009813834) -->
- <skip />
- <!-- no translation found for ime_action_default (2840921885558045721) -->
+ <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
<skip />
</resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 346e254..fbd58e8 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -103,15 +103,7 @@
<string name="global_action_toggle_silent_mode">"静音模式"</string>
<string name="global_action_silent_mode_on_status">"声音已关闭"</string>
<string name="global_action_silent_mode_off_status">"声音已开启"</string>
- <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
- <skip />
<string name="safeMode">"安全模式"</string>
- <!-- no translation found for android_system_label (6577375335728551336) -->
- <skip />
<string name="permgrouplab_costMoney">"需要您支付费用的服务"</string>
<string name="permgroupdesc_costMoney">"允许应用程序执行可能需要您支付费用的操作。"</string>
<string name="permgrouplab_messages">"您的信息"</string>
@@ -397,8 +389,7 @@
<string name="lockscreen_emergency_call">"紧急电话"</string>
<string name="lockscreen_pattern_correct">"正确!"</string>
<string name="lockscreen_pattern_wrong">"很抱歉,请重试"</string>
- <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
- <skip />
+ <string name="lockscreen_plugged_in">"正在充电 (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
<string name="lockscreen_low_battery">"连接您的充电器。"</string>
<string name="lockscreen_missing_sim_message_short">"没有 SIM 卡。"</string>
<string name="lockscreen_missing_sim_message">"手机中无 SIM 卡。"</string>
@@ -421,15 +412,15 @@
<string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
<string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
<string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
- <!-- no translation found for hour_ampm (4329881288269772723) -->
+ <!-- no translation found for hour_ampm (7618670480400517084) -->
<skip />
- <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
+ <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
<skip />
<string name="status_bar_clear_all_button">"清除通知"</string>
<string name="status_bar_no_notifications_title">"无通知"</string>
<string name="status_bar_ongoing_events_title">"正在进行的"</string>
<string name="status_bar_latest_events_title">"通知"</string>
- <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
+ <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
<skip />
<string name="battery_status_charging">"正在充电..."</string>
<string name="battery_low_title">"请连接充电器"</string>
@@ -578,12 +569,12 @@
<string name="Noon">"中午"</string>
<string name="midnight">"午夜"</string>
<string name="Midnight">"午夜"</string>
- <!-- no translation found for month_day (3693060561170538204) -->
+ <!-- no translation found for month_day (5565829181417740906) -->
<skip />
- <!-- no translation found for month (1976700695144952053) -->
+ <!-- no translation found for month (7026169712234774086) -->
<skip />
<string name="month_day_year">"<xliff:g id="YEAR">%Y</xliff:g> 年 <xliff:g id="MONTH">%B</xliff:g> 月 <xliff:g id="DAY">%-d</xliff:g> 日"</string>
- <!-- no translation found for month_year (2106203387378728384) -->
+ <!-- no translation found for month_year (9219019380312413367) -->
<skip />
<string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
<string name="date_and_time">"<xliff:g id="YEAR">%Y</xliff:g> 年 <xliff:g id="MONTH">%B</xliff:g> 月 <xliff:g id="DAY">%-d</xliff:g> 日 <xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
@@ -612,11 +603,11 @@
<string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="YEAR1">%4$s</xliff:g> 年 <xliff:g id="MONTH1">%2$s</xliff:g> 月 <xliff:g id="DAY1">%3$s</xliff:g> 日 <xliff:g id="TIME1">%5$s</xliff:g> 至 <xliff:g id="YEAR2">%9$s</xliff:g> 年 <xliff:g id="MONTH2">%7$s</xliff:g> 月 <xliff:g id="DAY2">%8$s</xliff:g> 日 <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="YEAR1">%4$s</xliff:g> 年 <xliff:g id="MONTH1">%2$s</xliff:g> 月 <xliff:g id="DAY1_0">%3$s</xliff:g> 日<xliff:g id="WEEKDAY1">%1$s</xliff:g> <xliff:g id="TIME1">%5$s</xliff:g> 至 <xliff:g id="YEAR2">%9$s</xliff:g> 年 <xliff:g id="MONTH2">%7$s</xliff:g> 月 <xliff:g id="DAY2_1">%8$s</xliff:g> 日<xliff:g id="WEEKDAY2">%6$s</xliff:g> <xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="abbrev_month_day_year">"<xliff:g id="YEAR">%Y</xliff:g> 年 <xliff:g id="MONTH">%b</xliff:g> 月 <xliff:g id="DAY">%-d</xliff:g> 日"</string>
- <!-- no translation found for abbrev_month_year (5966980891147982768) -->
+ <!-- no translation found for abbrev_month_year (3856424847226891943) -->
<skip />
- <!-- no translation found for abbrev_month_day (3156047263406783231) -->
+ <!-- no translation found for abbrev_month_day (5028815883653985933) -->
<skip />
- <!-- no translation found for abbrev_month (7304935052615731208) -->
+ <!-- no translation found for abbrev_month (3131032032850777433) -->
<skip />
<string name="day_of_week_long_sunday">"周日"</string>
<string name="day_of_week_long_monday">"周一"</string>
@@ -780,8 +771,8 @@
<string name="extmedia_format_message">"您确定要格式化 SD 卡?卡上的所有数据都会丢失。"</string>
<string name="extmedia_format_button_format">"格式化"</string>
<string name="select_input_method">"选择输入方法"</string>
- <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
- <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style"><u>"候选"</u></string>
<string name="ext_media_checking_notification_title">"正在准备 SD 卡"</string>
<string name="ext_media_checking_notification_message">"检查是否有错误"</string>
@@ -798,18 +789,6 @@
<string name="activity_list_empty">"找不到匹配的活动"</string>
<string name="permlab_pkgUsageStats">"更新组件使用情况统计"</string>
<string name="permdesc_pkgUsageStats">"允许修改收集的组件使用情况统计。普通应用程序不能使用此权限。"</string>
- <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
- <skip />
- <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
- <skip />
- <!-- no translation found for ime_action_go (8320845651737369027) -->
- <skip />
- <!-- no translation found for ime_action_search (658110271822807811) -->
- <skip />
- <!-- no translation found for ime_action_send (2316166556349314424) -->
- <skip />
- <!-- no translation found for ime_action_next (3138843904009813834) -->
- <skip />
- <!-- no translation found for ime_action_default (2840921885558045721) -->
+ <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
<skip />
</resources>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 6d4b821..18d6711 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -103,15 +103,7 @@
<string name="global_action_toggle_silent_mode">"靜音模式"</string>
<string name="global_action_silent_mode_on_status">"音效已關閉"</string>
<string name="global_action_silent_mode_off_status">"聲音已開啟"</string>
- <!-- no translation found for global_actions_toggle_airplane_mode (5884330306926307456) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_on_status (2719557982608919750) -->
- <skip />
- <!-- no translation found for global_actions_airplane_mode_off_status (5075070442854490296) -->
- <skip />
<string name="safeMode">"安全模式"</string>
- <!-- no translation found for android_system_label (6577375335728551336) -->
- <skip />
<string name="permgrouplab_costMoney">"需要額外費用的服務。"</string>
<string name="permgroupdesc_costMoney">"若您允許應用程式執行此操作,可能需要支付一些費用。"</string>
<string name="permgrouplab_messages">"您的簡訊"</string>
@@ -397,8 +389,7 @@
<string name="lockscreen_emergency_call">"緊急電話"</string>
<string name="lockscreen_pattern_correct">"正確!"</string>
<string name="lockscreen_pattern_wrong">"抱歉,請再試一次"</string>
- <!-- no translation found for lockscreen_plugged_in (613343852842944435) -->
- <skip />
+ <string name="lockscreen_plugged_in">"充電中 (<xliff:g id="NUMBER">%d%%</xliff:g>)"</string>
<string name="lockscreen_low_battery">"請連接充電器。"</string>
<string name="lockscreen_missing_sim_message_short">"沒有 SIM 卡。"</string>
<string name="lockscreen_missing_sim_message">"手機未插入 SIM 卡。"</string>
@@ -421,15 +412,15 @@
<string name="status_bar_time_format">"<xliff:g id="HOUR">h</xliff:g>:<xliff:g id="MINUTE">mm</xliff:g> <xliff:g id="AMPM">AA</xliff:g>"</string>
<string name="hour_minute_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
<string name="hour_minute_cap_ampm">"<xliff:g id="HOUR">%-l</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
- <!-- no translation found for hour_ampm (4329881288269772723) -->
+ <!-- no translation found for hour_ampm (7618670480400517084) -->
<skip />
- <!-- no translation found for hour_cap_ampm (1829009197680861107) -->
+ <!-- no translation found for hour_cap_ampm (5117798389811605468) -->
<skip />
<string name="status_bar_clear_all_button">"清除通知"</string>
<string name="status_bar_no_notifications_title">"沒有通知"</string>
<string name="status_bar_ongoing_events_title">"進行中"</string>
<string name="status_bar_latest_events_title">"通知"</string>
- <!-- no translation found for battery_status_text_percent_format (7660311274698797147) -->
+ <!-- no translation found for battery_status_text_percent_format (8818848472818880005) -->
<skip />
<string name="battery_status_charging">"充電中"</string>
<string name="battery_low_title">"請連接充電器"</string>
@@ -578,12 +569,12 @@
<string name="Noon">"中午"</string>
<string name="midnight">"午夜"</string>
<string name="Midnight">"午夜"</string>
- <!-- no translation found for month_day (3693060561170538204) -->
+ <!-- no translation found for month_day (5565829181417740906) -->
<skip />
- <!-- no translation found for month (1976700695144952053) -->
+ <!-- no translation found for month (7026169712234774086) -->
<skip />
<string name="month_day_year">"<xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>,<xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for month_year (2106203387378728384) -->
+ <!-- no translation found for month_year (9219019380312413367) -->
<skip />
<string name="time_of_day">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g>"</string>
<string name="date_and_time">"<xliff:g id="HOUR">%H</xliff:g>:<xliff:g id="MINUTE">%M</xliff:g>:<xliff:g id="SECOND">%S</xliff:g> <xliff:g id="MONTH">%B</xliff:g> <xliff:g id="DAY">%-d</xliff:g>,<xliff:g id="YEAR">%Y</xliff:g>"</string>
@@ -612,11 +603,11 @@
<string name="same_month_mdy1_time1_mdy2_time2">"<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1">%3$s</xliff:g>,<xliff:g id="YEAR1">%4$s</xliff:g>,<xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2">%8$s</xliff:g>,<xliff:g id="YEAR2">%9$s</xliff:g>,<xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">"<xliff:g id="WEEKDAY1">%1$s</xliff:g>,<xliff:g id="MONTH1">%2$s</xliff:g> <xliff:g id="DAY1_0">%3$s</xliff:g>,<xliff:g id="YEAR1">%4$s</xliff:g>,<xliff:g id="TIME1">%5$s</xliff:g> – <xliff:g id="WEEKDAY2">%6$s</xliff:g>,<xliff:g id="MONTH2">%7$s</xliff:g> <xliff:g id="DAY2_1">%8$s</xliff:g>,<xliff:g id="YEAR2">%9$s</xliff:g>,<xliff:g id="TIME2">%10$s</xliff:g>"</string>
<string name="abbrev_month_day_year">"<xliff:g id="MONTH">%b</xliff:g> <xliff:g id="DAY">%-d</xliff:g>,<xliff:g id="YEAR">%Y</xliff:g>"</string>
- <!-- no translation found for abbrev_month_year (5966980891147982768) -->
+ <!-- no translation found for abbrev_month_year (3856424847226891943) -->
<skip />
- <!-- no translation found for abbrev_month_day (3156047263406783231) -->
+ <!-- no translation found for abbrev_month_day (5028815883653985933) -->
<skip />
- <!-- no translation found for abbrev_month (7304935052615731208) -->
+ <!-- no translation found for abbrev_month (3131032032850777433) -->
<skip />
<string name="day_of_week_long_sunday">"星期日"</string>
<string name="day_of_week_long_monday">"星期一"</string>
@@ -780,8 +771,8 @@
<string name="extmedia_format_message">"確定要將 SD 卡格式化嗎?該 SD 卡中的所有資料將會遺失。"</string>
<string name="extmedia_format_button_format">"格式化"</string>
<string name="select_input_method">"選取輸入法"</string>
- <string name="fast_scroll_alphabet">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
- <string name="fast_scroll_numeric_alphabet">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_alphabet">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+ <string name="fast_scroll_numeric_alphabet">"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style"><u>"待選項目"</u></string>
<string name="ext_media_checking_notification_title">"正在準備 SD 卡"</string>
<string name="ext_media_checking_notification_message">"正在檢查錯誤"</string>
@@ -798,18 +789,6 @@
<string name="activity_list_empty">"找不到符合的活動"</string>
<string name="permlab_pkgUsageStats">"更新元件使用統計資料"</string>
<string name="permdesc_pkgUsageStats">"允許修改收集到的元件使用統計資料。一般應用程式不會使用此功能。"</string>
- <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
- <skip />
- <!-- no translation found for gadget_host_error_inflating (2613287218853846830) -->
- <skip />
- <!-- no translation found for ime_action_go (8320845651737369027) -->
- <skip />
- <!-- no translation found for ime_action_search (658110271822807811) -->
- <skip />
- <!-- no translation found for ime_action_send (2316166556349314424) -->
- <skip />
- <!-- no translation found for ime_action_next (3138843904009813834) -->
- <skip />
- <!-- no translation found for ime_action_default (2840921885558045721) -->
+ <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4742624865416767717) -->
<skip />
</resources>
diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml
index 18a1355..9f2c840 100644
--- a/core/res/res/values/arrays.xml
+++ b/core/res/res/values/arrays.xml
@@ -4,102 +4,89 @@
**
** Copyright 2006, The Android Open Source Project
**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
**
-** http://www.apache.org/licenses/LICENSE-2.0
+** http://www.apache.org/licenses/LICENSE-2.0
**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+<resources>
<!-- Do not translate. These are all of the drawable resources that should be preloaded by
the zygote process before it starts forking application processes. -->
<array name="preloaded_drawables">
+ <item>@drawable/scrollbar_handle_vertical</item>
+ <item>@drawable/scrollbar_handle_horizontal</item>
+ <item>@drawable/scrollbar_horizontal</item>
+ <item>@drawable/scrollbar_vertical</item>
+
+ <item>@drawable/edit_text</item>
+
+ <item>@drawable/title_bar</item>
+
+ <item>@drawable/spinner_dropdown_background_down</item>
+ <item>@drawable/divider_horizontal_bright</item>
+
+ <item>@drawable/popup_full_dark</item>
+ <item>@drawable/panel_background</item>
+
<item>@drawable/sym_def_app_icon</item>
- <item>@drawable/arrow_down_float</item>
- <item>@drawable/btn_check</item>
- <item>@drawable/btn_check_label_background</item>
- <item>@drawable/btn_check_off</item>
- <item>@drawable/btn_check_on</item>
+
+ <item>@drawable/progress_horizontal</item>
+ <item>@drawable/list_selector_background</item>
<item>@drawable/btn_default</item>
- <item>@drawable/btn_default_small</item>
+
+ <!-- New additions... -->
+ <item>@drawable/popup_top_dark</item>
+ <item>@drawable/popup_center_dark</item>
+ <item>@drawable/popup_bottom_dark</item>
+ <item>@drawable/popup_top_bright</item>
+ <item>@drawable/popup_center_bright</item>
+ <item>@drawable/popup_bottom_bright</item>
+
+ <!-- These are not normally referenced at first boot, but maybe
+ would be good to preload? -->
+ <item>@drawable/btn_check</item>
<item>@drawable/btn_dropdown</item>
- <item>@drawable/btn_plus</item>
- <item>@drawable/btn_minus</item>
<item>@drawable/btn_radio</item>
- <item>@drawable/btn_star</item>
- <item>@drawable/btn_toggle</item>
- <item>@drawable/ic_emergency</item>
- <item>@drawable/divider_horizontal_bright</item>
- <item>@drawable/divider_horizontal_dark</item>
- <item>@drawable/edit_text</item>
- <item>@drawable/expander_group</item>
<item>@drawable/list_selector_background</item>
+ <item>@drawable/btn_default_small</item>
+ <item>@drawable/btn_toggle</item>
+
+ <!-- Contacts -->
+ <item>@drawable/tab_indicator</item>
+ <item>@drawable/btn_star</item>
+ <item>@drawable/button_inset</item>
+
+ <!-- Menus -->
<item>@drawable/menu_background</item>
<item>@drawable/menu_background_fill_parent_width</item>
<item>@drawable/menu_selector</item>
- <item>@drawable/panel_background</item>
- <item>@drawable/popup_bottom_bright</item>
- <item>@drawable/popup_bottom_dark</item>
- <item>@drawable/popup_bottom_medium</item>
- <item>@drawable/popup_center_bright</item>
- <item>@drawable/popup_center_dark</item>
- <item>@drawable/popup_full_dark</item>
- <item>@drawable/popup_top_bright</item>
- <item>@drawable/popup_top_dark</item>
- <item>@drawable/progress_horizontal</item>
- <item>@drawable/progress_indeterminate_horizontal</item>
- <item>@drawable/progress_small</item>
- <item>@drawable/progress_small_titlebar</item>
- <item>@drawable/screen_background_dark</item>
- <item>@drawable/screen_background_light</item>
- <item>@drawable/scrollbar_handle_horizontal</item>
- <item>@drawable/scrollbar_handle_vertical</item>
- <item>@drawable/spinner_dropdown_background</item>
- <item>@drawable/title_bar</item>
- <item>@drawable/title_bar_shadow</item>
- <item>@drawable/zoom_ring_arrows</item>
- <item>@drawable/zoom_ring_overview_tab</item>
- <item>@drawable/zoom_ring_thumb</item>
- <item>@drawable/zoom_ring_thumb_minus_arrow_rotatable</item>
- <item>@drawable/zoom_ring_thumb_plus_arrow_rotatable</item>
- <item>@drawable/zoom_ring_track</item>
- <item>@drawable/zoom_ring_track_absolute</item>
+ <item>@drawable/divider_vertical_bright</item>
+
+ <item>@drawable/expander_group</item>
+
<!-- Visual lock screen -->
<item>@drawable/indicator_code_lock_drag_direction_green_up</item>
<item>@drawable/indicator_code_lock_drag_direction_red_up</item>
<item>@drawable/indicator_code_lock_point_area_default</item>
<item>@drawable/indicator_code_lock_point_area_green</item>
<item>@drawable/indicator_code_lock_point_area_red</item>
+
+ <!-- Zoom controls for maps, browser, etc. -->
+ <item>@drawable/btn_plus</item>
+ <item>@drawable/btn_minus</item>
+ <item>@drawable/zoom_plate</item>
+
</array>
-
- <!-- Do not translate. These are all of the color state list resources that should be
- preloaded by the zygote process before it starts forking application processes. -->
- <array name="preloaded_color_state_lists">
- <item>@color/hint_foreground_dark</item>
- <item>@color/hint_foreground_light</item>
- <item>@color/primary_text_dark</item>
- <item>@color/primary_text_dark_disable_only</item>
- <item>@color/primary_text_light</item>
- <item>@color/primary_text_light_disable_only</item>
- <item>@color/primary_text_light_nodisable</item>
- <item>@color/secondary_text_dark</item>
- <item>@color/secondary_text_light</item>
- <item>@color/tab_indicator_text</item>
- <item>@color/tertiary_text_dark</item>
- <item>@color/tertiary_text_light</item>
- <item>#ff000000</item>
- <item>#00000000</item>
- <item>#ffffffff</item>
- </array>
-
+
<!-- Do not translate. -->
<integer-array name="maps_starting_lat_lng">
<item>36149777</item>
@@ -113,19 +100,19 @@
<!-- Do not translate. Defines the slots for the right-hand side icons. That is to say, the
icons in the status bar that are not notifications. -->
<string-array name="status_bar_icon_order">
- <item><xliff:g id="id">clock</xliff:g></item>
- <item><xliff:g id="id">alarm_clock</xliff:g></item>
- <item><xliff:g id="id">battery</xliff:g></item>
- <item><xliff:g id="id">phone_signal</xliff:g></item>
- <item><xliff:g id="id">data_connection</xliff:g></item>
- <item><xliff:g id="id">volume</xliff:g></item>
- <item><xliff:g id="id">mute</xliff:g></item>
- <item><xliff:g id="id">speakerphone</xliff:g></item>
- <item><xliff:g id="id">wifi</xliff:g></item>
- <item><xliff:g id="id">bluetooth</xliff:g></item>
- <item><xliff:g id="id">gps</xliff:g></item>
- <item><xliff:g id="id">sync_active</xliff:g></item>
- <item><xliff:g id="id">sync_failing</xliff:g></item>
- <item><xliff:g id="id">ime</xliff:g></item>
+ <item>clock</item>
+ <item>alarm_clock</item>
+ <item>battery</item>
+ <item>phone_signal</item>
+ <item>data_connection</item>
+ <item>volume</item>
+ <item>mute</item>
+ <item>speakerphone</item>
+ <item>wifi</item>
+ <item>bluetooth</item>
+ <item>gps</item>
+ <item>sync_active</item>
+ <item>sync_failing</item>
+ <item>ime</item>
</string-array>
</resources>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 44da1d5..c1a6440 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -405,8 +405,7 @@
<!-- **************************************************************** -->
<eat-comment />
- <!-- Size of text. Recommended dimension type for text is "sp" for scaled-pixels (example: 15sp).
- Supported values include the following:<p/>
+ <!-- Size of text (example: 15sp). Supported values include the following:<p/>
<ul>
<li><b>px</b> Pixels</li>
<li><b>sp</b> Scaled pixels (scaled to relative pixel size on screen). See {@link android.util.DisplayMetrics} for more information.</li>
@@ -415,7 +414,6 @@
</ul>
-->
<attr name="textSize" format="dimension" />
-
<!-- Default text typeface. -->
<attr name="typeface">
<enum name="normal" value="0" />
@@ -423,26 +421,20 @@
<enum name="serif" value="2" />
<enum name="monospace" value="3" />
</attr>
-
<!-- Default text typeface style. -->
<attr name="textStyle">
<flag name="normal" value="0" />
<flag name="bold" value="1" />
<flag name="italic" value="2" />
</attr>
-
<!-- Color of text (usually same as colorForeground). -->
<attr name="textColor" format="reference|color" />
-
<!-- Color of highlighted text. -->
<attr name="textColorHighlight" format="reference|color" />
-
<!-- Color of hint text (displayed when the field is empty). -->
<attr name="textColorHint" format="reference|color" />
-
<!-- Color of link text (URLs). -->
<attr name="textColorLink" format="reference|color" />
-
<!-- Where to ellipsize text. -->
<attr name="ellipsize">
<enum name="none" value="0" />
@@ -451,7 +443,6 @@
<enum name="end" value="3" />
<enum name="marquee" value="4" />
</attr>
-
<!-- The type of data being placed in a text field, used to help an
input method decide how to let the user enter text. The constants
here correspond to those defined by
@@ -494,9 +485,13 @@
<flag name="textMultiLine" value="0x00020001" />
<!-- Can be combined with <var>text</var> and its variations to
indicate that though the regular text view should not be multiple
- lines, the IME should provide multiple lines if it can. Corresponds to
+ lines, and IME should provide multiple lines if it can. Corresponds to
{@link android.text.InputType#TYPE_TEXT_FLAG_IME_MULTI_LINE}. -->
<flag name="textImeMultiLine" value="0x00040001" />
+ <!-- Can be combined with <var>text</var> and its variations to
+ indicate that a search string is being entered. Corresponds to
+ {@link android.text.InputType#TYPE_TEXT_FLAG_SEARCH}. -->
+ <flag name="textSearch" value="0x00080001" />
<!-- Text that will be used as a URI. Corresponds to
{@link android.text.InputType#TYPE_CLASS_TEXT} |
{@link android.text.InputType#TYPE_TEXT_VARIATION_URI}. -->
@@ -563,46 +558,6 @@
<flag name="time" value="0x00000024" />
</attr>
- <!-- Additional features you can enable in an IME associated with an editor,
- to improve the integration with your application. The constants
- here correspond to those defined by
- {@link android.view.inputmethod.EditorInfo#imeOptions}. -->
- <attr name="imeOptions">
- <!-- There are no special semantics associated with this editor. -->
- <flag name="normal" value="0x00000000" />
- <!-- There is no special action associated with this editor.
- Corresponds to
- {@link android.view.inputmethod.EditorInfo#IME_ACTION_NONE}. -->
- <flag name="actionNone" value="0x00000000" />
- <!-- The action key performs a "go"
- operation to take the user to the target of the text they typed.
- Typically used, for example, when entering a URL.
- {@link android.view.inputmethod.EditorInfo#IME_ACTION_GO}. -->
- <flag name="actionGo" value="0x00000001" />
- <!-- The action key performs a "search"
- operation, taking the user to the results of searching for the text
- the have typed (in whatever context is appropriate).
- {@link android.view.inputmethod.EditorInfo#IME_ACTION_SEARCH}. -->
- <flag name="actionSearch" value="0x00000002" />
- <!-- The action key performs a "send"
- operation, delivering the text to its target. This is typically used
- when composing a message.
- {@link android.view.inputmethod.EditorInfo#IME_ACTION_SEND}. -->
- <flag name="actionSend" value="0x00000003" />
- <!-- The action key performs a "next"
- operation, taking the user to the next field that will accept text.
- {@link android.view.inputmethod.EditorInfo#IME_ACTION_NEXT}. -->
- <flag name="actionNext" value="0x00000004" />
- <!-- Used in conjunction with a custom action,
- this indicates that the action should not
- be available in-line as the same as a "enter" key. Typically this is
- because the action has such a significant impact or is not recoverable
- enough that accidentally hitting it should be avoided, such as sending
- a message.
- {@link android.view.inputmethod.EditorInfo#IME_FLAG_NO_ENTER_ACTION}. -->
- <flag name="flagNoEnterAction" value="0x40000000" />
- </attr>
-
<!-- A coordinate in the X dimension. -->
<attr name="x" format="dimension" />
<!-- A coordinate in the Y dimension. -->
@@ -1647,7 +1602,7 @@
<declare-styleable name="TextAppearance">
<!-- Text color. -->
<attr name="textColor" />
- <!-- Size of the text. Recommended dimension type for text is "sp" for scaled-pixels (example: 15sp). -->
+ <!-- Size of the text. -->
<attr name="textSize" />
<!-- Style (bold, italic, bolditalic) for the text. -->
<attr name="textStyle" />
@@ -1688,7 +1643,7 @@
<attr name="textColorHint" />
<!-- Base text color, typeface, size, and style. -->
<attr name="textAppearance" />
- <!-- Size of the text. Recommended dimension type for text is "sp" for scaled-pixels (example: 15sp). -->
+ <!-- Size of the text. -->
<attr name="textSize" />
<!-- Sets the horizontal scaling factor for the text -->
<attr name="textScaleX" format="float" />
@@ -1860,22 +1815,13 @@
<enum name="marquee_forever" value="-1" />
</attr>
<attr name="inputType" />
- <attr name="imeOptions" />
<!-- An addition content type description to supply to the input
method attached to the text view, which is private to the
implementation of the input method. This simply fills in
- the {@link android.view.inputmethod.EditorInfo#privateImeOptions
- EditorInfo.privateImeOptions} field when the input
+ the {@link android.view.inputmethod.EditorInfo#privateContentType
+ EditorInfo.privateContentType} field when the input
method is connected. -->
- <attr name="privateImeOptions" format="string" />
- <!-- Supply a value for
- {@link android.view.inputmethod.EditorInfo#actionLabel EditorInfo.actionLabel}
- used when an input method is connected to the text view. -->
- <attr name="imeActionLabel" format="string" />
- <!-- Supply a value for
- {@link android.view.inputmethod.EditorInfo#actionId EditorInfo.actionId}
- used when an input method is connected to the text view. -->
- <attr name="imeActionId" format="integer" />
+ <attr name="editorPrivateContentType" format="string" />
<!-- Reference to an
{@link android.R.styleable#InputExtras &lt;input-extras&gt;}
XML resource containing additional data to
@@ -1905,19 +1851,6 @@
<attr name="dropDownVerticalOffset" format="dimension" />
<!-- Amount of pixels by which the drop down should be offset horizontally. -->
<attr name="dropDownHorizontalOffset" format="dimension" />
- <!-- View to anchor the auto-complete dropdown to. If not specified, the text view itself
- is used. -->
- <attr name="dropDownAnchor" format="reference" />
- <!-- Specifies the basic width of the dropdown. Its value may
- be a dimension (such as "12dip") for a constant width, fill_parent
- to fill the width of the screen, or wrap_content to match the width
- of the anchored view. -->
- <attr name="dropDownWidth" format="dimension">
- <!-- The dropdown should fill the width of the screen. -->
- <enum name="fill_parent" value="-1" />
- <!-- The dropdown should fit the width of its anchor. -->
- <enum name="wrap_content" value="-2" />
- </attr>
<attr name="inputType" />
</declare-styleable>
<declare-styleable name="PopupWindow">
@@ -2237,16 +2170,6 @@
</attr>
</declare-styleable>
- <!-- Drawable used to draw 9-patches. -->
- <declare-styleable name="NinePatchDrawable">
- <!-- Identifier of the bitmap file. This attribute is mandatory. -->
- <attr name="src" />
- <!-- Enables or disables dithering of the bitmap if the bitmap does not have the
- same pixel configuration as the screen (for instance: a ARGB 8888 bitmap with
- an RGB 565 screen.) -->
- <attr name="dither" />
- </declare-styleable>
-
<!-- Drawable used to draw a single color. -->
<declare-styleable name="ColorDrawable">
<!-- The color to use. -->
@@ -2611,7 +2534,6 @@
changing to use only icons for its buttons.}-->
<attr name="searchButtonText" format="string" />
<attr name="inputType" />
- <attr name="imeOptions" />
<!-- Additional features are controlled by mode bits in this field. Omitting
this field, or setting to zero, provides default behavior. <i>Optional attribute.</i>
@@ -3099,20 +3021,14 @@
<!-- =============================== -->
<!-- Use <code>gadget-provider</code> as the root tag of the XML resource that
- describes a gadget provider. See TODO android.gadget package
+ describes a gadget provider. See TODO android.gadget android.gadget package
for more info.
-->
<declare-styleable name="GadgetProviderInfo">
- <!-- Minimum width of the gadget. -->
<attr name="minWidth"/>
- <!-- Minimum height of the gadget. -->
<attr name="minHeight"/>
- <!-- Update period in milliseconds, or 0 if the gadget will update itself. -->
<attr name="updatePeriodMillis" format="integer" />
- <!-- A resource id of a layout. -->
<attr name="initialLayout" format="reference" />
- <!-- A class name in the gadget's package to be launched to configure.
- If not supplied, then no activity will be launched. -->
<attr name="configure" format="string" />
</declare-styleable>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 94d0793..e6b0ff7 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -942,7 +942,7 @@
<public type="attr" name="inputType" id="0x01010220" />
<public type="attr" name="isDefault" id="0x01010221" />
<public type="attr" name="windowDisablePreview" id="0x01010222" />
- <public type="attr" name="privateImeOptions" id="0x01010223" />
+ <public type="attr" name="editorPrivateContentType" id="0x01010223" />
<public type="attr" name="editorExtras" id="0x01010224" />
<public type="attr" name="settingsActivity" id="0x01010225" />
<public type="attr" name="fastScrollEnabled" id="0x01010226" />
@@ -1005,11 +1005,6 @@
<public type="attr" name="innerRadius" id="0x0101025f" />
<public type="attr" name="thickness" id="0x01010260" />
<public type="attr" name="sharedUserLabel" id="0x01010261" />
- <public type="attr" name="dropDownWidth" id="0x01010262" />
- <public type="attr" name="dropDownAnchor" id="0x01010263" />
- <public type="attr" name="imeOptions" id="0x01010264" />
- <public type="attr" name="imeActionLabel" id="0x01010265" />
- <public type="attr" name="imeActionId" id="0x01010266" />
<!-- The part of the UI shown by an
{@link android.inputmethodservice.InputMethodService} that contains the
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 346fa80..7adf542 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -240,15 +240,6 @@
<!-- status message in phone options dialog for when silent mode is disabled -->
<string name="global_action_silent_mode_off_status">Sound is ON</string>
- <!-- label for item that toggles airplane mode -->
- <string name="global_actions_toggle_airplane_mode">Airplane mode</string>
-
- <!-- status message in phone options dialog for when airplane mode is on -->
- <string name="global_actions_airplane_mode_on_status">Airplane mode is ON</string>
-
- <!-- status message in phone options dialog for when airplane mode is off -->
- <string name="global_actions_airplane_mode_off_status">Airplane mode is OFF</string>
-
<!-- Displayed to the user to tell them that they have started up the phone in "safe mode" -->
<string name="safeMode">Safe mode</string>
@@ -1125,7 +1116,7 @@
<!-- When the lock screen is showing and the phone plugged in, show the current
charge %. -->
- <string name="lockscreen_plugged_in">Charging (<xliff:g id="number">%d</xliff:g><xliff:g id="percent">%%</xliff:g>)</string>
+ <string name="lockscreen_plugged_in">Charging (<xliff:g id="number">%d%%</xliff:g>)</string>
<!-- When the lock screen is showing and the battery is low, warn user to plug
in the phone soon. -->
@@ -2274,26 +2265,6 @@
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permdesc_pkgUsageStats">Allows the modification of collected component usage statistics. Not for use by normal applications.</string>
- <!-- Shown in the tutorial for tap twice for zoom control. -->
- <string name="tutorial_double_tap_to_zoom_message_short">Tap twice for zoom control</string>
-
- <!-- Shown in gadget hosts (e.g. the home screen) when there was an error inflating
- the gadget. -->
- <string name="gadget_host_error_inflating">Error inflating widget</string>
-
- <!-- Long label for a button on a full-screen input method for the "Go" action. -->
- <string name="ime_action_go">Go</string>
-
- <!-- Long label for a button on a full-screen input method for the "Search" action. -->
- <string name="ime_action_search">Search</string>
-
- <!-- Long label for a button on a full-screen input method for the "Send" action. -->
- <string name="ime_action_send">Send</string>
-
- <!-- Long label for a button on a full-screen input method for the "Next" action. -->
- <string name="ime_action_next">Next</string>
-
- <!-- Long label for a button on a full-screen input method for an unknown action. -->
- <string name="ime_action_default">Execute</string>
-
+ <!-- Shown in the tutorial for double tap to zoom. -->
+ <string name="tutorial_double_tap_to_zoom_message_short">Double tap to zoom</string>
</resources>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 54eba62..6ed2d8d 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -349,9 +349,8 @@
<item name="android:completionThreshold">2</item>
<item name="android:dropDownSelector">@android:drawable/list_selector_background</item>
<item name="android:popupBackground">@android:drawable/spinner_dropdown_background</item>
- <item name="android:dropDownVerticalOffset">-6px</item>
+ <item name="android:dropDownVerticalOffset">-8px</item>
<item name="android:dropDownHorizontalOffset">0px</item>
- <item name="android:dropDownWidth">wrap_content</item>
</style>
<style name="Widget.Spinner">
diff --git a/docs/html/app.yaml b/docs/html/app.yaml
index 9ffb775..c63791e 100644
--- a/docs/html/app.yaml
+++ b/docs/html/app.yaml
@@ -3,36 +3,9 @@ version: 1
runtime: python
api_version: 1
-# This file defines two mutually exclusive
-# hander blocks:
-# - a handler for use on a local dev_appserver
-# during development or non-production doc build
-# - a handler for use on a production gae
-# instance. This handler requires that the
-# docs files in the app have been compressed
-# with divide_and_compress.py and that main.py
-# and gae_shell/ are present.
-#
-# Only one of the handler blocks should be
-# uncommented at any given time. By default,
-# the development handler is exposed.
-
handlers:
-# DEVELOPMENT HANDLER
-# (this handler block *must* be commented
-# out before pushing to a production server)
- url: /
static_dir: /
-# PRODUCTION GAE HANDLER
-#- url: /gae_shell/static
-# static_dir: gae_shell/static
-# expiration: 1d
-#
-#- url: /gae_shell/.*
-# script: /gae_shell/shell.py
-# login: admin
-#
-#- url: .*
-# script: main.py
+
diff --git a/docs/html/community/index.jd b/docs/html/community/index.jd
index 2df4c01..4dc5503 100644
--- a/docs/html/community/index.jd
+++ b/docs/html/community/index.jd
@@ -4,7 +4,7 @@ page.title=Community
<div id="mainBodyFluid">
<h1>Community</h1>
- <p>Welcome to the Android developers community! We're glad you're here and invite you to participate in these discussions. Before posting, please read the <a href="http://source.android.com/discuss/android-discussion-groups-charter">Groups Charter</a> that covers the community guidelines.</p>
+ <p>Welcome to the Android developers community! We're glad you're here and invite you to participate in these discussions. Before posting, please red the <a href="#">Groups Charter</a> that covers the community guidelines.</p>
<p class="note"><strong>Note:</strong> If you are seeking discussion about Android source code (not application development),
then please refer to the <a href="http://source.android.com/discuss">Open Source Project Mailing lists</a>.</p>
@@ -115,4 +115,4 @@ you want to read this group?" select one of the email options. </li>
-</div>
+</div> \ No newline at end of file
diff --git a/docs/html/guide/publishing/app-signing.jd b/docs/html/guide/publishing/app-signing.jd
index 28c927a..1862b50 100644
--- a/docs/html/guide/publishing/app-signing.jd
+++ b/docs/html/guide/publishing/app-signing.jd
@@ -94,7 +94,7 @@ you can run Keytool manually to generate your own keystore/key and then sign you
application with Jarsigner.</li>
</ul>
-<h2 id="strategies">Signing Strategies</h2>
+<h2 id="strategies">Signing Strategies</h3>
<p>Some aspects of application signing may affect how you approach the development
of your application, especially if you are planning to release multiple
diff --git a/docs/html/guide/publishing/preparing.jd b/docs/html/guide/publishing/preparing.jd
index d355265..4db546d 100644
--- a/docs/html/guide/publishing/preparing.jd
+++ b/docs/html/guide/publishing/preparing.jd
@@ -18,11 +18,9 @@ page.title=Preparing to Publish: A Checklist
<p>Publishing an application means testing it, packaging it appropriately, and
making it available to users of Android-powered mobile devices.</p>
-<p>If you plan to publish your application for installation on
-Android-powered devices, there are several things you need to do, to get
-your application ready. This document highlights the significant
-checkpoints for preparing your application for a successful release.
-</p>
+<p>If you plan to publish your application for installation on Android-powered devices,
+there are several things you need to do, to get your application ready. This document
+the significant checkpoints for preparing your application for a successful release. </p>
<p>If you will publish your application on Android Market, please also see <a
href="{@docRoot}guide/publishing/publishing.html#market">Publishing on Android Market</a>
@@ -69,7 +67,7 @@ testing classes and tools. You can use
{@link android.app.Instrumentation Instrumentation} to run JUnit and other
test cases, and you can use testing
tools such as the <a href="{@docRoot}guide/developing/tools/monkey.html">UI/Application
-Exerciser Monkey</a>. </p>
+Exerciser Monkey</a>. </p>
<ul>
<li>To ensure that your application will run properly for users, you should make
@@ -133,7 +131,7 @@ code.</li>
<h2 id="finalcompile">Before you do the final compile of your application</h2>
-<h3 id="versionapp">5. Version your application</h3>
+<h3 id="versionapp">5. Version Your Application</h3>
<p>Before you compile your application, you must make sure that you have defined
a version number for your application, specifying an appropriate value for both
@@ -149,8 +147,7 @@ increment both the <code>android:versionCode</code> and
element in the application's manifest file, using appropriate values. </p>
<p>For detailed information about how to define version information for your
-application, see <a href="{@docRoot}guide/publishing/versioning.html">Versioning
-Your Applications</a>.</p>
+application, see <a href="{@docRoot}guide/publishing/versioning.html">Versioning Your Applications</a>.</p>
<h3 id="cryptokey">6. Obtain a suitable cryptographic key</h3>
@@ -161,8 +158,7 @@ private data, as described above. </p>
<p>Before you sign your application, you need to make sure that you have a
suitable private key. For complete information about how to obtain (or generate)
-a private key, see <a href="{@docRoot}guide/publishing/app-signing.html#cert">
-Obtaining a Suitable Private Key</a>.</p>
+a private key, see <a href="#cert">Obtaining a Private Key</a>.</p>
<p>Once you have obtained (or generated) a suitable private key, you will use it
to:</p>
@@ -170,18 +166,20 @@ to:</p>
<ul>
<li>Register for a Maps API Key (see below), if your application uses MapView
elements.</li>
-<li>Sign your application for release, later in the preparation process</li>
+<li>Sign your application for release</li>
</ul>
+
<h3 id="mapsApiKey">7. Register for a Maps API Key, if your application is using
MapView elements</h3>
-<div class="sidebox" style="margin-bottom:.5em;padding:1em;"><p>
-For complete information about getting a Maps API Key, see <a
+<div class="sidebox" style="margin-bottom:.5em;"><p>For complete information
+about getting a Maps API Key, see <a
href="{@docRoot}guide/topics/location/geo/mapkey.html">Obtaining a Maps API
Key</a>.<br></p></div>
-<p>If your application uses one or more Mapview elements, you will need to
+<p>If your application uses one or more
+{@link-fixme com.google.android.maps.MapView Mapview} elements, you will need to
register your application with the Google
Maps service and obtain a Maps API Key, before your MapView(s) will be able to
retrieve data from Google Maps. To do so, you supply an MD5 fingerprint of your
@@ -224,20 +222,20 @@ to download Maps data. </li>
href="#signing">Signing Your Applications</a>.</p>
-<h2 id="compile">Compile your application</h2>
+<h2 id="compile">Compile Your Application</h2>
<p>When you've prepared your application as described in the previous sections,
you can compile your application for release. </p>
-<h2 id="post-compile">After compiling your application</h2>
+<h2 id="post-compile">After Compiling Your Application</h2>
-<h3 id="signapp">8. Sign your application</h3>
+<h3 id="signapp">8. Sign Your Application</h3>
<p>Sign your application using your private key. Signing your application
correctly is critically important. Please see <a href="#signing">Signing Your
Applications</a> for complete information. </p>
-<h3 id="testapp">9. Test your compiled and signed application</h3>
+<h3 id="testapp">9. Test Your Compiled and Signed Application</h3>
<p>Before you release your compiled application, you should thoroughly test it
on the target mobile device (and target network, if possible). In particular,
diff --git a/docs/html/guide/publishing/publishing.jd b/docs/html/guide/publishing/publishing.jd
index 3aea3cf..aed244e 100644
--- a/docs/html/guide/publishing/publishing.jd
+++ b/docs/html/guide/publishing/publishing.jd
@@ -84,7 +84,7 @@ that it meets the requirements listed below, which are enforced by the Market
server when you upload the application.</p>
<div class="special">
-<p>Requirements enforced by the Android Market server:</p>
+<p>Requirements enforced by the Android Market server</p>
<ol>
<li>Your application must be signed with a cryptographic private key whose
validity period ends after <span style="color:red">22 October 2033</span>. </li>
diff --git a/docs/html/guide/topics/manifest/manifest-intro.jd b/docs/html/guide/topics/manifest/manifest-intro.jd
index aa14308..3c8a34a 100644
--- a/docs/html/guide/topics/manifest/manifest-intro.jd
+++ b/docs/html/guide/topics/manifest/manifest-intro.jd
@@ -51,7 +51,7 @@ profiling and other information as the application is running. These declaratio
are present in the manifest only while the application is being developed and
tested; they're removed before the application is published.</li>
-<li>It declares the minimum level of the Android API that the application
+<li>It declares the minimum version of the Android API that the application
requires.</li>
<li>It lists the libraries that the application must be linked against.</li>
diff --git a/docs/html/guide/topics/ui/themes.jd b/docs/html/guide/topics/ui/themes.jd
index 41e8563..956ffe1 100644
--- a/docs/html/guide/topics/ui/themes.jd
+++ b/docs/html/guide/topics/ui/themes.jd
@@ -36,8 +36,8 @@ parent.link=index.html
<li>Create a file named <code>styles.xml</code> in the your application's <code>res/values</code> directory. Add a root <code>&lt;resources></code> node.</li>
<li>For each style or theme, add a <code>&lt;style&gt;</code> element with a unique <code>name</code> and, optionally, a <code>parent</code> attribute.
The name is used for referencing these styles later, and the parent indicates what style resource to inherit from.</li>
- <li>Inside the <code>&lt;style></code> element, declare format values in one or more <code>&lt;item&gt;</code> element(s).
- Each <code>&lt;item&gt;</code> identifies its style property with a <code>name</code> attribute and defines its style value inside the element.</li>
+ <li>Inside the <code>style</code> element, declare format values in one or more <code>&lt;item&gt;</code> element.
+ Each <code>item</code> identifies its style property with a <code>name</code> attribute and defines its style value inside the element.</li>
<li>You can then reference the custom resources from other XML resources, your manifest or application code.</li>
</ol>
@@ -60,7 +60,7 @@ parent.link=index.html
The <code>name</code> attribute in the <code>item</code> can refer to a standard string, a hex color value,
or a reference to any other resource type.</p>
-<p>Notice the <code>parent</code> attribute in the <code>&lt;style></code> element. This attribute lets you specify a resource from which the current style will inherit values. The style can inherit from any type of resource that contains the style(s) you want. In general, your styles should always inherit (directly or indirectly) from a standard Android style resource. This way, you only have to define the values that you want to change.</p>
+<p>Note the <code>parent</code> attribute in the <code>style</code> element. This attribute lets you specify a resource from which the current style will inherit values. The style can inherit from any type of resource that contains the style(s) you want. In general, your styles should always inherit (directly or indirectly) from a standard Android style resource. This way, you only have to define the values that you want to change.</p>
<p>Here's how you would reference the custom style from an XML layout, in this case, for an EditText element:</p>
@@ -72,15 +72,14 @@ or a reference to any other resource type.</p>
android:text="Hello, World!" /&gt;
</pre>
-<p>Now this EditText widget will be styled as defined by the XML example above.</p>
+<p>Now this EditText widget will be styled as defined by the <code>style</code> example above.</p>
<h2 id="themes">Themes</h2>
<p>Just like styles, themes are also declared in XML <code>&lt;style&gt;</code> elements, and are referenced in the same manner.
-The difference is that you add a theme to an entire application or activity, via the <code>&lt;application&gt;</code>
-and <code>&lt;activity&gt;</code> elements in the Android Manifest &mdash;
-themes cannot be applied to individual Views.</p>
+The difference is that you can add a theme style only to <code>&lt;application&gt;</code> and <code>&lt;activity&gt;</code> elements &mdash;
+they cannot be applied to individual views in the layout.</p>
<p>Here's an example declaration of a theme:</p>
@@ -131,26 +130,32 @@ appear like a dialog box. In the manifest, reference an Android theme like so:</
</pre>
<p>If you like a theme, but want to slightly tweak it, just add the theme as the <code>parent</code> of your custom theme.
-For example, we'll modify the <code>Theme.Dialog</code> theme. To do so, create a style
-with <code>Theme.Dialog</code> as the parent:</p>
+For example, we'll modify the <code>Theme.Dialog</code> theme. First, we need to import the parent of the
+<code>Dialog</code> theme: <code>Theme</code>. At the top of the <code>resources</code>, add:</p>
+<pre>
+&lt;style name="Theme" parent="@android:Theme">
+ &lt;!-- no modification -->
+&lt;/style>
+</pre>
+<p>Now create a a new theme with <code>Theme.Dialog</code> as the parent:</p>
<pre>
&lt;style name="CustomDialogTheme" parent="@android:style/Theme.Dialog">
</pre>
-<p>There it is. We've inherited the Android Dialog theme so we can adjust its styles as we like.
-So, for each item in the Dialog theme that we want to change, we re-define the value here and
-use <var>CustomDialogTheme</var> instead of <var>Theme.Dialog</var> inside the Android Manifest.</p>
+<p>There it is. We've inherited the Dialog theme, so we can adjust its styles as we like.
+So, for each item in the Dialog theme that we want to override, we re-define the value under this style and
+then use <var>CustomDialogTheme</var> instead of the <var>Theme.Dialog</var>.</p>
<h3 id="fromTheApp">Set the theme from the application</h3>
<p>You can also load a theme for an Activity programmatically, if needed.
To do so, use the {@link android.app.Activity#setTheme(int) setTheme()}
method. Note that, when doing so, you must be sure to set the theme <em>before</em>
instantiating any Views in the context, for example, before calling
-<code>setContentView(View)</code> or <code>inflate(int, ViewGroup)</code>. This ensures that
+setContentView(View) or inflate(int, ViewGroup). This ensures that
the system applies the same theme for all of your UI screens. Here's an example:</p>
<pre>
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
+ protected void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
...
setTheme(android.R.style.Theme_Light);
setContentView(R.layout.linear_layout_3);
@@ -159,14 +164,14 @@ the system applies the same theme for all of your UI screens. Here's an example:
<p>If you are considering loading a theme programmatically for the main
screen of your application, note that the theme would not be applied
-in any animations the system would use to start the activity, which
-would take place before your application opens. In most cases, if
+in any animations the system would use to show the activity, which
+would take place before your application starts. In most cases, if
you want to apply a theme to your main screen, doing so in XML
is a better approach. </p>
<p>For detailed information about custom styles and themes and referencing them from your application, see
-<a href="{@docRoot}guide/topics/resources/available-resources.html#stylesandthemes">Available Resource Types:
-Style and Themes</a>.</p>
+<a href="{@docRoot}guide/topics/resources/available-resources.html#stylesandthemes">Style
+and Theme Resources</a>.</p>
<p>For information about default themes and styles available, see {@link android.R.style}.</p>
diff --git a/docs/html/guide/tutorials/views/hello-autocomplete.jd b/docs/html/guide/tutorials/views/hello-autocomplete.jd
index fba1ad8..de3ba29 100644
--- a/docs/html/guide/tutorials/views/hello-autocomplete.jd
+++ b/docs/html/guide/tutorials/views/hello-autocomplete.jd
@@ -40,7 +40,7 @@ protected void onCreate(Bundle savedInstanceState) {
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.edit);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
- android.R.layout.simple_dropdown_item_1line, COUNTRIES);
+ android.R.layout.simple_dropdown_item_1line, R.array.planets);
textView.setAdapter(adapter);
}
</pre>
diff --git a/docs/html/guide/tutorials/views/hello-formstuff.jd b/docs/html/guide/tutorials/views/hello-formstuff.jd
index da4289c..f858ce3 100644
--- a/docs/html/guide/tutorials/views/hello-formstuff.jd
+++ b/docs/html/guide/tutorials/views/hello-formstuff.jd
@@ -32,7 +32,7 @@ We'll make it display a message when pressed.</p>
<ol>
<li><img src="images/android.png" align="right"/>
Drag the Android image on the right (or your own image) into the
- res/drawable/ directory of your project.
+ res/drawables/ directory of your project.
We'll use this for the button.</li>
<li>Open the layout file and, inside the LinearLayout, add the {@link android.widget.ImageButton} element:
<pre>
@@ -43,7 +43,7 @@ We'll make it display a message when pressed.</p>
android:src="@drawable/android" />
</pre>
<p>The source of the button
- is from the res/drawable/ directory, where we've placed the android.png.</p>
+ is from the res/drawables/ directory, where we've placed the android.png.</p>
<p class="note"><strong>Tip:</strong> You can also reference some of the many built-in
images from the Android {@link android.R.drawable} resources,
like <code>ic_media_play</code>, for a "play" button image. To do so, change the source
@@ -52,7 +52,7 @@ We'll make it display a message when pressed.</p>
<li>To make the button to actually do something, add the following
code at the end of the <code>onCreate()</code> method:
<pre>
-final ImageButton button = (ImageButton) findViewById(R.id.android_button);
+ImageButton button = (ImageButton) findViewById(R.id.android_button);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Perform action on clicks
@@ -84,12 +84,12 @@ defines the action to be made when the button is clicked. Here, we show a
<li>To do something with the text that the user enters, add the following code
to the end of the <code>onCreate()</code> method:
<pre>
-final EditText edittext = (EditText) findViewById(R.id.edittext);
+EditText edittext = (EditText) findViewById(R.id.edittext);
edittext.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
// Perform action on key press
- Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
+ Toast.makeText(HelloImageButton.this, edittext.getText(), Toast.LENGTH_SHORT).show();
return true;
}
return false;
@@ -127,9 +127,9 @@ checkbox.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Perform action on clicks
if (checkbox.isChecked()) {
- Toast.makeText(HelloFormStuff.this, "Selected", Toast.LENGTH_SHORT).show();
+ Toast.makeText(HelloImageButton.this, "Selected", Toast.LENGTH_SHORT).show();
} else {
- Toast.makeText(HelloFormStuff.this, "Not selected", Toast.LENGTH_SHORT).show();
+ Toast.makeText(HelloImageButton.this, "Not selected", Toast.LENGTH_SHORT).show();
}
}
});
@@ -183,7 +183,7 @@ OnClickListener radio_listener = new OnClickListener() {
public void onClick(View v) {
// Perform action on clicks
RadioButton rb = (RadioButton) v;
- Toast.makeText(HelloFormStuff.this, rb.getText(), Toast.LENGTH_SHORT).show();
+ Toast.makeText(HelloImageButton.this, rb.getText(), Toast.LENGTH_SHORT).show();
}
};
</pre>
@@ -225,9 +225,9 @@ togglebutton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Perform action on clicks
if (togglebutton.isChecked()) {
- Toast.makeText(HelloFormStuff.this, "ON", Toast.LENGTH_SHORT).show();
+ Toast.makeText(HelloImageButton.this, "ON", Toast.LENGTH_SHORT).show();
} else {
- Toast.makeText(HelloFormStuff.this, "OFF", Toast.LENGTH_SHORT).show();
+ Toast.makeText(HelloImageButton.this, "OFF", Toast.LENGTH_SHORT).show();
}
}
});
diff --git a/docs/html/guide/tutorials/views/hello-gridview.jd b/docs/html/guide/tutorials/views/hello-gridview.jd
index ffb6c93..623a03d 100644
--- a/docs/html/guide/tutorials/views/hello-gridview.jd
+++ b/docs/html/guide/tutorials/views/hello-gridview.jd
@@ -25,7 +25,6 @@ are acquired from a {@link android.widget.ListAdapter}.</p>
android:stretchMode="columnWidth"
android:gravity="center"
/>
-</pre>
</li>
<li>Open the HelloGridView Java file. Insert the following for the <code>onCreate()</code> method:
<pre>
diff --git a/docs/html/guide/tutorials/views/hello-mapview.jd b/docs/html/guide/tutorials/views/hello-mapview.jd
index 976b8ab..b0f59de 100644
--- a/docs/html/guide/tutorials/views/hello-mapview.jd
+++ b/docs/html/guide/tutorials/views/hello-mapview.jd
@@ -16,13 +16,8 @@ First, we'll create a simple Activity that can view and navigate a map. Then we
<pre>&lt;uses-library android:name="com.google.android.maps" /></pre>
</li>
- <li>We also need access to the internet in order to retrieve the Google Maps tiles,
- so the application must request the {@link android.Manifest.permission#INTERNET INTERNET} permissions.
- In the manifest file, add the following as a child of the <code>&lt;manifest></code> element:
- <pre>&lt;uses-permission android:name="android.permission.INTERNET" /></pre>
- </li>
- <li>Now open the main layout file for your project. Define a layout with a com.google.android.maps.MapView
- inside a android.widget.RelativeLayout:
+
+ <li>Open the layout file. Define the layout with a MapView inside a RelativeLayout:
<pre>
&lt;?xml version="1.0" encoding="utf-8"?>
@@ -37,21 +32,22 @@ First, we'll create a simple Activity that can view and navigate a map. Then we
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
- android:apiKey="<em>Your Maps API Key</em>"
+ android:apiKey="INSERT YOUR KEY HERE"
/>
-&lt;/RelativeLayout>
+&lt;RelativeLayout>
</pre>
- <p>The <code>clickable</code> attribute defines whether you want to allow user-interaction with the map.
- In this case, we set it "true" so that the user can navigate.</p>
-
- <p>The <code>apiKey</code> attribute holds the Google Maps API Key that proves your application and signer
- certificate has been registered with the Google Maps service. Because MapView uses Google Maps data, this key is required
- in order to receive the map data, even while you are developing. Registration is free and it only takes a couple
- minutes to register your certificate and receive a Maps API Key. For instructions on getting a key, read
- <a href="{@docRoot}guide/topics/location/geo/mapkey.html">Obtaining a Maps API Key</a>.
- (For the purpose of this tutorial, you should register with the fingerprint of the SDK debug certificate.)
- Once you've acquired the Maps API Key, insert it for the <code>apiKey</code> value.</p></li>
+ <p>Setting <code>clickable</code> is important. Otherwise, the map does not allow any user interaction.</p>
+
+ <p>The <code>android:apiKey</code> must contain an authentic Android Maps API key.
+ The API key is generated using the MD5 fingerprint of your application certificate. For the purposes of
+ this exercise, you should use the fingerprint of your debug certificate (which cannot be used to release
+ your application for Android devices, but will work while developing). See how to
+ <a href="{@docRoot}guide/topics/location/geo/mapkey.html#getdebugfingerprint">generate a fingerprint from your
+ debug certificate</a>, then <a href="http://code.google.com/android/maps-api-signup.html">register the
+ certificate</a> to retieve an API key.
+ Insert the API key as the value of the <code>apiKey</code> attribute. If you do not insert a valid
+ Maps API key, the application will still run, but no map tiles will load.</p></li>
<li>Now open the HelloMapView.java file. For this Activity, we're going to extend the special sub-class of
Activity called MapActivity, so change the class declaration to extend
diff --git a/docs/html/sdk/1.0_r1/index.jd b/docs/html/sdk/1.0_r1/index.jd
index b6e0e9f..d236844 100644
--- a/docs/html/sdk/1.0_r1/index.jd
+++ b/docs/html/sdk/1.0_r1/index.jd
@@ -22,44 +22,43 @@ sdk.linux_checksum=2660b4029039b7d714e59827e9a9a11d
<h2>Included in this SDK</h2>
-<h4>Development tools</h4>
-
-<p>The SDK includes a variety of tools for developing and debugging application code and designing
-an application UI. You can read about the tools in the documentation included with the SDK.
-You can access the tools in the <code>&lt;sdk&gt;/tools/</code> directory.</p>
-
-<h4 id="system_images">System Images</h4>
-
-<p>The Android system images listed below are included in this SDK.</p>
-
-<table style="margin-right:1em;" width="80%">
-<tr>
-<th><nobr>System Image</nobr></th><th><nobr>API Level</nobr></th><th>Notes</th><th>Description</th>
-</tr>
-
-<tr>
-<td width="5%"><nobr>Android 1.0</nobr></td>
-<td width="5%">1</td>
-<td width="5%"><nobr>N/A</nobr></td>
-<td>Includes the {@code com.google.android.maps} external library and a set of standard development
-applications. </td>
-
-</tr>
-
-</table>
-
-<h4>Sample Code and Applications</h4>
-
-<p>You can look at a variety of tutorials and samples in the
-documentation included with the SDK and access the sample code itself
-in the <code>&lt;sdk&gt;/samples/</code> directory of the SDK package.</p>
-
-<h4>Documentation</h4>
-
-<p>The SDK package provides a full set of local documentation, including installation and upgrade
-instructions. To view it, open the <code>&lt;sdk&gt;/documentation.html</code> file in a web browser.
-If you are developing in an IDE such as Eclipse, you can also view the reference documentation
-directly in the IDE. </p>
-
-
-
+<p>This SDK includes some awesome stuff.</p>
+
+
+<h2>System and Software Requirements</h2>
+
+<p>The following systems and development environments are supported by this SDK.</p>
+
+<h4>Supported Operating Systems:</h4>
+<ul>
+ <li>Windows XP or Vista</li>
+ <li>Mac OS X 10.4.8 or later (x86 only)</li>
+ <li>Linux (tested on Linux Ubuntu Dapper Drake)</li>
+</ul>
+
+<h4>Supported Development Environments:</h4>
+<ul>
+ <li>Eclipse IDE
+ <ul>
+ <li><a href="http://www.eclipse.org/downloads/">Eclipse</a> 3.3 (Europa), 3.4 (Ganymede)
+ <ul>
+ <li>Eclipse <a href="http://www.eclipse.org/jdt">JDT</a> plugin (included in most Eclipse IDE packages) </li>
+ <li><a href="http://www.eclipse.org/webtools">WST</a> (optional, but needed for the Android Editors feature; included in <a href="http://www.eclipse.org/downloads/moreinfo/compare.php">most Eclipse IDE packages</a>)</li>
+ </ul>
+ </li>
+ <li><a href="http://java.sun.com/javase/downloads/index.jsp">JDK 5 or JDK 6</a> (JRE alone is not sufficient)</li>
+ <li><a href="installing.html#installingplugin">Android Development Tools plugin</a> (optional)</li>
+ <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li>
+ </ul>
+ </li>
+ <li>Other development environments or IDEs
+ <ul>
+ <li><a href="http://java.sun.com/javase/downloads/index.jsp">JDK 5 or JDK 6</a> (JRE alone is not sufficient)</li>
+ <li><a href="http://ant.apache.org/">Apache Ant</a> 1.6.5 or later for Linux and Mac, 1.7 or later for Windows</li>
+ <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li>
+ </ul>
+ </li>
+</ul>
+
+<p class="note"><strong>Note:</strong> If JDK is already installed on your development computer, please take a moment to make sure that it meets the version requirements listed above. In
+particular, note that some Linux distributions may include JDK 1.4 or Gnu Compiler for Java, both of which are not supported for Android development. </p> \ No newline at end of file
diff --git a/docs/html/sdk/1.0_r1/installing.jd b/docs/html/sdk/1.0_r1/installing.jd
index 8ac524c..0f15396 100644
--- a/docs/html/sdk/1.0_r1/installing.jd
+++ b/docs/html/sdk/1.0_r1/installing.jd
@@ -1,27 +1,29 @@
page.title=Installing the SDK
-sdk.version=1.0_r1
@jd:body
-<p>For the current SDK release, see the links under <strong>Current SDK Release</strong> in the side navigation.</p>
-<p>This page describes how to install the Android 1.0 SDK, Release 1, and set up your development environment.
-If you haven't downloaded the SDK yet, you can so from the <a href="{@docRoot}sdk/1.0_r1/index.html">Download</a> page.</p>
+<p>This page describes how to install the Android SDK and set up your development environment. If you haven't
+downloaded the SDK yet, follow the link below.</p>
-<p>Before you begin, be sure that your development environment meets the SDK
-<a href="{@docRoot}sdk/1.0_r1/requirements.html">System Requirements</a>. If you encounter any problems during installation,
-see the <a href="#installnotes">Installation Notes</a> at the bottom of this page.</p>
+<div class="linkbox"><a href="http://developer.android.com/sdk/">Download the SDK</a></div>
+<p>Before you begin, be sure that you're development environment meets the SDK
+<a href="requirements.html">System and Software Requirements</a>.</p>
+
+<div class="special">
<h4 style="margin-top">Upgrading?</h4>
<p>If you have already developed applications using an earlier version of the
SDK, please skip this page and read the
-<a href="{@docRoot}sdk/1.0_r1/upgrading.html"><strong>Upgrading the SDK</strong></a></b> document instead.
+<b><a href="upgrading.html">Upgrading the SDK</a></b> document.
</p>
+</div>
+
<a name="installingsdk"></a>
<a name="setup"></a>
<h2>Installing the SDK</h2>
- <p>After downloading the SDK, unpack the .zip archive to a suitable location on your machine. By default, the SDK files are unpacked into a directory named <code>android_sdk_<em>&lt;platform</em>&gt;_<em>&lt;release&gt;</em>_<em>&lt;build&gt;</em></code>. The directory contains a link to a local copy of the documentation and the subdirectories <code>tools/</code>, <code>samples/</code>, and others. </p>
+ <p>After downloading the SDK, unpack the .zip archive to a suitable location on your machine. By default, the SDK files are unpacked into a directory named <code>android_sdk_<em>&lt;platform</em>&gt;_<em>&lt;release&gt;</em>_<em>&lt;build&gt;</em></code>. The directory contains the subdirectories <code>tools/</code>, <code>samples/</code>, and others. </p>
<p>Make a note of the name and location of the unpacked SDK directory on your system &mdash; you will need to refer to the SDK directory later, when setting up the Android plugin or using SDK tools. </p>
@@ -45,86 +47,10 @@ SDK, please skip this page and read the
<p>Adding <code>tools</code> to your path lets you run Android Debug Bridge (adb) and the other command line <a href="{@docRoot}guide/developing/tools/index.html">tools</a> without needing to supply the full path to the tools directory. Note that, if you update your SDK, you should remember to update your PATH settings to point to the new location, if different.</p>
-
-<p>If you will be using the Eclipse IDE as your environment for developing Android applications, continue reading the next
-section in order to install the Android Development Tools plugin and setup Eclipse. If you choose not to use Eclipse, you can
-develop Android applications using other tools &mdash; read the guide to developing
-<a href="{@docRoot}guide/developing/other-ide.html">In other IDEs</a>.</p>
-
-
-<h2>Setting up Eclipse</h2>
-
-<p>First, you should install a custom plugin called Android Development Tools (ADT), which adds integrated support for Android projects and tools. The ADT plugin includes a variety of powerful extensions that make creating, running, and debugging Android applications faster and easier. Developing in ADT/Eclipse is highly recommended for Eclipse users and those new to Android.</p>
-
-<p>To download and install the ADT plugin, follow the steps below for your respective Eclipse version. </p>
-
-<table style="font-size:100%">
-<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
-<tr>
-<td width="45%">
-<ol>
- <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find
- and Install...</strong>. </li>
-
- <li>In the dialog that appears, select <strong>Search for new features to install</strong> and click <strong>Next</strong>. </li>
- <li>Click <strong>New Remote Site</strong>. </li>
- <li>In the resulting dialog box, enter a name for the remote site (e.g. Android Plugin) and enter this as its URL:
- <pre>https://dl-ssl.google.com/android/eclipse/</pre>
- <p>Alternatively, you can use http in the Location URL, if you are having
- trouble with https (https is preferred for security reasons).</p>
- <pre>http://dl-ssl.google.com/android/eclipse/</pre>
- <p>Click <strong>OK</strong>.</p> </li>
- <li>You should now see the new site added to the search list (and checked).
- Click <strong>Finish</strong>. </li>
- <li>In the subsequent Search Results dialog box, select the checkbox for
- <strong>Android Plugin</strong> &gt; <strong>Developer Tools</strong>.
- This will check both features: "Android Developer Tools", and "Android
- Editors". The Android Editors feature is optional, but recommended. If
- you choose to install it, you need the WST plugin mentioned earlier in this
- page. Click <strong>Next</strong>. </li>
- <li>Read the license agreement and then select <strong>Accept terms of the license agreement</strong>.
- Click <strong>Next</strong>. </li>
- <li>Click <strong>Finish</strong>. </li>
-
- <li>The ADT plugin is not signed; you can accept the installation anyway
- by clicking <strong>Install All</strong>. </li>
- <li>Restart Eclipse. </li>
-</ol>
-
-</td>
-<td>
-
-<ol>
- <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates...</strong>.
- </li>
- <li>In the dialog that appears, click the <strong>Available Software</strong> tab.
- </li>
- <li>Click <strong>Add Site...</strong>
- </li>
- <li>Enter this as the Location:
- <pre>https://dl-ssl.google.com/android/eclipse/</pre>
- <p>Alternatively, you can use http in the Location URL, if you are having
- trouble with https (https is preferred for security reasons).</p>
- <pre>http://dl-ssl.google.com/android/eclipse/</pre>
- <p>Click <strong>OK</strong>.</p></li>
- <li>Back in the Available Software view, you should see the plugin. Select the checkbox next to
- <em>Developer Tools</em> and click <strong>Install...</strong>
- </li>
- <li>On the subsequent Install window, "Android Developer Tools", and "Android Editors" should both be checked.
- The Android Editors feature is optional, but recommended. If
- you choose to install it, you need the WST plugin mentioned earlier in this
- page. Click <strong>Next</strong>.
- </li>
- <li>Accept the license agreement and click <strong>Finish</strong>.</li>
- <li>Restart Eclipse. </li>
-</ol>
-
-</td>
-</tr>
-</table>
-
-
-<p>Now, you just need to modify your Eclipse preferences to point to the Android SDK directory:</p>
+<h3>Setting up Eclipse</h3>
+<p>If you'll be developing with the Eclipse IDE, follow the following procedure to setup the IDE
+to use the Android SDK.</p>
+<p>Basically, you just need to update your Eclipse preferences to point to the Android SDK directory:</p>
<ol>
<li>Select <strong>Window</strong> &gt; <strong>Preferences...</strong> to open the Preferences
panel. (Mac OS X: <strong>Eclipse</strong> &gt; <strong>Preferences</strong>) </li>
@@ -132,55 +58,16 @@ develop Android applications using other tools &mdash; read the guide to develop
<li>For the SDK Location in the main panel, click <strong>Browse...</strong> and locate the SDK directory. </li>
<li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
</ol>
+<p>Done! We now recommend that you install the ADT Eclipse plugin, which will provide some much-appreciated assistance in developing Android apps with Eclipse...</p>
-<p>Done! If you haven't encountered any problems, then you're ready to begin developing Android applications.
-We recommend you begin with the <a href="{@docRoot}guide/tutorials/hello-world.html">Hello World</a> tutorial,
-which will teach you some basics about Android applications and how to create projects using Eclipse.</p>
+<a name="installingplugin"></a>
+<h2>Installing the Eclipse Plugin (ADT)</h2>
+<p>If you will be using the Eclipse IDE as your environment for developing Android applications, you can install a custom plugin called Android Development Tools (ADT), which adds integrated support for Android projects and tools. The ADT plugin includes a variety of powerful extensions that make creating, running, and debugging Android applications faster and easier. This plugin is highly recommended for Eclipse users.</p>
-<h3 id="troubleshooting">Troubleshooting ADT Installation</h3>
-<p>
-If you are having trouble downloading the ADT plugin after following the steps above, here are some suggestions: </p>
+<p>If you <em>will not</em> be using the Eclipse IDE, you do not need to download or install the ADT plugin.</p>
-<ul>
- <li>If Eclipse can not find the remote update site containing the ADT plugin, try changing the remote site URL to use http, rather than https. That is, set the Location for the remote site to:
- <pre>http://dl-ssl.google.com/android/eclipse/</pre></li>
- <li>If you are behind a firewall (such as a corporate firewall), make
- sure that you have properly configured your proxy settings in Eclipse.
- In Eclipse 3.3/3.4, you can configure proxy information from the main
- Eclipse menu in <strong>Window</strong> (on Mac, <strong>Eclipse</strong>) &gt; <strong>Preferences</strong> &gt; <strong>General</strong> &gt; <strong>Network Connections</strong>.</li>
-</ul>
-<p>
-If you are still unable to use Eclipse to download the ADT plugin as a remote update site, you can download the ADT files to your local machine using a browser and the install the files in Eclipse from there:
-</p>
-<ol>
-<li><a href="{@docRoot}sdk/adt_download.html">Download the ADT zip file</a> (do not unpack it).
-<li>Follow steps 1 and 2 in the default install instructions (above).
-<li>In Eclipse 3.3, click <strong>New Archive Site...</strong>. <br/>
- In Eclipse 3.4, click <strong>Add Site...</strong>, then <strong>Archive...</strong>
-<li>Browse and select the downloaded the zip file.
-<li>Follow the remaining procedures, above, starting from steps 5.
-</ol>
-<p>
-Note that to update your plugin, you will have to follow these steps again instead of the default update instructions.</p>
-
-<p>Note that the "Android Editors" feature of ADT requires several optional
-Eclipse components (for example, WST). If you encounter an error when
-installing ADT, your Eclipse installion might not include those components.
-For information about how to quickly add the necessary components to your
-Eclipse installation, see the troubleshooting topic
-<a href="{@docRoot}guide/appendix/faq/troubleshooting.html#installeclipsecomponents">ADT Installation Error: "requires plug-in org.eclipse.wst.sse.ui"</a>.</p>
-
-<h4>For Linux users</h4>
-<p>If you encounter this error when installing the ADT Plugin for Eclipse:
-<pre>
-An error occurred during provisioning.
-Cannot connect to keystore.
-JKS</pre>
-<p>
-...then your development machine lacks a suitable Java VM. Installing Sun
-Java 6 will resolve this issue and you can then reinstall the ADT
-Plugin.</p>
+<p><strong>Follow this guide to install the ADT Plugin</strong></p>
<a name="installnotes"></a>
<h2>Installation Notes</h2>
@@ -219,3 +106,19 @@ at the top of this page. In particular, note that some Linux
distributions may include JDK 1.4 or Gnu Compiler for Java, both of
which are not supported for Android development.</li>
</ul>
+
+<a name="developingwitheclipse"></a>
+<a name="existingcode"></a>
+<a name="creatingaproject" id="creatingaproject"></a>
+<a name="launchconfig" id="launchconfig"></a>
+<a name="installingrunningdebugging" id="installingrunningdebugging"></a>
+<a name="otherides" id="otherides"></a>
+<a name="buildingwithant"></a>
+<a name="debugging" id="debugging"></a>
+<a name="additionaldebugging" id="additionaldebugging"></a>
+<a name="toptips" id="toptips"></a>
+<a name="debughelpers"></a>
+<a name="uninstalling" id="uninstalling"></a>
+<a name="tips" id="tips"></a>
+<a name="eclipse" id="eclipse"></a>
+<a name="building"></a>
diff --git a/docs/html/sdk/1.0_r1/upgrading.jd b/docs/html/sdk/1.0_r1/upgrading.jd
index 480bff3..168f1be 100644
--- a/docs/html/sdk/1.0_r1/upgrading.jd
+++ b/docs/html/sdk/1.0_r1/upgrading.jd
@@ -1,12 +1,37 @@
page.title=Upgrading the SDK
-sdk.version=1.0_r1
@jd:body
-<p>For the current SDK release, see the links under <strong>Current SDK Release</strong> in the side navigation.</p>
+<div class="sidebox-wrapper">
+ <div class="sidebox-inner">
+
+ <h2>Useful Links</h2>
+
+ <ul class="noindent">
+ <li><a href="migrating/0.9-1.0/changes-overview.html">Overview of Changes</a>
+ <p>A high-level look at what's changed in Android, with
+ discussion of how the changes may affect your apps.</p></li>
+
+ <li><a href="migrating/0.9-1.0/changes.html">API Diff Report</a>
+ <p>A detailed report that lists all the specific changes in the latest SDK.</p></li>
+
+ <li><a href="RELEASENOTES.html">Release Notes</a>
+ <p>Version details, known issues, and resolved issues. </p></li>
+
+ <li><a href="http://groups.google.com/group/android-developers">Android Developers Group</a>
+ <p>A forum where you can discuss migration issues and learn from other Android developers. </p></li>
+
+ <li><a href="http://code.google.com/p/android/issues/list">Android Issue Tracker</a>
+ <p>If you think you may have found a bug, use the issue tracker to report it.</p></li>
+ </ul>
+
+ </div>
+</div><!-- class-sidebox -->
+
<p>This guide will help you migrate your development environment and applications
-to <strong>version 1.0, release 1</strong>, of the Android SDK. Use this guide if you've been developing applications
-on a different version of the Android SDK.</p>
+to the latest version of the SDK. Use this guide if you've been developing applications
+on a previous version of the Android SDK.
+</p>
<p>To ensure that your applications are compliant with the Android 1.0 system available
on mobile devices, you need to install the new SDK and port your existing Android
@@ -14,7 +39,9 @@ applications to the updated API. The sections below guide you through the proces
<h2 id="install-new">Install the new SDK</h2>
-<p>After unpacking the SDK, you should:</p>
+<p><a href="{@docRoot}download.html">Download the SDK</a> and unpack it into a safe location.</p>
+
+<p>After unpacking the new SDK, you should:</p>
<ul>
<li>Wipe your emulator data. <p>Some data formats have changed since the last
@@ -33,58 +60,27 @@ applications to the updated API. The sections below guide you through the proces
<h2 id="update-plugin">Update your ADT Eclipse Plugin</h2>
-<p>If you develop on Eclipse and are using the ADT plugin, follow these steps to install the
-plugin that's required for this version of the SDK.</p>
+<p>If you develop on Eclipse and are using the ADT plugin, follow these steps to install the new plugin that accompanies the latest SDK.</p>
<table style="font-size:100%">
<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
<tr>
-<td width="45%">
+<td width="50%">
<ol>
- <li><a href="http://dl-ssl.google.com/android/ADT-0.8.0.zip">Download the ADT v0.8.0 zip
- file</a> (do not unpack it).</li>
- <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find
- and Install...</strong>. </li>
- <li>In the dialog that appears, select <strong>Search for new features to install</strong> and click
- <strong>Next</strong>. </li>
- <li>Click <strong>New Archive Site...</strong></li>
- <li>Browse and select the downloaded the zip file.</li>
- <li>You should now see the new site added to the search list (and checked).
- Click <strong>Finish</strong>. </li>
- <li>In the subsequent Search Results dialog box, select the checkbox for
- <strong>Android Plugin</strong> &gt; <strong>Developer Tools</strong>.
- This will check both features: "Android Developer Tools", and "Android
- Editors". The Android Editors feature is optional, but recommended. If
- you choose to install it, you need the WST plugin mentioned earlier in this
- page. Click <strong>Next</strong>. </li>
- <li>Read the license agreement and then select <strong>Accept terms of the license agreement</strong>.
- Click <strong>Next</strong>. </li>
- <li>Click <strong>Finish</strong>. </li>
- <li>The ADT plugin is not signed; you can accept the installation anyway
- by clicking <strong>Install All</strong>. </li>
- <li>Restart Eclipse. </li>
+ <li> Select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find and Install...</strong>. </li>
+ <li> Select <strong>Search for updates of the currently installed features</strong> and click <strong>Finish</strong>. </li>
+ <li> If any update for ADT is available, select and install. </li>
+ <li> Restart Eclipse.</li>
</ol>
-
</td>
<td>
-
<ol>
- <li><a href="http://dl-ssl.google.com/android/ADT-0.8.0.zip">Download the ADT v0.8.0 zip
- file</a> (do not unpack it).</li>
- <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates...</strong>.</li>
- <li>In the dialog that appears, click the <strong>Available Software</strong> tab.</li>
- <li>Click <strong>Add Site...</strong>, then <strong>Archive...</strong>.</li>
- <li>Browse and select the downloaded the zip file.</li>
- <li>Back in the Available Software view, you should see the plugin. Select the checkbox next to
- <em>Developer Tools</em> and click <strong>Install...</strong></li>
- <li>On the subsequent Install window, "Android Developer Tools", and "Android Editors" should both be checked.
- The Android Editors feature is optional, but recommended. If
- you choose to install it, you need the WST plugin mentioned earlier in this
- page. Click <strong>Next</strong>.</li>
- <li>Accept the license agreement and click <strong>Finish</strong>.</li>
- <li>Restart Eclipse. </li>
+ <li>Select <strong>Help</strong> &gt; <strong>Software Updates...</strong></li>
+ <li>Select the <strong>Installed Software</strong> tab.</li>
+ <li>Click <strong>Update...</strong></li>
+ <li>If an update for ADT is available, select it and click <strong>Finish</strong>.</li>
+ <li>Restart Eclipse.</li>
</ol>
-
</td>
</tr>
</table>
@@ -103,7 +99,7 @@ plugin that's required for this version of the SDK.</p>
the ADT plugin and the Ant-based build tools support this requirement by signing compiled
.apk files with a debug key. To do so, the build tools use the Keytool utility included
in the JDK to to create a keystore and a key with a known alias and password. For more
-information, see "Signing and Publishing Your App" in the documentation included with the SDK.
+information, see <a href="{@docRoot}guide/publishing/app-signing.html">Signing Your Applications</a>.
<p>To support signing, you should first make sure that Keytool is available to the SDK build
tools. In most cases, you can tell the SDK build tools how to find Keytool by making sure that
@@ -137,7 +133,10 @@ to place 3rd jar files, which are now automatically handled by the Ant script.</
framework and API changes. You'll need to update your code to match changes in the Android APIs.</p>
<p>One way to start is to open your project in Eclipse and see where the ADT
-identifies errors in your application.</p>
+identifies errors in your application. From there, you can lookup
+respective changes in the
+<a href="migrating/changes-overview.html">Overview of Changes</a>
+and <a href="migrating/changes.html">API Diffs Report</a>.</p>
<p>If you have additional trouble updating your code, visit the
<a href="http://groups.google.com/group/android-developers">Android Developers Group</a>
@@ -145,4 +144,8 @@ to seek help from other Android developers.</p>
<p>If you have modified one of the ApiDemos applications and would like to migrate it
to the new SDK, note that you will need to uninstall the version of ApiDemos that comes
-preinstalled in the emulator.</p>
+preinstalled in the emulator. For more information, or if you encounter an "reinstallation"
+error when running or installing ApiDemos, see the troubleshooting topic
+<a href="{@docRoot}guide/appendix/faq/troubleshooting.html#apidemosreinstall">I can't install ApiDemos
+apps in my IDE because of a signing error</a> for information about how to solve the problem.</p>
+
diff --git a/docs/html/sdk/1.0_r2/index.jd b/docs/html/sdk/1.0_r2/index.jd
index 2446c09..6fbca6d 100644
--- a/docs/html/sdk/1.0_r2/index.jd
+++ b/docs/html/sdk/1.0_r2/index.jd
@@ -22,44 +22,43 @@ sdk.linux_checksum=a1f3b6d854596f850f5008856d0f380e
<h2>Included in this SDK</h2>
-<h4>Development tools</h4>
-
-<p>The SDK includes a variety of tools for developing and debugging application code and designing
-an application UI. You can read about the tools in the documentation included with the SDK.
-You can access the tools in the <code>&lt;sdk&gt;/tools/</code> directory.</p>
-
-<h4 id="system_images">System Images</h4>
-
-<p>The Android system images listed below are included in this SDK.</p>
-
-<table style="margin-right:1em;" width="80%">
-<tr>
-<th><nobr>System Image</nobr></th><th><nobr>API Level</nobr></th><th>Notes</th><th>Description</th>
-</tr>
-
-<tr>
-<td width="5%"><nobr>Android 1.0</nobr></td>
-<td width="5%">1</td>
-<td width="5%"><nobr>N/A</nobr></td>
-<td>Includes the {@code com.google.android.maps} external library and a set of standard development
-applications. </td>
-
-</tr>
-
-</table>
-
-<h4>Sample Code and Applications</h4>
-
-<p>You can look at a variety of tutorials and samples in the
-documentation included with the SDK and access the sample code itself
-in the <code>&lt;sdk&gt;/samples/</code> directory of the SDK package.</p>
-
-<h4>Documentation</h4>
-
-<p>The SDK package provides a full set of local documentation, including installation and upgrade
-instructions. To view it, open the <code>&lt;sdk&gt;/documentation.html</code> file in a web browser.
-If you are developing in an IDE such as Eclipse, you can also view the reference documentation
-directly in the IDE. </p>
-
-
-
+<p>This SDK includes some awesome stuff.</p>
+
+
+<h2>System and Software Requirements</h2>
+
+<p>The following systems and development environments are supported by this SDK.</p>
+
+<h4>Supported Operating Systems:</h4>
+<ul>
+ <li>Windows XP or Vista</li>
+ <li>Mac OS X 10.4.8 or later (x86 only)</li>
+ <li>Linux (tested on Linux Ubuntu Dapper Drake)</li>
+</ul>
+
+<h4>Supported Development Environments:</h4>
+<ul>
+ <li>Eclipse IDE
+ <ul>
+ <li><a href="http://www.eclipse.org/downloads/">Eclipse</a> 3.3 (Europa), 3.4 (Ganymede)
+ <ul>
+ <li>Eclipse <a href="http://www.eclipse.org/jdt">JDT</a> plugin (included in most Eclipse IDE packages) </li>
+ <li><a href="http://www.eclipse.org/webtools">WST</a> (optional, but needed for the Android Editors feature; included in <a href="http://www.eclipse.org/downloads/moreinfo/compare.php">most Eclipse IDE packages</a>)</li>
+ </ul>
+ </li>
+ <li><a href="http://java.sun.com/javase/downloads/index.jsp">JDK 5 or JDK 6</a> (JRE alone is not sufficient)</li>
+ <li><a href="installing.html#installingplugin">Android Development Tools plugin</a> (optional)</li>
+ <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li>
+ </ul>
+ </li>
+ <li>Other development environments or IDEs
+ <ul>
+ <li><a href="http://java.sun.com/javase/downloads/index.jsp">JDK 5 or JDK 6</a> (JRE alone is not sufficient)</li>
+ <li><a href="http://ant.apache.org/">Apache Ant</a> 1.6.5 or later for Linux and Mac, 1.7 or later for Windows</li>
+ <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li>
+ </ul>
+ </li>
+</ul>
+
+<p class="note"><strong>Note:</strong> If JDK is already installed on your development computer, please take a moment to make sure that it meets the version requirements listed above. In
+particular, note that some Linux distributions may include JDK 1.4 or Gnu Compiler for Java, both of which are not supported for Android development. </p> \ No newline at end of file
diff --git a/docs/html/sdk/1.0_r2/installing.jd b/docs/html/sdk/1.0_r2/installing.jd
index 2c58dfd..0f15396 100644
--- a/docs/html/sdk/1.0_r2/installing.jd
+++ b/docs/html/sdk/1.0_r2/installing.jd
@@ -1,27 +1,29 @@
page.title=Installing the SDK
-sdk.version=1.0_r2
@jd:body
-<p>For the current SDK release, see the links under <strong>Current SDK Release</strong> in the side navigation.</p>
-<p>This page describes how to install the Android 1.0 SDK, Release 2, and set up your development environment.
-If you haven't downloaded the SDK yet, you can so from the <a href="{@docRoot}sdk/1.0_r2/index.html">Download</a> page.</p>
+<p>This page describes how to install the Android SDK and set up your development environment. If you haven't
+downloaded the SDK yet, follow the link below.</p>
-<p>Before you begin, be sure that your development environment meets the SDK
-<a href="{@docRoot}sdk/1.0_r2/requirements.html">System Requirements</a>. If you encounter any problems during installation,
-see the <a href="#installnotes">Installation Notes</a> at the bottom of this page.</p>
+<div class="linkbox"><a href="http://developer.android.com/sdk/">Download the SDK</a></div>
+<p>Before you begin, be sure that you're development environment meets the SDK
+<a href="requirements.html">System and Software Requirements</a>.</p>
+
+<div class="special">
<h4 style="margin-top">Upgrading?</h4>
<p>If you have already developed applications using an earlier version of the
SDK, please skip this page and read the
-<a href="{@docRoot}sdk/1.0_r2/upgrading.html"><strong>Upgrading the SDK</strong></a></b> document instead.
+<b><a href="upgrading.html">Upgrading the SDK</a></b> document.
</p>
+</div>
+
<a name="installingsdk"></a>
<a name="setup"></a>
<h2>Installing the SDK</h2>
- <p>After downloading the SDK, unpack the .zip archive to a suitable location on your machine. By default, the SDK files are unpacked into a directory named <code>android_sdk_<em>&lt;platform</em>&gt;_<em>&lt;release&gt;</em>_<em>&lt;build&gt;</em></code>. The directory contains a link to a local copy of the documentation and the subdirectories <code>tools/</code>, <code>samples/</code>, and others. </p>
+ <p>After downloading the SDK, unpack the .zip archive to a suitable location on your machine. By default, the SDK files are unpacked into a directory named <code>android_sdk_<em>&lt;platform</em>&gt;_<em>&lt;release&gt;</em>_<em>&lt;build&gt;</em></code>. The directory contains the subdirectories <code>tools/</code>, <code>samples/</code>, and others. </p>
<p>Make a note of the name and location of the unpacked SDK directory on your system &mdash; you will need to refer to the SDK directory later, when setting up the Android plugin or using SDK tools. </p>
@@ -45,86 +47,10 @@ SDK, please skip this page and read the
<p>Adding <code>tools</code> to your path lets you run Android Debug Bridge (adb) and the other command line <a href="{@docRoot}guide/developing/tools/index.html">tools</a> without needing to supply the full path to the tools directory. Note that, if you update your SDK, you should remember to update your PATH settings to point to the new location, if different.</p>
-
-<p>If you will be using the Eclipse IDE as your environment for developing Android applications, continue reading the next
-section in order to install the Android Development Tools plugin and setup Eclipse. If you choose not to use Eclipse, you can
-develop Android applications using other tools &mdash; read the guide to developing
-<a href="{@docRoot}guide/developing/other-ide.html">In other IDEs</a>.</p>
-
-
-<h2>Setting up Eclipse</h2>
-
-<p>First, you should install a custom plugin called Android Development Tools (ADT), which adds integrated support for Android projects and tools. The ADT plugin includes a variety of powerful extensions that make creating, running, and debugging Android applications faster and easier. Developing in ADT/Eclipse is highly recommended for Eclipse users and those new to Android.</p>
-
-<p>To download and install the ADT plugin, follow the steps below for your respective Eclipse version. </p>
-
-<table style="font-size:100%">
-<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
-<tr>
-<td width="45%">
-<ol>
- <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find
- and Install...</strong>. </li>
-
- <li>In the dialog that appears, select <strong>Search for new features to install</strong> and click <strong>Next</strong>. </li>
- <li>Click <strong>New Remote Site</strong>. </li>
- <li>In the resulting dialog box, enter a name for the remote site (e.g. Android Plugin) and enter this as its URL:
- <pre>https://dl-ssl.google.com/android/eclipse/</pre>
- <p>Alternatively, you can use http in the Location URL, if you are having
- trouble with https (https is preferred for security reasons).</p>
- <pre>http://dl-ssl.google.com/android/eclipse/</pre>
- <p>Click <strong>OK</strong>.</p> </li>
- <li>You should now see the new site added to the search list (and checked).
- Click <strong>Finish</strong>. </li>
- <li>In the subsequent Search Results dialog box, select the checkbox for
- <strong>Android Plugin</strong> &gt; <strong>Developer Tools</strong>.
- This will check both features: "Android Developer Tools", and "Android
- Editors". The Android Editors feature is optional, but recommended. If
- you choose to install it, you need the WST plugin mentioned earlier in this
- page. Click <strong>Next</strong>. </li>
- <li>Read the license agreement and then select <strong>Accept terms of the license agreement</strong>.
- Click <strong>Next</strong>. </li>
- <li>Click <strong>Finish</strong>. </li>
-
- <li>The ADT plugin is not signed; you can accept the installation anyway
- by clicking <strong>Install All</strong>. </li>
- <li>Restart Eclipse. </li>
-</ol>
-
-</td>
-<td>
-
-<ol>
- <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates...</strong>.
- </li>
- <li>In the dialog that appears, click the <strong>Available Software</strong> tab.
- </li>
- <li>Click <strong>Add Site...</strong>
- </li>
- <li>Enter this as the Location:
- <pre>https://dl-ssl.google.com/android/eclipse/</pre>
- <p>Alternatively, you can use http in the Location URL, if you are having
- trouble with https (https is preferred for security reasons).</p>
- <pre>http://dl-ssl.google.com/android/eclipse/</pre>
- <p>Click <strong>OK</strong>.</p></li>
- <li>Back in the Available Software view, you should see the plugin. Select the checkbox next to
- <em>Developer Tools</em> and click <strong>Install...</strong>
- </li>
- <li>On the subsequent Install window, "Android Developer Tools", and "Android Editors" should both be checked.
- The Android Editors feature is optional, but recommended. If
- you choose to install it, you need the WST plugin mentioned earlier in this
- page. Click <strong>Next</strong>.
- </li>
- <li>Accept the license agreement and click <strong>Finish</strong>.</li>
- <li>Restart Eclipse. </li>
-</ol>
-
-</td>
-</tr>
-</table>
-
-
-<p>Now, you just need to modify your Eclipse preferences to point to the Android SDK directory:</p>
+<h3>Setting up Eclipse</h3>
+<p>If you'll be developing with the Eclipse IDE, follow the following procedure to setup the IDE
+to use the Android SDK.</p>
+<p>Basically, you just need to update your Eclipse preferences to point to the Android SDK directory:</p>
<ol>
<li>Select <strong>Window</strong> &gt; <strong>Preferences...</strong> to open the Preferences
panel. (Mac OS X: <strong>Eclipse</strong> &gt; <strong>Preferences</strong>) </li>
@@ -132,55 +58,16 @@ develop Android applications using other tools &mdash; read the guide to develop
<li>For the SDK Location in the main panel, click <strong>Browse...</strong> and locate the SDK directory. </li>
<li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
</ol>
+<p>Done! We now recommend that you install the ADT Eclipse plugin, which will provide some much-appreciated assistance in developing Android apps with Eclipse...</p>
-<p>Done! If you haven't encountered any problems, then you're ready to begin developing Android applications.
-We recommend you begin with the <a href="{@docRoot}guide/tutorials/hello-world.html">Hello World</a> tutorial,
-which will teach you some basics about Android applications and how to create projects using Eclipse.</p>
+<a name="installingplugin"></a>
+<h2>Installing the Eclipse Plugin (ADT)</h2>
+<p>If you will be using the Eclipse IDE as your environment for developing Android applications, you can install a custom plugin called Android Development Tools (ADT), which adds integrated support for Android projects and tools. The ADT plugin includes a variety of powerful extensions that make creating, running, and debugging Android applications faster and easier. This plugin is highly recommended for Eclipse users.</p>
-<h3 id="troubleshooting">Troubleshooting ADT Installation</h3>
-<p>
-If you are having trouble downloading the ADT plugin after following the steps above, here are some suggestions: </p>
+<p>If you <em>will not</em> be using the Eclipse IDE, you do not need to download or install the ADT plugin.</p>
-<ul>
- <li>If Eclipse can not find the remote update site containing the ADT plugin, try changing the remote site URL to use http, rather than https. That is, set the Location for the remote site to:
- <pre>http://dl-ssl.google.com/android/eclipse/</pre></li>
- <li>If you are behind a firewall (such as a corporate firewall), make
- sure that you have properly configured your proxy settings in Eclipse.
- In Eclipse 3.3/3.4, you can configure proxy information from the main
- Eclipse menu in <strong>Window</strong> (on Mac, <strong>Eclipse</strong>) &gt; <strong>Preferences</strong> &gt; <strong>General</strong> &gt; <strong>Network Connections</strong>.</li>
-</ul>
-<p>
-If you are still unable to use Eclipse to download the ADT plugin as a remote update site, you can download the ADT files to your local machine using a browser and the install the files in Eclipse from there:
-</p>
-<ol>
-<li><a href="{@docRoot}sdk/adt_download.html">Download the ADT zip file</a> (do not unpack it).
-<li>Follow steps 1 and 2 in the default install instructions (above).
-<li>In Eclipse 3.3, click <strong>New Archive Site...</strong>. <br/>
- In Eclipse 3.4, click <strong>Add Site...</strong>, then <strong>Archive...</strong>
-<li>Browse and select the downloaded the zip file.
-<li>Follow the remaining procedures, above, starting from steps 5.
-</ol>
-<p>
-Note that to update your plugin, you will have to follow these steps again instead of the default update instructions.</p>
-
-<p>Note that the "Android Editors" feature of ADT requires several optional
-Eclipse components (for example, WST). If you encounter an error when
-installing ADT, your Eclipse installion might not include those components.
-For information about how to quickly add the necessary components to your
-Eclipse installation, see the troubleshooting topic
-<a href="{@docRoot}guide/appendix/faq/troubleshooting.html#installeclipsecomponents">ADT Installation Error: "requires plug-in org.eclipse.wst.sse.ui"</a>.</p>
-
-<h4>For Linux users</h4>
-<p>If you encounter this error when installing the ADT Plugin for Eclipse:
-<pre>
-An error occurred during provisioning.
-Cannot connect to keystore.
-JKS</pre>
-<p>
-...then your development machine lacks a suitable Java VM. Installing Sun
-Java 6 will resolve this issue and you can then reinstall the ADT
-Plugin.</p>
+<p><strong>Follow this guide to install the ADT Plugin</strong></p>
<a name="installnotes"></a>
<h2>Installation Notes</h2>
@@ -219,3 +106,19 @@ at the top of this page. In particular, note that some Linux
distributions may include JDK 1.4 or Gnu Compiler for Java, both of
which are not supported for Android development.</li>
</ul>
+
+<a name="developingwitheclipse"></a>
+<a name="existingcode"></a>
+<a name="creatingaproject" id="creatingaproject"></a>
+<a name="launchconfig" id="launchconfig"></a>
+<a name="installingrunningdebugging" id="installingrunningdebugging"></a>
+<a name="otherides" id="otherides"></a>
+<a name="buildingwithant"></a>
+<a name="debugging" id="debugging"></a>
+<a name="additionaldebugging" id="additionaldebugging"></a>
+<a name="toptips" id="toptips"></a>
+<a name="debughelpers"></a>
+<a name="uninstalling" id="uninstalling"></a>
+<a name="tips" id="tips"></a>
+<a name="eclipse" id="eclipse"></a>
+<a name="building"></a>
diff --git a/docs/html/sdk/1.0_r2/requirements.jd b/docs/html/sdk/1.0_r2/requirements.jd
deleted file mode 100644
index 74d90ef..0000000
--- a/docs/html/sdk/1.0_r2/requirements.jd
+++ /dev/null
@@ -1,44 +0,0 @@
-page.title=System Requirements
-sdk.version=1.0_r2
-
-
-@jd:body
-
-<p>The sections below describe the system and software requirements for developing Android applications using the Android SDK tools included in Android 1.0 SDK, Release 2. </p>
-
-<h2>System and Software Requirements</h2>
-<p>The following systems and development environments are supported by this SDK.</p>
-
-<h4>Supported Operating Systems:</h4>
-<ul>
- <li>Windows XP or Vista</li>
- <li>Mac OS X 10.4.8 or later (x86 only)</li>
- <li>Linux (tested on Linux Ubuntu Dapper Drake)</li>
-</ul>
-
-<h4>Supported Development Environments:</h4>
-<ul>
- <li>Eclipse IDE
- <ul>
- <li><a href="http://www.eclipse.org/downloads/">Eclipse</a> 3.3 (Europa), 3.4 (Ganymede)
- <ul>
- <li>Eclipse <a href="http://www.eclipse.org/jdt">JDT</a> plugin (included in most Eclipse IDE packages) </li>
- <li><a href="http://www.eclipse.org/webtools">WST</a> (optional, but needed for the Android Editors feature; included in <a href="http://www.eclipse.org/downloads/moreinfo/compare.php">most Eclipse IDE packages</a>)</li>
- </ul>
- </li>
- <li><a href="http://java.sun.com/javase/downloads/index.jsp">JDK 5 or JDK 6</a> (JRE alone is not sufficient)</li>
- <li><a href="installing.html#installingplugin">Android Development Tools plugin</a> (optional)</li>
- <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li>
- </ul>
- </li>
- <li>Other development environments or IDEs
- <ul>
- <li><a href="http://java.sun.com/javase/downloads/index.jsp">JDK 5 or JDK 6</a> (JRE alone is not sufficient)</li>
- <li><a href="http://ant.apache.org/">Apache Ant</a> 1.6.5 or later for Linux and Mac, 1.7 or later for Windows</li>
- <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li>
- </ul>
- </li>
-</ul>
-
-<p class="note"><strong>Note:</strong> If JDK is already installed on your development computer, please take a moment to make sure that it meets the version requirements listed above. In
-particular, note that some Linux distributions may include JDK 1.4 or Gnu Compiler for Java, both of which are not supported for Android development. </p> \ No newline at end of file
diff --git a/docs/html/sdk/1.0_r2/upgrading.jd b/docs/html/sdk/1.0_r2/upgrading.jd
index df9b657..168f1be 100644
--- a/docs/html/sdk/1.0_r2/upgrading.jd
+++ b/docs/html/sdk/1.0_r2/upgrading.jd
@@ -1,12 +1,37 @@
page.title=Upgrading the SDK
-sdk.version=1.0_r2
@jd:body
-<p>For the current SDK release, see the links under <strong>Current SDK Release</strong> in the side navigation.</p>
+<div class="sidebox-wrapper">
+ <div class="sidebox-inner">
+
+ <h2>Useful Links</h2>
+
+ <ul class="noindent">
+ <li><a href="migrating/0.9-1.0/changes-overview.html">Overview of Changes</a>
+ <p>A high-level look at what's changed in Android, with
+ discussion of how the changes may affect your apps.</p></li>
+
+ <li><a href="migrating/0.9-1.0/changes.html">API Diff Report</a>
+ <p>A detailed report that lists all the specific changes in the latest SDK.</p></li>
+
+ <li><a href="RELEASENOTES.html">Release Notes</a>
+ <p>Version details, known issues, and resolved issues. </p></li>
+
+ <li><a href="http://groups.google.com/group/android-developers">Android Developers Group</a>
+ <p>A forum where you can discuss migration issues and learn from other Android developers. </p></li>
+
+ <li><a href="http://code.google.com/p/android/issues/list">Android Issue Tracker</a>
+ <p>If you think you may have found a bug, use the issue tracker to report it.</p></li>
+ </ul>
+
+ </div>
+</div><!-- class-sidebox -->
+
<p>This guide will help you migrate your development environment and applications
-to <strong>version 1.0, release 2</strong>, of the Android SDK. Use this guide if you've been developing applications
-on a different version of the Android SDK.</p>
+to the latest version of the SDK. Use this guide if you've been developing applications
+on a previous version of the Android SDK.
+</p>
<p>To ensure that your applications are compliant with the Android 1.0 system available
on mobile devices, you need to install the new SDK and port your existing Android
@@ -14,7 +39,9 @@ applications to the updated API. The sections below guide you through the proces
<h2 id="install-new">Install the new SDK</h2>
-<p>After unpacking the SDK, you should:</p>
+<p><a href="{@docRoot}download.html">Download the SDK</a> and unpack it into a safe location.</p>
+
+<p>After unpacking the new SDK, you should:</p>
<ul>
<li>Wipe your emulator data. <p>Some data formats have changed since the last
@@ -33,58 +60,27 @@ applications to the updated API. The sections below guide you through the proces
<h2 id="update-plugin">Update your ADT Eclipse Plugin</h2>
-<p>If you develop on Eclipse and are using the ADT plugin, follow these steps to install the
-plugin that's required for this version of the SDK.</p>
+<p>If you develop on Eclipse and are using the ADT plugin, follow these steps to install the new plugin that accompanies the latest SDK.</p>
<table style="font-size:100%">
<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
<tr>
-<td width="45%">
+<td width="50%">
<ol>
- <li><a href="http://dl-ssl.google.com/android/ADT-0.8.0.zip">Download the ADT v0.8.0 zip
- file</a> (do not unpack it).</li>
- <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find
- and Install...</strong>. </li>
- <li>In the dialog that appears, select <strong>Search for new features to install</strong> and click
- <strong>Next</strong>. </li>
- <li>Click <strong>New Archive Site...</strong></li>
- <li>Browse and select the downloaded the zip file.</li>
- <li>You should now see the new site added to the search list (and checked).
- Click <strong>Finish</strong>. </li>
- <li>In the subsequent Search Results dialog box, select the checkbox for
- <strong>Android Plugin</strong> &gt; <strong>Developer Tools</strong>.
- This will check both features: "Android Developer Tools", and "Android
- Editors". The Android Editors feature is optional, but recommended. If
- you choose to install it, you need the WST plugin mentioned earlier in this
- page. Click <strong>Next</strong>. </li>
- <li>Read the license agreement and then select <strong>Accept terms of the license agreement</strong>.
- Click <strong>Next</strong>. </li>
- <li>Click <strong>Finish</strong>. </li>
- <li>The ADT plugin is not signed; you can accept the installation anyway
- by clicking <strong>Install All</strong>. </li>
- <li>Restart Eclipse. </li>
+ <li> Select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find and Install...</strong>. </li>
+ <li> Select <strong>Search for updates of the currently installed features</strong> and click <strong>Finish</strong>. </li>
+ <li> If any update for ADT is available, select and install. </li>
+ <li> Restart Eclipse.</li>
</ol>
-
</td>
<td>
-
<ol>
- <li><a href="http://dl-ssl.google.com/android/ADT-0.8.0.zip">Download the ADT v0.8.0 zip
- file</a> (do not unpack it).</li>
- <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates...</strong>.</li>
- <li>In the dialog that appears, click the <strong>Available Software</strong> tab.</li>
- <li>Click <strong>Add Site...</strong>, then <strong>Archive...</strong>.</li>
- <li>Browse and select the downloaded the zip file.</li>
- <li>Back in the Available Software view, you should see the plugin. Select the checkbox next to
- <em>Developer Tools</em> and click <strong>Install...</strong></li>
- <li>On the subsequent Install window, "Android Developer Tools", and "Android Editors" should both be checked.
- The Android Editors feature is optional, but recommended. If
- you choose to install it, you need the WST plugin mentioned earlier in this
- page. Click <strong>Next</strong>.</li>
- <li>Accept the license agreement and click <strong>Finish</strong>.</li>
- <li>Restart Eclipse. </li>
+ <li>Select <strong>Help</strong> &gt; <strong>Software Updates...</strong></li>
+ <li>Select the <strong>Installed Software</strong> tab.</li>
+ <li>Click <strong>Update...</strong></li>
+ <li>If an update for ADT is available, select it and click <strong>Finish</strong>.</li>
+ <li>Restart Eclipse.</li>
</ol>
-
</td>
</tr>
</table>
@@ -103,7 +99,7 @@ plugin that's required for this version of the SDK.</p>
the ADT plugin and the Ant-based build tools support this requirement by signing compiled
.apk files with a debug key. To do so, the build tools use the Keytool utility included
in the JDK to to create a keystore and a key with a known alias and password. For more
-information, see "Signing and Publishing Your App" in the documentation included with the SDK.
+information, see <a href="{@docRoot}guide/publishing/app-signing.html">Signing Your Applications</a>.
<p>To support signing, you should first make sure that Keytool is available to the SDK build
tools. In most cases, you can tell the SDK build tools how to find Keytool by making sure that
@@ -137,7 +133,10 @@ to place 3rd jar files, which are now automatically handled by the Ant script.</
framework and API changes. You'll need to update your code to match changes in the Android APIs.</p>
<p>One way to start is to open your project in Eclipse and see where the ADT
-identifies errors in your application.</p>
+identifies errors in your application. From there, you can lookup
+respective changes in the
+<a href="migrating/changes-overview.html">Overview of Changes</a>
+and <a href="migrating/changes.html">API Diffs Report</a>.</p>
<p>If you have additional trouble updating your code, visit the
<a href="http://groups.google.com/group/android-developers">Android Developers Group</a>
@@ -145,4 +144,8 @@ to seek help from other Android developers.</p>
<p>If you have modified one of the ApiDemos applications and would like to migrate it
to the new SDK, note that you will need to uninstall the version of ApiDemos that comes
-preinstalled in the emulator.</p>
+preinstalled in the emulator. For more information, or if you encounter an "reinstallation"
+error when running or installing ApiDemos, see the troubleshooting topic
+<a href="{@docRoot}guide/appendix/faq/troubleshooting.html#apidemosreinstall">I can't install ApiDemos
+apps in my IDE because of a signing error</a> for information about how to solve the problem.</p>
+
diff --git a/docs/html/sdk/1.1_r1/index.jd b/docs/html/sdk/1.1_r1/index.jd
index c4a9bf0..7e70b6b 100644
--- a/docs/html/sdk/1.1_r1/index.jd
+++ b/docs/html/sdk/1.1_r1/index.jd
@@ -4,16 +4,16 @@ sdk.version=1.1_r1
sdk.date=February 2009
sdk.win_download=android-sdk-windows-1.1_r1.zip
-sdk.win_bytes=86038515
-sdk.win_checksum=8c4b9080b430025370689e03d20842f3
+sdk.win_bytes=84533935
+sdk.win_checksum=4cec82e3d2c1658d73182e543d130a06
sdk.mac_download=android-sdk-mac_x86-1.1_r1.zip
-sdk.mac_bytes=79046151
-sdk.mac_checksum=becf0f1763d61eedce15d2a903d6c1dd
+sdk.mac_bytes=78918508
+sdk.mac_checksum=d67fb5f0eaf4f5a83dc985f5790940c6
sdk.linux_download=android-sdk-linux_x86-1.1_r1.zip
-sdk.linux_bytes=79345522
-sdk.linux_checksum=ebcb16b0cd4aef198b4dd9a1418efbf1
+sdk.linux_bytes=79219171
+sdk.linux_checksum=df88091c9f0ef6cc56cd92afcdad8d56
@jd:body
diff --git a/docs/html/sdk/1.1_r1/installing.jd b/docs/html/sdk/1.1_r1/installing.jd
index d5a7106..b198800 100644
--- a/docs/html/sdk/1.1_r1/installing.jd
+++ b/docs/html/sdk/1.1_r1/installing.jd
@@ -4,43 +4,22 @@ sdk.version=1.1_r1
@jd:body
-<p>This page describes how to install the Android SDK and set up your
-development environment. If you haven't downloaded the SDK, you can
-do so from the
-<a href="{@docRoot}sdk/1.1_r1/index.html">Download</a> page.</p>
+<p>This page describes how to install the Android 1.1 SDK, Release 1, and set up your development environment.
+If you haven't downloaded the SDK yet, you can so from the <a href="{@docRoot}sdk/1.1_r1/index.html">Download</a> page.</p>
-<p>If you encounter any problems during installation, see the
-<a href="#installnotes">Installation Notes</a> at the bottom of
-this page.</p>
+<p>Before you begin, be sure that your development environment meets the SDK
+<a href="{@docRoot}sdk/1.1_r1/requirements.html">System Requirements</a>. If you encounter any problems during installation,
+see the <a href="#installnotes">Installation Notes</a> at the bottom of this page.</p>
<h4 style="margin-top">Upgrading?</h4>
-<p>If you have already developed applications using an earlier version
-of the SDK, please skip this page and read the
-<a href="{@docRoot}sdk/1.1_r1/upgrading.html"><strong>Upgrading the
-SDK</strong></a></b> document instead.
+<p>If you have already developed applications using an earlier version of the
+SDK, please skip this page and read the
+<a href="{@docRoot}sdk/1.1_r1/upgrading.html"><strong>Upgrading the SDK</strong></a></b> document instead.
</p>
-
-<h2 id="setup">Preparing for Installation</h2>
-
-<p>Before you get started with the Android SDK, take a moment to confirm
-that your development machine meets the <a
-href="{@docRoot}sdk/1.1_r1/requirements.html">system requirements</a>.
-</p>
-
-<p>If you will be developing on Eclipse with the Android Development
-Tools (ADT) Plugin &mdash; the recommended path if you are new to
-Android &mdash; make sure that you have a suitable version of Eclipse
-installed on your computer. If you need to install Eclipse, you can
-download it from this location: </p>
-
-<p style="margin-left:2em;"><a href=
-"http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a
-></p>
-
-<p>A Java or RCP version of Eclipse is recommended. </p>
-
-<h2 id="installingsdk">Installing the SDK</h2>
+<a name="installingsdk"></a>
+<a name="setup"></a>
+<h2>Installing the SDK</h2>
<p>After downloading the SDK, unpack the .zip archive to a suitable location on your machine. By default, the SDK files are unpacked into a directory named <code>android_sdk_<em>&lt;platform</em>&gt;_<em>&lt;release&gt;</em>_<em>&lt;build&gt;</em></code>. The directory contains a link to a local copy of the documentation and the subdirectories <code>tools/</code>, <code>samples/</code>, and others. </p>
@@ -68,34 +47,16 @@ download it from this location: </p>
<p>If you will be using the Eclipse IDE as your environment for developing Android applications, continue reading the next
-section in order to install the Android Development Tools plugin and set up Eclipse. If you choose not to use Eclipse, you can
+section in order to install the Android Development Tools plugin and setup Eclipse. If you choose not to use Eclipse, you can
develop Android applications using other tools &mdash; read the guide to developing
-<a href="{@docRoot}guide/developing/other-ide.html">in other IDEs</a>.</p>
+<a href="{@docRoot}guide/developing/other-ide.html">In other IDEs</a>.</p>
-<h2 id="installingplugin">Installing the ADT Plugin for Eclipse</h2>
+<h2>Setting up Eclipse</h2>
-<p>Android offers a custom plugin for the Eclipse IDE, called Android
-Development Tools (ADT), that is designed to give you a powerful,
-integrated environment in which to build Android applications. It
-extends the capabilites of Eclipse to let you quickly set up new Android
-projects, create an application UI, add components based on the Android
-Framework API, and debug using the Android SDK tools.</p>
+<p>First, you should install a custom plugin called Android Development Tools (ADT), which adds integrated support for Android projects and tools. The ADT plugin includes a variety of powerful extensions that make creating, running, and debugging Android applications faster and easier. Developing in ADT/Eclipse is highly recommended for Eclipse users and those new to Android.</p>
-<p>If you are new to Android or want to develop using the Eclipse IDE,
-the ADT plugin will be an essential part of your development
-environment. In general, using Eclipse with ADT is a highly recommended
-approach and is the fastest way to get started. This section describes
-how to install ADT into your Eclipse environment.
-
-<p>If you prefer to work in a development environment other than Eclipse,
-you do not need to install Eclipse or the ADT Plugin. Instead, you can
-access the SDK tools directly to build and debug your application. </p>
-
-<p>Once you have Eclipse installed, as described in <a href="#setup">
-Preparing for Installation</a>, follow the steps below to
-download the ADT plugin and install it in your respective Eclipse
-environment. </p>
+<p>To download and install the ADT plugin, follow the steps below for your respective Eclipse version. </p>
<table style="font-size:100%">
<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
@@ -162,6 +123,7 @@ environment. </p>
</tr>
</table>
+
<p>Now, you just need to modify your Eclipse preferences to point to the Android SDK directory:</p>
<ol>
<li>Select <strong>Window</strong> &gt; <strong>Preferences...</strong> to open the Preferences
@@ -171,9 +133,9 @@ environment. </p>
<li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
</ol>
-<p>Done! If you haven't encountered any problems, then you're ready to
-begin developing Android applications. See the <a href="#next">After
-Installation: Next Steps</a> section for suggestions on how to start. </p>
+<p>Done! If you haven't encountered any problems, then you're ready to begin developing Android applications.
+We recommend you begin with the <a href="{@docRoot}guide/tutorials/hello-world.html">Hello World</a> tutorial,
+which will teach you some basics about Android applications and how to create projects using Eclipse.</p>
<h3 id="troubleshooting">Troubleshooting ADT Installation</h3>
@@ -220,59 +182,8 @@ JKS</pre>
Java 6 will resolve this issue and you can then reinstall the ADT
Plugin.</p>
-
-<h2 id="next">After Installation: Next Steps</h2>
-<p>Once you have installed the SDK and the ADT Plugin, you are ready to
-begin developing applications. Here are a few ways you can get started: </p>
-
-<p><strong>Learn about Android</strong></p>
-<ul>
-<li>Take a look at the <a href="{@docRoot}guide/index.html">Dev
-Guide</a> and the types of information it provides</li>
-<li>Read an introduction to Android as a platform in <a
-href="{@docRoot}guide/basics/what-is-android.html">What is
-Android?</a></li>
-<li>Learn about the Android framework and how applications run on it in
-<a href="{@docRoot}guide/topics/fundamentals.html">Application
-Fundamentals</a></li>
-<li>Take a look at the Android framework API specification in the <a
-href="{@docRoot}reference/index.html">Reference</a> tab</li>
-</ul>
-
-<p><strong>Explore the SDK</strong></p>
-<ul>
-<li>Get an overview of the <a
-href="{@docRoot}guide/development/tools/index.html">development
-tools</a> that are available to you</li>
-<li>Read the overviews of how to develop <a
-href="{@docRoot}guide/developing/eclipse-adt.html">in Eclipse/ADT</a> or
-<a href="{@docRoot}guide/developing/other-ide.html">in other IDEs</a>
-</li>
-</ul>
-
-<p><strong>Explore some code</strong></p>
-<ul>
-<li>Set up a <a href="{@docRoot}guide/tutorials/hello-world.html">Hello
-World application</a></li>
-<li>Follow the <a href="{@docRoot}guide/tutorials/notepad/index.html">
-Notepad Tutorial</a> to build a full Android application </li>
-<li>Create a new project for one of the other sample applications
-included in <code>&lt;sdk&gt;/samples</code>, then compile and run it in
-your development environment</li>
-</ul>
-
-<p><strong>Visit the Android developer groups</strong></p>
-<ul>
-<li>Take a look at the <a
-href="{@docRoot}community/index.html">Community</a> tab to see a list of
-Android developers groups. In particular, you might want to look at the
-<a href="http://groups.google.com/group/android-developers">Android
-Developers</a> group to get a sense for what the Android developer
-community is like.</li>
-</ul>
-
-
-<h2 id="installnotes">Installation Notes</h2>
+<a name="installnotes"></a>
+<h2>Installation Notes</h2>
<h4>Ubuntu Linux Notes</h4>
<ul>
<li>If you need help installing and configuring Java on your
@@ -304,9 +215,9 @@ and the ADT plugin. </li>
<ul>
<li>If JDK is already installed on your development computer, please
take a moment to make sure that it meets the version requirements listed
-in the <a href="{@docRoot}sdk/1.1_r1/requirements.html">System Requirements</a>.
-In particular, note that some Linux distributions may include JDK 1.4 or Gnu
-Compiler for Java, both of which are not supported for Android development.</li>
+at the top of this page. In particular, note that some Linux
+distributions may include JDK 1.4 or Gnu Compiler for Java, both of
+which are not supported for Android development.</li>
</ul>
diff --git a/docs/html/sdk/sdk_toc.cs b/docs/html/sdk/sdk_toc.cs
index 76c1c84..688929f 100644
--- a/docs/html/sdk/sdk_toc.cs
+++ b/docs/html/sdk/sdk_toc.cs
@@ -1,42 +1,26 @@
<ul>
- <li><?cs
- if:android.whichdoc != "online" ?>
- <h2>Android 1.1 SDK, r1</h2><?cs
- else ?>
- <h2>Current SDK Release</h2><?cs
- /if ?>
- <ul><?cs
- if:android.whichdoc == "online" ?>
- <li><a href="<?cs var:toroot ?>sdk/1.1_r1/index.html">Download</a></li><?cs
- /if ?>
+ <li>
+ <?cs if:android.whichdoc != "online" ?><h2>Android 1.1 SDK, r1</h2>
+ <?cs else ?><h2>Latest SDK Release</h2><?cs /if ?>
+ <ul>
+ <?cs if:android.whichdoc == "online" ?>
+ <li><a href="<?cs var:toroot ?>sdk/1.1_r1/index.html">Download</a></li>
+ <?cs /if ?>
<li><a href="<?cs var:toroot ?>sdk/1.1_r1/installing.html">Installing</a></li>
<li><a href="<?cs var:toroot ?>sdk/1.1_r1/upgrading.html">Upgrading</a></li>
<li><a href="<?cs var:toroot ?>sdk/1.1_r1/requirements.html">System Requirements</a></li>
- </ul>
- <ul>
- <li><a href="<?cs var:toroot ?>sdk/terms.html">SDK Terms and Conditions</a></li>
<li><a href="<?cs var:toroot ?>sdk/RELEASENOTES.html">SDK Release Notes</a></li>
- </ul><?cs
- if:android.whichdoc == "online" ?>
- <li>
- <h2>Android System Images</h2>
+ </ul>
<ul>
<li><a href="<?cs var:toroot ?>sdk/android-1.1.html">Android 1.1 Version Notes</a></li>
</ul>
</li>
- <li>
- <h2>Previous SDK Releases</h2>
- <ul>
- <li><a href="<?cs var:toroot ?>sdk/1.0_r2/index.html">Android 1.0 SDK, release 2</a></li>
- <li><a href="<?cs var:toroot ?>sdk/1.0_r1/index.html">Android 1.0 SDK, release 1</a></li>
- </ul>
- </li><?cs
- /if ?>
+</ul>
+<ul>
+ <li><a href="<?cs var:toroot ?>sdk/terms.html">SDK Terms and Conditions</a></li>
+ <?cs if:android.whichdoc == "online" ?>
+ <li><a href="http://code.google.com/android/download_list.html">Previous SDK Releases</a></li>
+ <?cs /if ?>
</ul>
-<script type="text/javascript">
-<!--
- buildToggleLists();
-//-->
-</script> \ No newline at end of file
diff --git a/docs/html/search.jd b/docs/html/search.jd
index 0a802a6..979964b 100644
--- a/docs/html/search.jd
+++ b/docs/html/search.jd
@@ -1,8 +1,8 @@
page.title=Search Results
@jd:body
+
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="/assets/jquery-history.js" type="text/javascript"></script>
<script type="text/javascript">
google.load('search', '1');
@@ -20,80 +20,36 @@ page.title=Search Results
// configure search result options
searchOptions = new google.search.SearcherOptions();
searchOptions.setExpandMode(GSearchControl.EXPAND_MODE_OPEN);
+ searchOptions.setRoot(document.getElementById("leftSearchControl"));
- // configure each of the searchers, for each tab
- devSiteSearcher = new google.search.WebSearch();
- devSiteSearcher.setUserDefinedLabel("All Developers Site");
- devSiteSearcher.setSiteRestriction("http://developer.android.com/");
-
- devGuideSearcher = new google.search.WebSearch();
- devGuideSearcher.setUserDefinedLabel("Dev Guide");
- devGuideSearcher.setSiteRestriction("http://developer.android.com/guide/");
-
- referenceSearcher = new google.search.WebSearch();
- referenceSearcher.setUserDefinedLabel("Reference");
- referenceSearcher.setSiteRestriction("http://developer.android.com/reference/");
-
- blogSearcher = new google.search.WebSearch();
- blogSearcher.setUserDefinedLabel("Blog");
- blogSearcher.setSiteRestriction("http://android-developers.blogspot.com");
-
- groupsSearcher = new google.search.WebSearch();
- groupsSearcher.setUserDefinedLabel("Developer Groups");
- groupsSearcher.setSiteRestriction("001283715400630100512:ggqrtvkztwm");
-
- sourceSiteSearcher = new google.search.WebSearch();
- sourceSiteSearcher.setUserDefinedLabel("Android Source");
- sourceSiteSearcher.setSiteRestriction("http://source.android.com");
-
- homeSiteSearcher = new google.search.WebSearch();
- homeSiteSearcher.setUserDefinedLabel("Android Home");
- homeSiteSearcher.setSiteRestriction("http://www.android.com");
+ // configure searcher options
+ searcher = new google.search.WebSearch();
+ searcher.setUserDefinedLabel("Android Developers");
+ searcher.setSiteRestriction("001283715400630100512:ggqrtvkztwm");
- // add each searcher to the search control
- searchControl.addSearcher(devSiteSearcher, searchOptions);
- searchControl.addSearcher(devGuideSearcher, searchOptions);
- searchControl.addSearcher(referenceSearcher, searchOptions);
- searchControl.addSearcher(groupsSearcher, searchOptions);
- searchControl.addSearcher(sourceSiteSearcher, searchOptions);
- searchControl.addSearcher(blogSearcher, searchOptions);
-
- // configure result options
+ searchControl.addSearcher(searcher, searchOptions);
searchControl.setResultSetSize(google.search.Search.LARGE_RESULTSET);
searchControl.setLinkTarget(google.search.Search.LINK_TARGET_SELF);
- searchControl.setTimeoutInterval(google.search.SearchControl.TIMEOUT_LONG);
searchControl.setNoResultsString(google.search.SearchControl.NO_RESULTS_DEFAULT_STRING);
// upon ajax search, refresh the url and search title
searchControl.setSearchStartingCallback(this, function(control, searcher, query) {
- $("#searchTitle").html("search results for <em>" + query + "</em>");
- $.history.add('q=' + query); // add the current query to the browser history
+ temp = location.href.split('#');
+ url = temp ? temp[0] : location.href;
+ location.href = url + '#q=' + query;
+ document.getElementById("searchTitle").innerHTML = "search results for <em>" + query + "</em>"
});
- // draw the search results box
- searchControl.draw(document.getElementById("leftSearchControl"), drawOptions);
+ searchControl.draw(null, drawOptions);
// execute a search upon page load, from url hash query
if (location.href.indexOf("#q=") != -1) {
url = location.href.split("#q=");
searchControl.execute(decodeURI(url[1]));
}
- document.getElementById("search_autocomplete").focus();
}
google.setOnLoadCallback(OnLoad, true);
-
- // when an event on the browser history occurs (back, forward, load) perform a search
- $(window).history(function(e, hash) {
- hashParts = hash.split('=');
- searchControl.execute(decodeURI(hashParts[1]));
- $("#searchTitle").html("search results for <em>" + decodeURI(hashParts[1]) + "</em>");
- });
-
- // forcefully regain key-up event control (previously jacked by search api)
- $("#search_autocomplete").keyup(function(event) {
- return search_changed(event, false, '/');
- });
</script>
<div id="mainBodyFixed" style="width:auto; margin:20px">
diff --git a/docs/html/sitemap.txt b/docs/html/sitemap.txt
deleted file mode 100644
index a8221bf..0000000
--- a/docs/html/sitemap.txt
+++ /dev/null
@@ -1,5444 +0,0 @@
-http://developer.android.com/index.html
-http://developer.android.com/sdk/1.1_r1/index.html
-http://developer.android.com/guide/index.html
-http://developer.android.com/reference/packages.html
-http://developer.android.com/community/index.html
-http://developer.android.com/sdk/index.html
-http://developer.android.com/license.html
-http://developer.android.com/sdk/terms.html
-http://developer.android.com/guide/developing/tools/index.html
-http://developer.android.com/reference/com/google/android/maps/package-summary.html
-http://developer.android.com/reference/classes.html
-http://developer.android.com/reference/android/package-summary.html
-http://developer.android.com/reference/android/app/package-summary.html
-http://developer.android.com/reference/android/content/package-summary.html
-http://developer.android.com/reference/android/content/pm/package-summary.html
-http://developer.android.com/reference/android/content/res/package-summary.html
-http://developer.android.com/reference/android/database/package-summary.html
-http://developer.android.com/reference/android/database/sqlite/package-summary.html
-http://developer.android.com/reference/android/graphics/package-summary.html
-http://developer.android.com/reference/android/graphics/drawable/package-summary.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/package-summary.html
-http://developer.android.com/reference/android/hardware/package-summary.html
-http://developer.android.com/reference/android/location/package-summary.html
-http://developer.android.com/reference/android/media/package-summary.html
-http://developer.android.com/reference/android/net/package-summary.html
-
-http://developer.android.com/reference/android/net/http/package-summary.html
-http://developer.android.com/reference/android/net/wifi/package-summary.html
-
-http://developer.android.com/reference/android/opengl/package-summary.html
-http://developer.android.com/reference/android/os/package-summary.html
-
-http://developer.android.com/reference/android/preference/package-summary.html
-http://developer.android.com/reference/android/provider/package-summary.html
-
-http://developer.android.com/reference/android/sax/package-summary.html
-http://developer.android.com/reference/android/telephony/package-summary.html
-
-http://developer.android.com/reference/android/telephony/gsm/package-summary.html
-http://developer.android.com/reference/android/test/package-summary.html
-
-http://developer.android.com/reference/android/test/mock/package-summary.html
-http://developer.android.com/reference/android/test/suitebuilder/package-summary.html
-
-http://developer.android.com/reference/android/text/package-summary.html
-http://developer.android.com/reference/android/text/method/package-summary.html
-
-http://developer.android.com/reference/android/text/style/package-summary.html
-http://developer.android.com/reference/android/text/util/package-summary.html
-
-http://developer.android.com/reference/android/util/package-summary.html
-http://developer.android.com/reference/android/view/package-summary.html
-
-http://developer.android.com/reference/android/view/animation/package-summary.html
-http://developer.android.com/reference/android/webkit/package-summary.html
-
-http://developer.android.com/reference/android/widget/package-summary.html
-http://developer.android.com/reference/dalvik/bytecode/package-summary.html
-
-http://developer.android.com/reference/dalvik/system/package-summary.html
-http://developer.android.com/reference/java/awt/font/package-summary.html
-
-http://developer.android.com/reference/java/io/package-summary.html
-http://developer.android.com/reference/java/lang/package-summary.html
-
-http://developer.android.com/reference/java/lang/annotation/package-summary.html
-http://developer.android.com/reference/java/lang/ref/package-summary.html
-
-http://developer.android.com/reference/java/lang/reflect/package-summary.html
-http://developer.android.com/reference/java/math/package-summary.html
-
-http://developer.android.com/reference/java/net/package-summary.html
-http://developer.android.com/reference/java/nio/package-summary.html
-
-http://developer.android.com/reference/java/nio/channels/package-summary.html
-http://developer.android.com/reference/java/nio/channels/spi/package-summary.html
-
-http://developer.android.com/reference/java/nio/charset/package-summary.html
-http://developer.android.com/reference/java/nio/charset/spi/package-summary.html
-
-http://developer.android.com/reference/java/security/package-summary.html
-http://developer.android.com/reference/java/security/acl/package-summary.html
-
-http://developer.android.com/reference/java/security/cert/package-summary.html
-http://developer.android.com/reference/java/security/interfaces/package-summary.html
-
-http://developer.android.com/reference/java/security/spec/package-summary.html
-http://developer.android.com/reference/java/sql/package-summary.html
-
-http://developer.android.com/reference/java/text/package-summary.html
-http://developer.android.com/reference/java/util/package-summary.html
-
-http://developer.android.com/reference/java/util/concurrent/package-summary.html
-http://developer.android.com/reference/java/util/concurrent/atomic/package-summary.html
-
-http://developer.android.com/reference/java/util/concurrent/locks/package-summary.html
-http://developer.android.com/reference/java/util/jar/package-summary.html
-
-http://developer.android.com/reference/java/util/logging/package-summary.html
-http://developer.android.com/reference/java/util/prefs/package-summary.html
-
-http://developer.android.com/reference/java/util/regex/package-summary.html
-http://developer.android.com/reference/java/util/zip/package-summary.html
-
-http://developer.android.com/reference/javax/crypto/package-summary.html
-http://developer.android.com/reference/javax/crypto/interfaces/package-summary.html
-
-http://developer.android.com/reference/javax/crypto/spec/package-summary.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/package-summary.html
-
-http://developer.android.com/reference/javax/microedition/khronos/opengles/package-summary.html
-
-http://developer.android.com/reference/javax/net/package-summary.html
-http://developer.android.com/reference/javax/net/ssl/package-summary.html
-
-http://developer.android.com/reference/javax/security/auth/package-summary.html
-http://developer.android.com/reference/javax/security/auth/callback/package-summary.html
-
-http://developer.android.com/reference/javax/security/auth/login/package-summary.html
-http://developer.android.com/reference/javax/security/auth/x500/package-summary.html
-
-http://developer.android.com/reference/javax/security/cert/package-summary.html
-http://developer.android.com/reference/javax/sql/package-summary.html
-
-http://developer.android.com/reference/javax/xml/package-summary.html
-http://developer.android.com/reference/javax/xml/parsers/package-summary.html
-
-http://developer.android.com/reference/junit/framework/package-summary.html
-http://developer.android.com/reference/junit/runner/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/package-summary.html
-http://developer.android.com/reference/org/apache/http/auth/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/auth/params/package-summary.html
-http://developer.android.com/reference/org/apache/http/client/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/client/entity/package-summary.html
-http://developer.android.com/reference/org/apache/http/client/methods/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/client/params/package-summary.html
-http://developer.android.com/reference/org/apache/http/client/protocol/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/client/utils/package-summary.html
-http://developer.android.com/reference/org/apache/http/conn/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/conn/params/package-summary.html
-http://developer.android.com/reference/org/apache/http/conn/routing/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/conn/scheme/package-summary.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/conn/util/package-summary.html
-http://developer.android.com/reference/org/apache/http/cookie/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/cookie/params/package-summary.html
-http://developer.android.com/reference/org/apache/http/entity/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/impl/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/auth/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/impl/client/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/conn/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/impl/entity/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/io/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/io/package-summary.html
-http://developer.android.com/reference/org/apache/http/message/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/params/package-summary.html
-http://developer.android.com/reference/org/apache/http/protocol/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/util/package-summary.html
-http://developer.android.com/reference/org/json/package-summary.html
-
-http://developer.android.com/reference/org/w3c/dom/package-summary.html
-http://developer.android.com/reference/org/xml/sax/package-summary.html
-
-http://developer.android.com/reference/org/xml/sax/ext/package-summary.html
-http://developer.android.com/reference/org/xml/sax/helpers/package-summary.html
-
-http://developer.android.com/reference/org/xmlpull/v1/package-summary.html
-http://developer.android.com/reference/org/xmlpull/v1/sax2/package-summary.html
-
-http://developer.android.com/reference/org/apache/http/message/AbstractHttpMessage.html
-http://developer.android.com/guide/basics/what-is-android.html
-
-http://developer.android.com/guide/topics/fundamentals.html
-http://developer.android.com/guide/topics/ui/index.html
-
-http://developer.android.com/guide/topics/ui/declaring-layout.html
-http://developer.android.com/guide/topics/ui/menus.html
-
-http://developer.android.com/guide/topics/ui/layout-objects.html
-http://developer.android.com/guide/topics/ui/binding.html
-
-http://developer.android.com/guide/topics/ui/ui-events.html
-http://developer.android.com/guide/topics/ui/themes.html
-
-http://developer.android.com/guide/topics/ui/custom-components.html
-http://developer.android.com/guide/topics/ui/how-android-draws.html
-
-http://developer.android.com/guide/topics/resources/index.html
-http://developer.android.com/guide/topics/resources/resources-i18n.html
-
-http://developer.android.com/guide/topics/resources/available-resources.html
-http://developer.android.com/guide/topics/intents/intents-filters.html
-
-http://developer.android.com/guide/topics/data/data-storage.html
-http://developer.android.com/guide/topics/providers/content-providers.html
-
-http://developer.android.com/guide/topics/security/security.html
-http://developer.android.com/guide/topics/manifest/manifest-intro.html
-
-http://developer.android.com/guide/topics/manifest/action-element.html
-http://developer.android.com/guide/topics/manifest/activity-element.html
-
-http://developer.android.com/guide/topics/manifest/activity-alias-element.html
-http://developer.android.com/guide/topics/manifest/application-element.html
-
-http://developer.android.com/guide/topics/manifest/category-element.html
-http://developer.android.com/guide/topics/manifest/data-element.html
-
-http://developer.android.com/guide/topics/manifest/grant-uri-permission-element.html
-http://developer.android.com/guide/topics/manifest/instrumentation-element.html
-
-http://developer.android.com/guide/topics/manifest/intent-filter-element.html
-http://developer.android.com/guide/topics/manifest/manifest-element.html
-
-http://developer.android.com/guide/topics/manifest/meta-data-element.html
-http://developer.android.com/guide/topics/manifest/permission-element.html
-
-http://developer.android.com/guide/topics/manifest/permission-group-element.html
-http://developer.android.com/guide/topics/manifest/permission-tree-element.html
-
-http://developer.android.com/guide/topics/manifest/provider-element.html
-http://developer.android.com/guide/topics/manifest/receiver-element.html
-
-http://developer.android.com/guide/topics/manifest/service-element.html
-http://developer.android.com/guide/topics/manifest/uses-library-element.html
-
-http://developer.android.com/guide/topics/manifest/uses-permission-element.html
-http://developer.android.com/guide/topics/manifest/uses-sdk-element.html
-
-http://developer.android.com/guide/topics/graphics/index.html
-http://developer.android.com/guide/topics/graphics/2d-graphics.html
-
-http://developer.android.com/guide/topics/graphics/opengl.html
-http://developer.android.com/guide/topics/media/index.html
-
-http://developer.android.com/guide/topics/location/index.html
-http://developer.android.com/guide/developing/eclipse-adt.html
-
-http://developer.android.com/guide/developing/other-ide.html
-http://developer.android.com/guide/developing/device.html
-
-http://developer.android.com/guide/developing/debug-tasks.html
-http://developer.android.com/guide/developing/tools/aapt.html
-
-http://developer.android.com/guide/developing/tools/adb.html
-http://developer.android.com/guide/developing/tools/othertools.html
-
-http://developer.android.com/guide/developing/tools/aidl.html
-http://developer.android.com/guide/developing/tools/ddms.html
-
-http://developer.android.com/guide/developing/tools/draw9patch.html
-http://developer.android.com/guide/developing/tools/emulator.html
-
-http://developer.android.com/guide/developing/tools/hierarchy-viewer.html
-http://developer.android.com/guide/developing/tools/monkey.html
-
-http://developer.android.com/guide/developing/tools/traceview.html
-http://developer.android.com/guide/publishing/app-signing.html
-
-http://developer.android.com/guide/publishing/versioning.html
-http://developer.android.com/guide/publishing/preparing.html
-
-http://developer.android.com/guide/publishing/publishing.html
-http://developer.android.com/guide/practices/design/performance.html
-
-http://developer.android.com/guide/practices/design/responsiveness.html
-http://developer.android.com/guide/practices/design/seamlessness.html
-
-http://developer.android.com/guide/tutorials/hello-world.html
-http://developer.android.com/guide/tutorials/views/index.html
-
-http://developer.android.com/guide/tutorials/notepad/index.html
-http://developer.android.com/guide/samples/ApiDemos/index.html
-
-http://developer.android.com/guide/samples/LunarLander/index.html
-http://developer.android.com/guide/samples/NotePad/index.html
-
-http://developer.android.com/guide/appendix/media-formats.html
-http://developer.android.com/guide/appendix/g-app-intents.html
-
-http://developer.android.com/guide/appendix/glossary.html
-http://developer.android.com/guide/appendix/faq/commontasks.html
-
-http://developer.android.com/guide/appendix/faq/framework.html
-http://developer.android.com/guide/appendix/faq/troubleshooting.html
-
-http://developer.android.com/guide/appendix/faq/licensingandoss.html
-http://developer.android.com/guide/appendix/faq/security.html
-
-http://developer.android.com/reference/org/apache/http/impl/client/AbstractAuthenticationHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/client/AbstractHttpClient.html
-http://developer.android.com/reference/org/apache/http/impl/client/BasicCookieStore.html
-
-http://developer.android.com/reference/org/apache/http/impl/client/BasicCredentialsProvider.html
-
-http://developer.android.com/reference/org/apache/http/impl/client/BasicResponseHandler.html
-http://developer.android.com/reference/org/apache/http/impl/client/ClientParamsStack.html
-
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.html
-
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpClient.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultProxyAuthenticationHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultRedirectHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultRequestDirector.html
-
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultTargetAuthenticationHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultUserTokenHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/client/EntityEnclosingRequestWrapper.html
-
-http://developer.android.com/reference/org/apache/http/impl/client/RedirectLocations.html
-http://developer.android.com/reference/org/apache/http/impl/client/RequestWrapper.html
-
-http://developer.android.com/reference/org/apache/http/impl/client/RoutedRequest.html
-http://developer.android.com/reference/org/apache/http/impl/client/TunnelRefusedException.html
-
-http://developer.android.com/reference/org/apache/http/client/CookieStore.html
-http://developer.android.com/reference/org/apache/http/client/CredentialsProvider.html
-
-http://developer.android.com/reference/org/apache/http/client/ResponseHandler.html
-http://developer.android.com/reference/org/apache/http/client/HttpRequestRetryHandler.html
-
-http://developer.android.com/reference/org/apache/http/client/RedirectHandler.html
-http://developer.android.com/reference/org/apache/http/client/RequestDirector.html
-
-http://developer.android.com/reference/org/apache/http/HttpEntityEnclosingRequest.html
-http://developer.android.com/reference/org/apache/http/HttpRequest.html
-
-http://developer.android.com/reference/android/Manifest.html
-http://developer.android.com/reference/android/Manifest.permission.html
-
-http://developer.android.com/reference/android/Manifest.permission_group.html
-http://developer.android.com/reference/android/R.html
-
-http://developer.android.com/reference/android/R.anim.html
-http://developer.android.com/reference/android/R.array.html
-
-http://developer.android.com/reference/android/R.attr.html
-http://developer.android.com/reference/android/R.color.html
-
-http://developer.android.com/reference/android/R.dimen.html
-http://developer.android.com/reference/android/R.drawable.html
-
-http://developer.android.com/reference/android/R.id.html
-http://developer.android.com/reference/android/R.layout.html
-
-http://developer.android.com/reference/android/R.plurals.html
-http://developer.android.com/reference/android/R.raw.html
-
-http://developer.android.com/reference/android/R.string.html
-http://developer.android.com/reference/android/R.style.html
-
-http://developer.android.com/reference/android/R.styleable.html
-http://developer.android.com/reference/android/R.xml.html
-
-http://developer.android.com/reference/android/package-descr.html
-http://developer.android.com/reference/android/os/Debug.html
-
-http://developer.android.com/reference/java/security/acl/Acl.html
-http://developer.android.com/reference/java/security/acl/AclEntry.html
-
-http://developer.android.com/reference/java/security/acl/Group.html
-http://developer.android.com/reference/java/security/acl/Owner.html
-
-http://developer.android.com/reference/java/security/acl/Permission.html
-http://developer.android.com/reference/java/security/acl/AclNotFoundException.html
-
-http://developer.android.com/reference/java/security/acl/LastOwnerException.html
-http://developer.android.com/reference/java/security/acl/NotOwnerException.html
-
-http://developer.android.com/reference/java/security/acl/package-descr.html
-http://developer.android.com/reference/java/text/AttributedCharacterIterator.html
-
-http://developer.android.com/reference/java/text/CharacterIterator.html
-http://developer.android.com/reference/java/text/Annotation.html
-
-http://developer.android.com/reference/java/text/AttributedCharacterIterator.Attribute.html
-http://developer.android.com/reference/java/text/AttributedString.html
-
-http://developer.android.com/reference/java/text/Bidi.html
-http://developer.android.com/reference/java/text/BreakIterator.html
-
-http://developer.android.com/reference/java/text/ChoiceFormat.html
-http://developer.android.com/reference/java/text/CollationElementIterator.html
-
-http://developer.android.com/reference/java/text/CollationKey.html
-http://developer.android.com/reference/java/text/Collator.html
-
-http://developer.android.com/reference/java/text/DateFormat.html
-http://developer.android.com/reference/java/text/DateFormat.Field.html
-
-http://developer.android.com/reference/java/text/DateFormatSymbols.html
-http://developer.android.com/reference/java/text/DecimalFormat.html
-
-http://developer.android.com/reference/java/text/DecimalFormatSymbols.html
-http://developer.android.com/reference/java/text/FieldPosition.html
-
-http://developer.android.com/reference/java/text/Format.html
-http://developer.android.com/reference/java/text/Format.Field.html
-
-http://developer.android.com/reference/java/text/MessageFormat.html
-http://developer.android.com/reference/java/text/MessageFormat.Field.html
-
-http://developer.android.com/reference/java/text/NumberFormat.html
-http://developer.android.com/reference/java/text/NumberFormat.Field.html
-
-http://developer.android.com/reference/java/text/ParsePosition.html
-http://developer.android.com/reference/java/text/RuleBasedCollator.html
-
-http://developer.android.com/reference/java/text/SimpleDateFormat.html
-http://developer.android.com/reference/java/text/StringCharacterIterator.html
-
-http://developer.android.com/reference/java/text/ParseException.html
-http://developer.android.com/reference/java/text/package-descr.html
-
-http://developer.android.com/reference/android/view/Menu.html
-http://developer.android.com/reference/android/view/ContextMenu.html
-
-http://developer.android.com/reference/android/view/SubMenu.html
-http://developer.android.com/reference/android/app/Activity.html
-
-http://developer.android.com/reference/android/view/MenuItem.html
-http://developer.android.com/reference/android/widget/ListView.html
-
-http://developer.android.com/reference/android/view/View.html
-http://developer.android.com/reference/android/view/ContextMenu.ContextMenuInfo.html
-
-http://developer.android.com/reference/android/widget/AdapterView.AdapterContextMenuInfo.html
-
-http://developer.android.com/reference/android/app/ListActivity.html
-http://developer.android.com/reference/android/view/MenuInflater.html
-
-http://developer.android.com/reference/android/preference/PreferenceActivity.html
-http://developer.android.com/reference/android/media/MediaPlayer.html
-
-http://developer.android.com/reference/android/media/MediaRecorder.html
-http://developer.android.com/reference/android/content/ContentValues.html
-
-http://developer.android.com/reference/android/content/ContentResolver.html
-http://developer.android.com/reference/android/test/PerformanceTestCase.html
-
-http://developer.android.com/reference/android/test/PerformanceTestCase.Intermediates.html
-http://developer.android.com/reference/android/test/TestSuiteProvider.html
-
-http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase.html
-http://developer.android.com/reference/android/test/ActivityTestCase.html
-
-http://developer.android.com/reference/android/test/ActivityUnitTestCase.html
-http://developer.android.com/reference/android/test/AndroidTestCase.html
-
-http://developer.android.com/reference/android/test/AndroidTestRunner.html
-http://developer.android.com/reference/android/test/ApplicationTestCase.html
-
-http://developer.android.com/reference/android/app/Application.html
-http://developer.android.com/reference/android/test/InstrumentationTestCase.html
-
-http://developer.android.com/reference/android/test/InstrumentationTestRunner.html
-http://developer.android.com/reference/android/test/InstrumentationTestSuite.html
-
-http://developer.android.com/reference/android/test/IsolatedContext.html
-http://developer.android.com/reference/android/test/MoreAsserts.html
-
-http://developer.android.com/reference/android/test/ProviderTestCase.html
-http://developer.android.com/reference/android/content/ContentProvider.html
-
-http://developer.android.com/reference/android/test/RenamingDelegatingContext.html
-http://developer.android.com/reference/android/test/ServiceTestCase.html
-
-http://developer.android.com/reference/android/app/Service.html
-http://developer.android.com/reference/android/test/SingleLaunchActivityTestCase.html
-
-http://developer.android.com/reference/android/test/SyncBaseInstrumentation.html
-http://developer.android.com/reference/android/test/TouchUtils.html
-
-http://developer.android.com/reference/android/test/ViewAsserts.html
-http://developer.android.com/reference/android/test/AssertionFailedError.html
-
-http://developer.android.com/reference/android/test/ComparisonFailure.html
-http://developer.android.com/reference/android/app/Instrumentation.html
-
-http://developer.android.com/reference/junit/framework/TestCase.html
-http://developer.android.com/reference/junit/framework/TestSuite.html
-
-http://developer.android.com/reference/android/content/Intent.html
-http://developer.android.com/reference/android/content/Context.html
-
-http://developer.android.com/reference/android/os/Bundle.html
-http://developer.android.com/reference/android/view/ViewGroup.html
-
-http://developer.android.com/reference/android/widget/Button.html
-http://developer.android.com/reference/android/widget/TextView.html
-
-http://developer.android.com/reference/android/widget/EditText.html
-http://developer.android.com/reference/android/widget/CheckBox.html
-
-http://developer.android.com/reference/android/widget/RadioButton.html
-http://developer.android.com/reference/android/widget/Gallery.html
-
-http://developer.android.com/reference/android/widget/Spinner.html
-http://developer.android.com/reference/android/widget/AutoCompleteTextView.html
-
-http://developer.android.com/reference/android/widget/ImageSwitcher.html
-http://developer.android.com/reference/android/widget/TextSwitcher.html
-
-http://developer.android.com/reference/android/widget/LinearLayout.html
-http://developer.android.com/reference/android/widget/FrameLayout.html
-
-http://developer.android.com/reference/android/widget/AbsoluteLayout.html
-http://developer.android.com/reference/android/graphics/Canvas.html
-
-http://developer.android.com/reference/android/view/SurfaceView.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LabelView.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/custom_view_1.html
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NoteEditor.html
-
-http://developer.android.com/reference/java/net/ContentHandlerFactory.html
-http://developer.android.com/reference/java/net/DatagramSocketImplFactory.html
-
-http://developer.android.com/reference/java/net/FileNameMap.html
-http://developer.android.com/reference/java/net/SocketImplFactory.html
-
-http://developer.android.com/reference/java/net/SocketOptions.html
-http://developer.android.com/reference/java/net/URLStreamHandlerFactory.html
-
-http://developer.android.com/reference/java/net/Authenticator.html
-http://developer.android.com/reference/java/net/CacheRequest.html
-
-http://developer.android.com/reference/java/net/CacheResponse.html
-http://developer.android.com/reference/java/net/ContentHandler.html
-
-http://developer.android.com/reference/java/net/CookieHandler.html
-http://developer.android.com/reference/java/net/DatagramPacket.html
-
-http://developer.android.com/reference/java/net/DatagramSocket.html
-http://developer.android.com/reference/java/net/DatagramSocketImpl.html
-
-http://developer.android.com/reference/java/net/HttpURLConnection.html
-http://developer.android.com/reference/java/net/Inet4Address.html
-
-http://developer.android.com/reference/java/net/Inet6Address.html
-http://developer.android.com/reference/java/net/InetAddress.html
-
-http://developer.android.com/reference/java/net/InetSocketAddress.html
-http://developer.android.com/reference/java/net/JarURLConnection.html
-
-http://developer.android.com/reference/java/net/MulticastSocket.html
-http://developer.android.com/reference/java/net/NetPermission.html
-
-http://developer.android.com/reference/java/net/NetworkInterface.html
-http://developer.android.com/reference/java/net/PasswordAuthentication.html
-
-http://developer.android.com/reference/java/net/Proxy.html
-http://developer.android.com/reference/java/net/ProxySelector.html
-
-http://developer.android.com/reference/java/net/ResponseCache.html
-http://developer.android.com/reference/java/net/SecureCacheResponse.html
-
-http://developer.android.com/reference/java/net/ServerSocket.html
-http://developer.android.com/reference/java/net/Socket.html
-
-http://developer.android.com/reference/java/net/SocketAddress.html
-http://developer.android.com/reference/java/net/SocketImpl.html
-
-http://developer.android.com/reference/java/net/SocketPermission.html
-http://developer.android.com/reference/java/net/URI.html
-
-http://developer.android.com/reference/java/net/URL.html
-http://developer.android.com/reference/java/net/URLClassLoader.html
-
-http://developer.android.com/reference/java/net/URLConnection.html
-http://developer.android.com/reference/java/net/URLDecoder.html
-
-http://developer.android.com/reference/java/net/URLEncoder.html
-http://developer.android.com/reference/java/net/URLStreamHandler.html
-
-http://developer.android.com/reference/java/net/Authenticator.RequestorType.html
-http://developer.android.com/reference/java/net/Proxy.Type.html
-
-http://developer.android.com/reference/java/net/BindException.html
-http://developer.android.com/reference/java/net/ConnectException.html
-
-http://developer.android.com/reference/java/net/HttpRetryException.html
-http://developer.android.com/reference/java/net/MalformedURLException.html
-
-http://developer.android.com/reference/java/net/NoRouteToHostException.html
-http://developer.android.com/reference/java/net/PortUnreachableException.html
-
-http://developer.android.com/reference/java/net/ProtocolException.html
-http://developer.android.com/reference/java/net/SocketException.html
-
-http://developer.android.com/reference/java/net/SocketTimeoutException.html
-http://developer.android.com/reference/java/net/UnknownHostException.html
-
-http://developer.android.com/reference/java/net/UnknownServiceException.html
-http://developer.android.com/reference/java/net/URISyntaxException.html
-
-http://developer.android.com/reference/java/net/package-descr.html
-http://developer.android.com/reference/android/graphics/drawable/Drawable.html
-
-http://developer.android.com/reference/android/graphics/drawable/BitmapDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/ShapeDrawable.html
-
-http://developer.android.com/reference/android/graphics/drawable/PictureDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/LayerDrawable.html
-
-http://developer.android.com/reference/android/widget/ImageView.html
-http://developer.android.com/reference/android/content/res/Resources.html
-
-http://developer.android.com/reference/android/graphics/drawable/shapes/OvalShape.html
-http://developer.android.com/reference/android/graphics/drawable/NinePatchDrawable.html
-
-http://developer.android.com/reference/android/view/animation/AnimationSet.html
-http://developer.android.com/reference/android/view/animation/Animation.html
-
-http://developer.android.com/reference/android/view/animation/Interpolator.html
-http://developer.android.com/reference/android/view/animation/AccelerateInterpolator.html
-
-http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
-http://developer.android.com/reference/java/util/logging/Filter.html
-
-http://developer.android.com/reference/java/util/logging/LoggingMXBean.html
-http://developer.android.com/reference/java/util/logging/ConsoleHandler.html
-
-http://developer.android.com/reference/java/util/logging/ErrorManager.html
-http://developer.android.com/reference/java/util/logging/FileHandler.html
-
-http://developer.android.com/reference/java/util/logging/Formatter.html
-http://developer.android.com/reference/java/util/logging/Handler.html
-
-http://developer.android.com/reference/java/util/logging/Level.html
-http://developer.android.com/reference/java/util/logging/Logger.html
-
-http://developer.android.com/reference/java/util/logging/LoggingPermission.html
-http://developer.android.com/reference/java/util/logging/LogManager.html
-
-http://developer.android.com/reference/java/util/logging/LogRecord.html
-http://developer.android.com/reference/java/util/logging/MemoryHandler.html
-
-http://developer.android.com/reference/java/util/logging/SimpleFormatter.html
-http://developer.android.com/reference/java/util/logging/SocketHandler.html
-
-http://developer.android.com/reference/java/util/logging/StreamHandler.html
-http://developer.android.com/reference/java/util/logging/XMLFormatter.html
-
-http://developer.android.com/reference/java/util/logging/package-descr.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/LargeTest.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/MediumTest.html
-
-http://developer.android.com/reference/android/test/suitebuilder/annotation/SmallTest.html
-http://developer.android.com/reference/android/os/Process.html
-
-http://developer.android.com/reference/android/graphics/AvoidXfermode.html
-http://developer.android.com/reference/android/graphics/Bitmap.html
-
-http://developer.android.com/reference/android/graphics/BitmapFactory.html
-http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html
-
-http://developer.android.com/reference/android/graphics/BitmapShader.html
-http://developer.android.com/reference/android/graphics/BlurMaskFilter.html
-
-http://developer.android.com/reference/android/graphics/Camera.html
-http://developer.android.com/reference/android/graphics/Color.html
-
-http://developer.android.com/reference/android/graphics/ColorFilter.html
-http://developer.android.com/reference/android/graphics/ColorMatrix.html
-
-http://developer.android.com/reference/android/graphics/ColorMatrixColorFilter.html
-http://developer.android.com/reference/android/graphics/ComposePathEffect.html
-
-http://developer.android.com/reference/android/graphics/ComposeShader.html
-http://developer.android.com/reference/android/graphics/CornerPathEffect.html
-
-http://developer.android.com/reference/android/graphics/DashPathEffect.html
-http://developer.android.com/reference/android/graphics/DiscretePathEffect.html
-
-http://developer.android.com/reference/android/graphics/DrawFilter.html
-http://developer.android.com/reference/android/graphics/EmbossMaskFilter.html
-
-http://developer.android.com/reference/android/graphics/Interpolator.html
-http://developer.android.com/reference/android/graphics/LayerRasterizer.html
-
-http://developer.android.com/reference/android/graphics/LightingColorFilter.html
-http://developer.android.com/reference/android/graphics/LinearGradient.html
-
-http://developer.android.com/reference/android/graphics/MaskFilter.html
-http://developer.android.com/reference/android/graphics/Matrix.html
-
-http://developer.android.com/reference/android/graphics/Movie.html
-http://developer.android.com/reference/android/graphics/NinePatch.html
-
-http://developer.android.com/reference/android/graphics/Paint.html
-http://developer.android.com/reference/android/graphics/Paint.FontMetrics.html
-
-http://developer.android.com/reference/android/graphics/Paint.FontMetricsInt.html
-http://developer.android.com/reference/android/graphics/PaintFlagsDrawFilter.html
-
-http://developer.android.com/reference/android/graphics/Path.html
-http://developer.android.com/reference/android/graphics/PathDashPathEffect.html
-
-http://developer.android.com/reference/android/graphics/PathEffect.html
-http://developer.android.com/reference/android/graphics/PathMeasure.html
-
-http://developer.android.com/reference/android/graphics/Picture.html
-http://developer.android.com/reference/android/graphics/PixelFormat.html
-
-http://developer.android.com/reference/android/graphics/PixelXorXfermode.html
-http://developer.android.com/reference/android/graphics/Point.html
-
-http://developer.android.com/reference/android/graphics/PointF.html
-http://developer.android.com/reference/android/graphics/PorterDuff.html
-
-http://developer.android.com/reference/android/graphics/PorterDuffColorFilter.html
-http://developer.android.com/reference/android/graphics/PorterDuffXfermode.html
-
-http://developer.android.com/reference/android/graphics/RadialGradient.html
-http://developer.android.com/reference/android/graphics/Rasterizer.html
-
-http://developer.android.com/reference/android/graphics/Rect.html
-http://developer.android.com/reference/android/graphics/RectF.html
-
-http://developer.android.com/reference/android/graphics/Region.html
-http://developer.android.com/reference/android/graphics/RegionIterator.html
-
-http://developer.android.com/reference/android/graphics/Shader.html
-http://developer.android.com/reference/android/graphics/SumPathEffect.html
-
-http://developer.android.com/reference/android/graphics/SweepGradient.html
-http://developer.android.com/reference/android/graphics/Typeface.html
-
-http://developer.android.com/reference/android/graphics/Xfermode.html
-http://developer.android.com/reference/android/graphics/AvoidXfermode.Mode.html
-
-http://developer.android.com/reference/android/graphics/Bitmap.CompressFormat.html
-http://developer.android.com/reference/android/graphics/Bitmap.Config.html
-
-http://developer.android.com/reference/android/graphics/BlurMaskFilter.Blur.html
-http://developer.android.com/reference/android/graphics/Canvas.EdgeType.html
-
-http://developer.android.com/reference/android/graphics/Canvas.VertexMode.html
-http://developer.android.com/reference/android/graphics/Interpolator.Result.html
-
-http://developer.android.com/reference/android/graphics/Matrix.ScaleToFit.html
-http://developer.android.com/reference/android/graphics/Paint.Align.html
-
-http://developer.android.com/reference/android/graphics/Paint.Cap.html
-http://developer.android.com/reference/android/graphics/Paint.Join.html
-
-http://developer.android.com/reference/android/graphics/Paint.Style.html
-http://developer.android.com/reference/android/graphics/Path.Direction.html
-
-http://developer.android.com/reference/android/graphics/Path.FillType.html
-http://developer.android.com/reference/android/graphics/PathDashPathEffect.Style.html
-
-http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html
-http://developer.android.com/reference/android/graphics/Region.Op.html
-
-http://developer.android.com/reference/android/graphics/Shader.TileMode.html
-http://developer.android.com/reference/android/graphics/package-descr.html
-
-http://developer.android.com/reference/android/content/BroadcastReceiver.html
-http://developer.android.com/reference/org/apache/http/cookie/ClientCookie.html
-
-http://developer.android.com/reference/org/apache/http/cookie/Cookie.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieAttributeHandler.html
-
-http://developer.android.com/reference/org/apache/http/cookie/CookieSpec.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieSpecFactory.html
-
-http://developer.android.com/reference/org/apache/http/cookie/SetCookie.html
-http://developer.android.com/reference/org/apache/http/cookie/SetCookie2.html
-
-http://developer.android.com/reference/org/apache/http/cookie/SM.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieIdentityComparator.html
-
-http://developer.android.com/reference/org/apache/http/cookie/CookieOrigin.html
-http://developer.android.com/reference/org/apache/http/cookie/CookiePathComparator.html
-
-http://developer.android.com/reference/org/apache/http/cookie/CookieSpecRegistry.html
-http://developer.android.com/reference/org/apache/http/cookie/MalformedCookieException.html
-
-http://developer.android.com/reference/org/apache/http/cookie/package-descr.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractInterruptibleChannel.html
-
-http://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractSelectionKey.html
-
-http://developer.android.com/reference/java/nio/channels/spi/AbstractSelector.html
-http://developer.android.com/reference/java/nio/channels/spi/SelectorProvider.html
-
-http://developer.android.com/reference/java/nio/channels/spi/package-descr.html
-http://developer.android.com/reference/org/apache/http/client/AuthenticationHandler.html
-
-http://developer.android.com/reference/org/apache/http/client/HttpClient.html
-http://developer.android.com/reference/org/apache/http/client/UserTokenHandler.html
-
-http://developer.android.com/reference/org/apache/http/client/CircularRedirectException.html
-http://developer.android.com/reference/org/apache/http/client/ClientProtocolException.html
-
-http://developer.android.com/reference/org/apache/http/client/HttpResponseException.html
-http://developer.android.com/reference/org/apache/http/client/NonRepeatableRequestException.html
-
-http://developer.android.com/reference/org/apache/http/client/RedirectException.html
-http://developer.android.com/reference/org/apache/http/client/package-descr.html
-
-http://developer.android.com/reference/org/apache/http/HttpResponse.html
-http://developer.android.com/reference/java/util/prefs/NodeChangeListener.html
-
-http://developer.android.com/reference/java/util/prefs/PreferenceChangeListener.html
-http://developer.android.com/reference/java/util/prefs/PreferencesFactory.html
-
-http://developer.android.com/reference/java/util/prefs/AbstractPreferences.html
-http://developer.android.com/reference/java/util/prefs/NodeChangeEvent.html
-
-http://developer.android.com/reference/java/util/prefs/PreferenceChangeEvent.html
-http://developer.android.com/reference/java/util/prefs/Preferences.html
-
-http://developer.android.com/reference/java/util/prefs/BackingStoreException.html
-http://developer.android.com/reference/java/util/prefs/InvalidPreferencesFormatException.html
-
-http://developer.android.com/reference/java/util/prefs/package-descr.html
-http://developer.android.com/sdk/adt_download.html
-http://developer.android.com/reference/android/provider/BaseColumns.html
-
-http://developer.android.com/reference/android/provider/Contacts.ContactMethodsColumns.html
-http://developer.android.com/reference/android/provider/Contacts.ExtensionsColumns.html
-
-http://developer.android.com/reference/android/provider/Contacts.GroupsColumns.html
-http://developer.android.com/reference/android/provider/Contacts.OrganizationColumns.html
-
-http://developer.android.com/reference/android/provider/Contacts.PeopleColumns.html
-http://developer.android.com/reference/android/provider/Contacts.PhonesColumns.html
-
-http://developer.android.com/reference/android/provider/Contacts.PhotosColumns.html
-http://developer.android.com/reference/android/provider/Contacts.PresenceColumns.html
-
-http://developer.android.com/reference/android/provider/Contacts.SettingsColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.AlbumColumns.html
-
-http://developer.android.com/reference/android/provider/MediaStore.Audio.ArtistColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.AudioColumns.html
-
-http://developer.android.com/reference/android/provider/MediaStore.Audio.GenresColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.PlaylistsColumns.html
-
-http://developer.android.com/reference/android/provider/MediaStore.Images.ImageColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.MediaColumns.html
-
-http://developer.android.com/reference/android/provider/MediaStore.Video.VideoColumns.html
-http://developer.android.com/reference/android/provider/OpenableColumns.html
-
-http://developer.android.com/reference/android/provider/Browser.html
-http://developer.android.com/reference/android/provider/Browser.BookmarkColumns.html
-
-http://developer.android.com/reference/android/provider/Browser.SearchColumns.html
-http://developer.android.com/reference/android/provider/CallLog.html
-
-http://developer.android.com/reference/android/provider/CallLog.Calls.html
-http://developer.android.com/reference/android/provider/Contacts.html
-
-http://developer.android.com/reference/android/provider/Contacts.ContactMethods.html
-http://developer.android.com/reference/android/provider/Contacts.Extensions.html
-
-http://developer.android.com/reference/android/provider/Contacts.GroupMembership.html
-http://developer.android.com/reference/android/provider/Contacts.Groups.html
-
-http://developer.android.com/reference/android/provider/Contacts.Intents.html
-http://developer.android.com/reference/android/provider/Contacts.Intents.Insert.html
-
-http://developer.android.com/reference/android/provider/Contacts.Intents.UI.html
-http://developer.android.com/reference/android/provider/Contacts.Organizations.html
-
-http://developer.android.com/reference/android/provider/Contacts.People.html
-http://developer.android.com/reference/android/provider/Contacts.People.ContactMethods.html
-
-http://developer.android.com/reference/android/provider/Contacts.People.Extensions.html
-http://developer.android.com/reference/android/provider/Contacts.People.Phones.html
-
-http://developer.android.com/reference/android/provider/Contacts.Phones.html
-http://developer.android.com/reference/android/provider/Contacts.Photos.html
-
-http://developer.android.com/reference/android/provider/Contacts.Settings.html
-http://developer.android.com/reference/android/provider/MediaStore.html
-
-http://developer.android.com/reference/android/provider/MediaStore.Audio.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Albums.html
-
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Artists.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Artists.Albums.html
-
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Genres.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Genres.Members.html
-
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Media.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Playlists.html
-
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Playlists.Members.html
-
-http://developer.android.com/reference/android/provider/MediaStore.Images.html
-http://developer.android.com/reference/android/provider/MediaStore.Images.Media.html
-
-http://developer.android.com/reference/android/provider/MediaStore.Images.Thumbnails.html
-http://developer.android.com/reference/android/provider/MediaStore.Video.html
-
-http://developer.android.com/reference/android/provider/MediaStore.Video.Media.html
-http://developer.android.com/reference/android/provider/SearchRecentSuggestions.html
-
-http://developer.android.com/reference/android/provider/Settings.html
-http://developer.android.com/reference/android/provider/Settings.NameValueTable.html
-
-http://developer.android.com/reference/android/provider/Settings.System.html
-http://developer.android.com/reference/android/provider/Settings.SettingNotFoundException.html
-
-http://developer.android.com/reference/android/provider/package-descr.html
-http://developer.android.com/reference/android/content/SearchRecentSuggestionsProvider.html
-
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.ValueSanitizer.html
-http://developer.android.com/reference/android/net/ConnectivityManager.html
-
-http://developer.android.com/reference/android/net/Credentials.html
-http://developer.android.com/reference/android/net/DhcpInfo.html
-
-http://developer.android.com/reference/android/net/LocalServerSocket.html
-http://developer.android.com/reference/android/net/LocalSocket.html
-
-http://developer.android.com/reference/android/net/LocalSocketAddress.html
-http://developer.android.com/reference/android/net/MailTo.html
-
-http://developer.android.com/reference/android/net/NetworkInfo.html
-http://developer.android.com/reference/android/net/Proxy.html
-
-http://developer.android.com/reference/android/net/SSLCertificateSocketFactory.html
-http://developer.android.com/reference/android/net/Uri.html
-
-http://developer.android.com/reference/android/net/Uri.Builder.html
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.html
-
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.IllegalCharacterValueSanitizer.html
-
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.ParameterValuePair.html
-http://developer.android.com/reference/android/net/LocalSocketAddress.Namespace.html
-
-http://developer.android.com/reference/android/net/NetworkInfo.DetailedState.html
-http://developer.android.com/reference/android/net/NetworkInfo.State.html
-
-http://developer.android.com/reference/android/net/package-descr.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGL.html
-
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGL10.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGL11.html
-
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGLConfig.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGLContext.html
-
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGLDisplay.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGLSurface.html
-
-http://developer.android.com/reference/android/content/pm/PackageItemInfo.html
-http://developer.android.com/reference/org/apache/http/auth/params/AuthPNames.html
-
-http://developer.android.com/reference/org/apache/http/auth/params/AuthParamBean.html
-http://developer.android.com/reference/org/apache/http/auth/params/AuthParams.html
-
-http://developer.android.com/reference/org/apache/http/auth/params/package-descr.html
-http://developer.android.com/reference/org/apache/http/params/HttpParams.html
-
-http://developer.android.com/reference/java/lang/Object.html
-http://developer.android.com/reference/org/apache/http/conn/ConnectionKeepAliveStrategy.html
-
-http://developer.android.com/reference/org/apache/http/protocol/HttpContext.html
-http://developer.android.com/reference/java/lang/Class.html
-
-http://developer.android.com/reference/java/lang/String.html
-http://developer.android.com/reference/org/apache/http/ConnectionReuseStrategy.html
-
-http://developer.android.com/reference/org/xml/sax/ext/Attributes2.html
-http://developer.android.com/reference/org/xml/sax/ext/DeclHandler.html
-
-http://developer.android.com/reference/org/xml/sax/ext/EntityResolver2.html
-http://developer.android.com/reference/org/xml/sax/ext/LexicalHandler.html
-
-http://developer.android.com/reference/org/xml/sax/ext/Locator2.html
-http://developer.android.com/reference/org/xml/sax/ext/Attributes2Impl.html
-
-http://developer.android.com/reference/org/xml/sax/ext/DefaultHandler2.html
-http://developer.android.com/reference/org/xml/sax/ext/Locator2Impl.html
-
-http://developer.android.com/reference/org/xml/sax/ext/package-descr.html
-http://developer.android.com/reference/org/xml/sax/Attributes.html
-
-http://developer.android.com/reference/org/xml/sax/Locator.html
-http://developer.android.com/reference/android/content/pm/PackageManager.html
-
-http://developer.android.com/reference/org/apache/http/HttpHost.html
-
-http://developer.android.com/reference/org/apache/http/HttpException.html
-http://developer.android.com/reference/java/io/IOException.html
-
-http://developer.android.com/reference/javax/security/auth/x500/X500Principal.html
-http://developer.android.com/reference/javax/security/auth/x500/package-descr.html
-
-http://developer.android.com/reference/java/util/Date.html
-http://developer.android.com/reference/java/util/List.html
-
-http://developer.android.com/reference/android/sax/ElementListener.html
-http://developer.android.com/reference/android/sax/EndElementListener.html
-
-http://developer.android.com/reference/android/sax/EndTextElementListener.html
-http://developer.android.com/reference/android/sax/StartElementListener.html
-
-http://developer.android.com/reference/android/sax/TextElementListener.html
-http://developer.android.com/reference/android/sax/Element.html
-
-http://developer.android.com/reference/android/sax/RootElement.html
-http://developer.android.com/reference/android/sax/package-descr.html
-
-http://developer.android.com/reference/junit/runner/BaseTestRunner.html
-http://developer.android.com/reference/junit/framework/TestListener.html
-
-http://developer.android.com/reference/junit/framework/TestResult.html
-http://developer.android.com/reference/junit/framework/Test.html
-
-http://developer.android.com/reference/java/lang/Throwable.html
-http://developer.android.com/reference/junit/framework/AssertionFailedError.html
-
-http://developer.android.com/reference/junit/runner/TestSuiteLoader.html
-http://developer.android.com/reference/java/util/Properties.html
-
-http://developer.android.com/reference/java/lang/ClassNotFoundException.html
-http://developer.android.com/reference/org/apache/http/impl/io/AbstractMessageParser.html
-
-http://developer.android.com/reference/org/apache/http/impl/io/AbstractMessageWriter.html
-http://developer.android.com/reference/org/apache/http/impl/io/AbstractSessionInputBuffer.html
-
-http://developer.android.com/reference/org/apache/http/impl/io/AbstractSessionOutputBuffer.html
-
-http://developer.android.com/reference/org/apache/http/impl/io/ChunkedInputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/ChunkedOutputStream.html
-
-http://developer.android.com/reference/org/apache/http/impl/io/ContentLengthInputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/ContentLengthOutputStream.html
-
-http://developer.android.com/reference/org/apache/http/impl/io/HttpRequestParser.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpRequestWriter.html
-
-http://developer.android.com/reference/org/apache/http/impl/io/HttpResponseParser.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpResponseWriter.html
-
-http://developer.android.com/reference/org/apache/http/impl/io/HttpTransportMetricsImpl.html
-http://developer.android.com/reference/org/apache/http/impl/io/IdentityInputStream.html
-
-http://developer.android.com/reference/org/apache/http/impl/io/IdentityOutputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/SocketInputBuffer.html
-
-http://developer.android.com/reference/org/apache/http/impl/io/SocketOutputBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/io/package-descr.html
-
-http://developer.android.com/reference/java/io/InputStream.html
-http://developer.android.com/reference/java/io/OutputStream.html
-
-http://developer.android.com/reference/org/apache/http/io/HttpTransportMetrics.html
-http://developer.android.com/reference/org/apache/http/io/SessionInputBuffer.html
-
-http://developer.android.com/reference/junit/framework/Assert.html
-http://developer.android.com/reference/java/lang/IllegalAccessException.html
-
-http://developer.android.com/reference/java/lang/Exception.html
-http://developer.android.com/reference/java/util/jar/Pack200.Packer.html
-
-http://developer.android.com/reference/java/util/jar/Pack200.Unpacker.html
-http://developer.android.com/reference/java/util/jar/Attributes.html
-
-http://developer.android.com/reference/java/util/jar/Attributes.Name.html
-http://developer.android.com/reference/java/util/jar/JarEntry.html
-
-http://developer.android.com/reference/java/util/jar/JarFile.html
-http://developer.android.com/reference/java/util/jar/JarInputStream.html
-
-http://developer.android.com/reference/java/util/jar/JarOutputStream.html
-http://developer.android.com/reference/java/util/jar/Manifest.html
-
-http://developer.android.com/reference/java/util/jar/Pack200.html
-http://developer.android.com/reference/java/util/jar/JarException.html
-
-http://developer.android.com/reference/java/util/jar/package-descr.html
-http://developer.android.com/reference/android/view/View.MeasureSpec.html
-
-http://developer.android.com/guide/tutorials/views/hello-formstuff.html
-http://developer.android.com/reference/android/view/View.OnClickListener.html
-
-http://developer.android.com/reference/android/view/View.OnLongClickListener.html
-http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html
-
-http://developer.android.com/reference/android/view/View.OnKeyListener.html
-http://developer.android.com/reference/android/view/View.OnTouchListener.html
-
-http://developer.android.com/reference/android/view/View.OnCreateContextMenuListener.html
-http://developer.android.com/reference/android/view/ViewParent.html
-
-http://developer.android.com/reference/android/database/sqlite/SQLiteCursorDriver.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory.html
-
-http://developer.android.com/reference/android/database/sqlite/SQLiteClosable.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteCursor.html
-
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html
-
-http://developer.android.com/reference/android/database/sqlite/SQLiteProgram.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteQuery.html
-
-http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteStatement.html
-
-http://developer.android.com/reference/android/database/sqlite/SQLiteAbortException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteConstraintException.html
-
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatabaseCorruptException.html
-
-http://developer.android.com/reference/android/database/sqlite/SQLiteDiskIOException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDoneException.html
-
-http://developer.android.com/reference/android/database/sqlite/SQLiteException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteFullException.html
-
-http://developer.android.com/reference/android/database/sqlite/SQLiteMisuseException.html
-http://developer.android.com/reference/android/database/sqlite/package-descr.html
-
-http://developer.android.com/reference/android/database/Cursor.html
-http://developer.android.com/reference/java/lang/StackTraceElement.html
-
-http://developer.android.com/reference/java/io/PrintWriter.html
-http://developer.android.com/reference/java/io/PrintStream.html
-
-http://developer.android.com/reference/java/math/BigDecimal.html
-http://developer.android.com/reference/java/math/BigInteger.html
-
-http://developer.android.com/reference/java/math/MathContext.html
-http://developer.android.com/reference/java/math/RoundingMode.html
-
-http://developer.android.com/reference/java/math/package-descr.html
-http://developer.android.com/reference/dalvik/system/DexFile.html
-
-http://developer.android.com/reference/dalvik/system/PathClassLoader.html
-http://developer.android.com/reference/dalvik/system/TemporaryDirectory.html
-
-http://developer.android.com/reference/dalvik/system/TouchDex.html
-http://developer.android.com/reference/dalvik/system/VMDebug.html
-
-http://developer.android.com/reference/dalvik/system/VMRuntime.html
-http://developer.android.com/reference/dalvik/system/VMStack.html
-
-http://developer.android.com/reference/dalvik/system/Zygote.html
-http://developer.android.com/reference/dalvik/system/AllocationLimitError.html
-
-http://developer.android.com/reference/dalvik/system/PotentialDeadlockError.html
-http://developer.android.com/reference/dalvik/system/StaleDexCacheError.html
-
-http://developer.android.com/reference/org/apache/http/client/protocol/ClientContext.html
-http://developer.android.com/reference/org/apache/http/client/protocol/ClientContextConfigurer.html
-
-http://developer.android.com/reference/org/apache/http/client/protocol/RequestAddCookies.html
-
-http://developer.android.com/reference/org/apache/http/client/protocol/RequestDefaultHeaders.html
-
-http://developer.android.com/reference/org/apache/http/client/protocol/RequestProxyAuthentication.html
-
-http://developer.android.com/reference/org/apache/http/client/protocol/RequestTargetAuthentication.html
-
-http://developer.android.com/reference/org/apache/http/client/protocol/ResponseProcessCookies.html
-
-http://developer.android.com/reference/org/apache/http/client/protocol/package-descr.html
-http://developer.android.com/reference/android/graphics/drawable/Drawable.Callback.html
-
-http://developer.android.com/reference/android/graphics/drawable/ClipDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/ColorDrawable.html
-
-http://developer.android.com/reference/android/graphics/drawable/Drawable.ConstantState.html
-http://developer.android.com/reference/android/graphics/drawable/DrawableContainer.html
-
-http://developer.android.com/reference/android/graphics/drawable/DrawableContainer.DrawableContainerState.html
-
-http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/InsetDrawable.html
-
-http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/PaintDrawable.html
-
-http://developer.android.com/reference/android/graphics/drawable/RotateDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/ScaleDrawable.html
-
-http://developer.android.com/reference/android/graphics/drawable/ShapeDrawable.ShaderFactory.html
-
-http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/TransitionDrawable.html
-
-http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.Orientation.html
-
-http://developer.android.com/reference/java/lang/Runnable.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html
-
-http://developer.android.com/reference/android/util/AttributeSet.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlPullParserException.html
-
-http://developer.android.com/reference/java/util/EventListener.html
-http://developer.android.com/reference/android/app/AliasActivity.html
-
-http://developer.android.com/reference/java/lang/ref/PhantomReference.html
-http://developer.android.com/reference/java/lang/ref/Reference.html
-
-http://developer.android.com/reference/java/lang/ref/ReferenceQueue.html
-http://developer.android.com/reference/java/lang/ref/SoftReference.html
-
-http://developer.android.com/reference/java/lang/ref/WeakReference.html
-http://developer.android.com/reference/javax/xml/parsers/DocumentBuilder.html
-
-http://developer.android.com/reference/javax/xml/parsers/DocumentBuilderFactory.html
-http://developer.android.com/reference/javax/xml/parsers/SAXParser.html
-
-http://developer.android.com/reference/javax/xml/parsers/SAXParserFactory.html
-http://developer.android.com/reference/javax/xml/parsers/ParserConfigurationException.html
-
-http://developer.android.com/reference/javax/xml/parsers/FactoryConfigurationError.html
-http://developer.android.com/reference/javax/xml/parsers/package-descr.html
-
-http://developer.android.com/reference/android/app/DatePickerDialog.OnDateSetListener.html
-http://developer.android.com/reference/android/app/KeyguardManager.OnKeyguardExitResult.html
-
-http://developer.android.com/reference/android/app/PendingIntent.OnFinished.html
-http://developer.android.com/reference/android/app/SearchManager.OnCancelListener.html
-
-http://developer.android.com/reference/android/app/SearchManager.OnDismissListener.html
-http://developer.android.com/reference/android/app/TimePickerDialog.OnTimeSetListener.html
-
-http://developer.android.com/reference/android/app/ActivityGroup.html
-http://developer.android.com/reference/android/app/ActivityManager.html
-
-http://developer.android.com/reference/android/app/ActivityManager.MemoryInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.ProcessErrorStateInfo.html
-
-http://developer.android.com/reference/android/app/ActivityManager.RecentTaskInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RunningServiceInfo.html
-
-http://developer.android.com/reference/android/app/ActivityManager.RunningTaskInfo.html
-http://developer.android.com/reference/android/app/AlarmManager.html
-
-http://developer.android.com/reference/android/app/AlertDialog.html
-http://developer.android.com/reference/android/app/AlertDialog.Builder.html
-
-http://developer.android.com/reference/android/app/DatePickerDialog.html
-http://developer.android.com/reference/android/app/Dialog.html
-
-http://developer.android.com/reference/android/app/ExpandableListActivity.html
-http://developer.android.com/reference/android/app/Instrumentation.ActivityMonitor.html
-
-http://developer.android.com/reference/android/app/Instrumentation.ActivityResult.html
-http://developer.android.com/reference/android/app/KeyguardManager.html
-
-http://developer.android.com/reference/android/app/KeyguardManager.KeyguardLock.html
-http://developer.android.com/reference/android/app/LauncherActivity.html
-
-http://developer.android.com/reference/android/app/LocalActivityManager.html
-http://developer.android.com/reference/android/app/Notification.html
-
-http://developer.android.com/reference/android/app/NotificationManager.html
-http://developer.android.com/reference/android/app/PendingIntent.html
-
-http://developer.android.com/reference/android/app/ProgressDialog.html
-http://developer.android.com/reference/android/app/SearchManager.html
-
-http://developer.android.com/reference/android/app/TabActivity.html
-http://developer.android.com/reference/android/app/TimePickerDialog.html
-
-http://developer.android.com/reference/android/app/PendingIntent.CanceledException.html
-http://developer.android.com/reference/android/content/ContextWrapper.html
-
-http://developer.android.com/reference/android/view/ContextThemeWrapper.html
-http://developer.android.com/reference/android/widget/ListAdapter.html
-
-http://developer.android.com/reference/android/widget/SimpleAdapter.html
-http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html
-
-http://developer.android.com/reference/android/media/AudioManager.html
-http://developer.android.com/reference/android/text/ClipboardManager.html
-
-http://developer.android.com/reference/android/view/LayoutInflater.html
-http://developer.android.com/reference/android/location/LocationManager.html
-
-http://developer.android.com/reference/android/os/PowerManager.html
-http://developer.android.com/reference/android/hardware/SensorManager.html
-
-http://developer.android.com/reference/android/telephony/TelephonyManager.html
-http://developer.android.com/reference/android/os/Vibrator.html
-
-http://developer.android.com/reference/android/net/wifi/WifiManager.html
-http://developer.android.com/reference/android/view/WindowManager.html
-
-http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html
-http://developer.android.com/reference/android/view/KeyEvent.html
-
-http://developer.android.com/reference/android/view/MotionEvent.html
-http://developer.android.com/reference/android/content/ComponentName.html
-
-http://developer.android.com/reference/android/view/Window.html
-http://developer.android.com/reference/android/content/SharedPreferences.html
-
-http://developer.android.com/reference/java/lang/CharSequence.html
-http://developer.android.com/reference/android/content/res/Resources.Theme.html
-
-http://developer.android.com/reference/android/content/res/Configuration.html
-http://developer.android.com/reference/android/view/Window.Callback.html
-
-http://developer.android.com/reference/android/view/LayoutInflater.Factory.html
-http://developer.android.com/reference/android/view/KeyEvent.Callback.html
-
-http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html
-http://developer.android.com/reference/android/content/ServiceConnection.html
-
-http://developer.android.com/reference/java/lang/SecurityException.html
-http://developer.android.com/reference/android/content/res/AssetManager.html
-
-http://developer.android.com/reference/java/io/File.html
-http://developer.android.com/reference/java/lang/ClassLoader.html
-
-http://developer.android.com/reference/android/os/Looper.html
-http://developer.android.com/reference/java/io/FileInputStream.html
-
-http://developer.android.com/reference/java/io/FileOutputStream.html
-http://developer.android.com/reference/android/content/IntentFilter.html
-
-http://developer.android.com/reference/android/os/Handler.html
-http://developer.android.com/reference/java/util/Formatter.html
-
-http://developer.android.com/reference/android/content/res/TypedArray.html
-http://developer.android.com/reference/android/content/ComponentCallbacks.html
-
-http://developer.android.com/reference/android/view/animation/Animation.AnimationListener.html
-
-http://developer.android.com/reference/android/view/animation/AccelerateDecelerateInterpolator.html
-
-http://developer.android.com/reference/android/view/animation/AlphaAnimation.html
-http://developer.android.com/reference/android/view/animation/Animation.Description.html
-
-http://developer.android.com/reference/android/view/animation/AnimationUtils.html
-http://developer.android.com/reference/android/view/animation/CycleInterpolator.html
-
-http://developer.android.com/reference/android/view/animation/DecelerateInterpolator.html
-http://developer.android.com/reference/android/view/animation/GridLayoutAnimationController.html
-
-http://developer.android.com/reference/android/view/animation/GridLayoutAnimationController.AnimationParameters.html
-
-http://developer.android.com/reference/android/view/animation/LayoutAnimationController.html
-http://developer.android.com/reference/android/view/animation/LayoutAnimationController.AnimationParameters.html
-
-http://developer.android.com/reference/android/view/animation/LinearInterpolator.html
-http://developer.android.com/reference/android/view/animation/RotateAnimation.html
-
-http://developer.android.com/reference/android/view/animation/ScaleAnimation.html
-http://developer.android.com/reference/android/view/animation/Transformation.html
-
-http://developer.android.com/reference/android/view/animation/TranslateAnimation.html
-http://developer.android.com/reference/android/view/animation/package-descr.html
-
-http://developer.android.com/reference/android/os/IBinder.html
-http://developer.android.com/reference/android/os/IBinder.DeathRecipient.html
-
-http://developer.android.com/reference/android/os/IInterface.html
-http://developer.android.com/reference/android/os/MessageQueue.IdleHandler.html
-
-http://developer.android.com/reference/android/os/Parcelable.html
-http://developer.android.com/reference/android/os/Parcelable.Creator.html
-
-http://developer.android.com/reference/android/os/BatteryManager.html
-http://developer.android.com/reference/android/os/Binder.html
-
-http://developer.android.com/reference/android/os/Build.html
-http://developer.android.com/reference/android/os/Build.VERSION.html
-
-http://developer.android.com/reference/android/os/ConditionVariable.html
-http://developer.android.com/reference/android/os/CountDownTimer.html
-
-http://developer.android.com/reference/android/os/Debug.InstructionCount.html
-http://developer.android.com/reference/android/os/Debug.MemoryInfo.html
-
-http://developer.android.com/reference/android/os/Environment.html
-http://developer.android.com/reference/android/os/FileObserver.html
-
-http://developer.android.com/reference/android/os/HandlerThread.html
-http://developer.android.com/reference/android/os/MemoryFile.html
-
-http://developer.android.com/reference/android/os/Message.html
-http://developer.android.com/reference/android/os/MessageQueue.html
-
-http://developer.android.com/reference/android/os/Messenger.html
-http://developer.android.com/reference/android/os/Parcel.html
-
-http://developer.android.com/reference/android/os/ParcelFileDescriptor.html
-http://developer.android.com/reference/android/os/ParcelFileDescriptor.AutoCloseInputStream.html
-
-http://developer.android.com/reference/android/os/ParcelFileDescriptor.AutoCloseOutputStream.html
-
-http://developer.android.com/reference/android/os/PatternMatcher.html
-http://developer.android.com/reference/android/os/PowerManager.WakeLock.html
-
-http://developer.android.com/reference/android/os/RemoteCallbackList.html
-http://developer.android.com/reference/android/os/StatFs.html
-
-http://developer.android.com/reference/android/os/SystemClock.html
-http://developer.android.com/reference/android/os/TokenWatcher.html
-
-http://developer.android.com/reference/android/os/BadParcelableException.html
-http://developer.android.com/reference/android/os/DeadObjectException.html
-
-http://developer.android.com/reference/android/os/ParcelFormatException.html
-http://developer.android.com/reference/android/os/RemoteException.html
-
-http://developer.android.com/reference/java/lang/Cloneable.html
-http://developer.android.com/reference/java/lang/Byte.html
-
-http://developer.android.com/reference/java/util/ArrayList.html
-http://developer.android.com/reference/java/lang/Integer.html
-
-http://developer.android.com/reference/java/io/Serializable.html
-http://developer.android.com/reference/android/util/SparseArray.html
-
-http://developer.android.com/reference/java/util/Set.html
-http://developer.android.com/reference/java/nio/channels/DatagramChannel.html
-
-http://developer.android.com/reference/java/lang/IllegalArgumentException.html
-http://developer.android.com/reference/android/webkit/WebView.html
-
-http://developer.android.com/reference/android/hardware/Camera.html
-http://developer.android.com/reference/android/text/Spannable.html
-
-http://developer.android.com/reference/android/util/Log.html
-http://developer.android.com/reference/org/xml/sax/helpers/AttributeListImpl.html
-
-http://developer.android.com/reference/org/xml/sax/helpers/AttributesImpl.html
-http://developer.android.com/reference/org/xml/sax/helpers/DefaultHandler.html
-
-http://developer.android.com/reference/org/xml/sax/helpers/LocatorImpl.html
-http://developer.android.com/reference/org/xml/sax/helpers/NamespaceSupport.html
-
-http://developer.android.com/reference/org/xml/sax/helpers/ParserAdapter.html
-http://developer.android.com/reference/org/xml/sax/helpers/ParserFactory.html
-
-http://developer.android.com/reference/org/xml/sax/helpers/XMLFilterImpl.html
-http://developer.android.com/reference/org/xml/sax/helpers/XMLReaderAdapter.html
-
-http://developer.android.com/reference/org/xml/sax/helpers/XMLReaderFactory.html
-http://developer.android.com/reference/org/xml/sax/helpers/package-descr.html
-
-http://developer.android.com/reference/org/xml/sax/AttributeList.html
-http://developer.android.com/reference/org/xml/sax/Parser.html
-
-http://developer.android.com/reference/android/widget/AbsListView.OnScrollListener.html
-http://developer.android.com/reference/android/widget/AbsListView.RecyclerListener.html
-
-http://developer.android.com/reference/android/widget/Adapter.html
-http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html
-
-http://developer.android.com/reference/android/widget/AdapterView.OnItemLongClickListener.html
-
-http://developer.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html
-
-http://developer.android.com/reference/android/widget/AutoCompleteTextView.Validator.html
-http://developer.android.com/reference/android/widget/Checkable.html
-
-http://developer.android.com/reference/android/widget/CompoundButton.OnCheckedChangeListener.html
-
-http://developer.android.com/reference/android/widget/DatePicker.OnDateChangedListener.html
-http://developer.android.com/reference/android/widget/ExpandableListAdapter.html
-
-http://developer.android.com/reference/android/widget/ExpandableListView.OnChildClickListener.html
-
-http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupClickListener.html
-
-http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupCollapseListener.html
-
-http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupExpandListener.html
-
-http://developer.android.com/reference/android/widget/Filter.FilterListener.html
-http://developer.android.com/reference/android/widget/Filterable.html
-
-http://developer.android.com/reference/android/widget/FilterQueryProvider.html
-http://developer.android.com/reference/android/widget/MediaController.MediaPlayerControl.html
-
-http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.Tokenizer.html
-
-http://developer.android.com/reference/android/widget/RadioGroup.OnCheckedChangeListener.html
-
-http://developer.android.com/reference/android/widget/RatingBar.OnRatingBarChangeListener.html
-
-http://developer.android.com/reference/android/widget/SeekBar.OnSeekBarChangeListener.html
-http://developer.android.com/reference/android/widget/SimpleAdapter.ViewBinder.html
-
-http://developer.android.com/reference/android/widget/SimpleCursorAdapter.CursorToStringConverter.html
-
-http://developer.android.com/reference/android/widget/SimpleCursorAdapter.ViewBinder.html
-http://developer.android.com/reference/android/widget/SpinnerAdapter.html
-
-http://developer.android.com/reference/android/widget/TabHost.OnTabChangeListener.html
-http://developer.android.com/reference/android/widget/TabHost.TabContentFactory.html
-
-http://developer.android.com/reference/android/widget/TimePicker.OnTimeChangedListener.html
-http://developer.android.com/reference/android/widget/ViewSwitcher.ViewFactory.html
-
-http://developer.android.com/reference/android/widget/WrapperListAdapter.html
-http://developer.android.com/reference/android/widget/AbsListView.html
-
-http://developer.android.com/reference/android/widget/AbsListView.LayoutParams.html
-http://developer.android.com/reference/android/widget/AbsoluteLayout.LayoutParams.html
-
-http://developer.android.com/reference/android/widget/AbsSeekBar.html
-http://developer.android.com/reference/android/widget/AbsSpinner.html
-
-http://developer.android.com/reference/android/widget/AdapterView.html
-http://developer.android.com/reference/android/widget/AnalogClock.html
-
-http://developer.android.com/reference/android/widget/ArrayAdapter.html
-http://developer.android.com/reference/android/widget/BaseAdapter.html
-
-http://developer.android.com/reference/android/widget/BaseExpandableListAdapter.html
-http://developer.android.com/reference/android/widget/CheckedTextView.html
-
-http://developer.android.com/reference/android/widget/Chronometer.html
-http://developer.android.com/reference/android/widget/CompoundButton.html
-
-http://developer.android.com/reference/android/widget/CursorAdapter.html
-http://developer.android.com/reference/android/widget/CursorTreeAdapter.html
-
-http://developer.android.com/reference/android/widget/DatePicker.html
-http://developer.android.com/reference/android/widget/DialerFilter.html
-
-http://developer.android.com/reference/android/widget/DigitalClock.html
-http://developer.android.com/reference/android/widget/ExpandableListView.html
-
-http://developer.android.com/reference/android/widget/ExpandableListView.ExpandableListContextMenuInfo.html
-
-http://developer.android.com/reference/android/widget/Filter.html
-http://developer.android.com/reference/android/widget/Filter.FilterResults.html
-
-http://developer.android.com/reference/android/widget/FrameLayout.LayoutParams.html
-http://developer.android.com/reference/android/widget/Gallery.LayoutParams.html
-
-http://developer.android.com/reference/android/widget/GridView.html
-http://developer.android.com/reference/android/widget/HeaderViewListAdapter.html
-
-http://developer.android.com/reference/android/widget/ImageButton.html
-http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html
-
-http://developer.android.com/reference/android/widget/ListView.FixedViewInfo.html
-http://developer.android.com/reference/android/widget/MediaController.html
-
-http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.html
-http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.CommaTokenizer.html
-
-http://developer.android.com/reference/android/widget/PopupWindow.html
-http://developer.android.com/reference/android/widget/ProgressBar.html
-
-http://developer.android.com/reference/android/widget/RadioGroup.html
-http://developer.android.com/reference/android/widget/RadioGroup.LayoutParams.html
-
-http://developer.android.com/reference/android/widget/RatingBar.html
-http://developer.android.com/reference/android/widget/RelativeLayout.html
-
-http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html
-http://developer.android.com/reference/android/widget/RemoteViews.html
-
-http://developer.android.com/reference/android/widget/ResourceCursorAdapter.html
-http://developer.android.com/reference/android/widget/ResourceCursorTreeAdapter.html
-
-http://developer.android.com/reference/android/widget/Scroller.html
-http://developer.android.com/reference/android/widget/ScrollView.html
-
-http://developer.android.com/reference/android/widget/SeekBar.html
-http://developer.android.com/reference/android/widget/SimpleCursorTreeAdapter.html
-
-http://developer.android.com/reference/android/widget/SimpleExpandableListAdapter.html
-http://developer.android.com/reference/android/widget/TabHost.html
-
-http://developer.android.com/reference/android/widget/TabHost.TabSpec.html
-http://developer.android.com/reference/android/widget/TableLayout.html
-
-http://developer.android.com/reference/android/widget/TableLayout.LayoutParams.html
-http://developer.android.com/reference/android/widget/TableRow.html
-
-http://developer.android.com/reference/android/widget/TableRow.LayoutParams.html
-http://developer.android.com/reference/android/widget/TabWidget.html
-
-http://developer.android.com/reference/android/widget/TextView.SavedState.html
-http://developer.android.com/reference/android/widget/TimePicker.html
-
-http://developer.android.com/reference/android/widget/Toast.html
-http://developer.android.com/reference/android/widget/ToggleButton.html
-
-http://developer.android.com/reference/android/widget/TwoLineListItem.html
-http://developer.android.com/reference/android/widget/VideoView.html
-
-http://developer.android.com/reference/android/widget/ViewAnimator.html
-http://developer.android.com/reference/android/widget/ViewFlipper.html
-
-http://developer.android.com/reference/android/widget/ViewSwitcher.html
-http://developer.android.com/reference/android/widget/ZoomButton.html
-
-http://developer.android.com/reference/android/widget/ZoomControls.html
-http://developer.android.com/reference/android/widget/ImageView.ScaleType.html
-
-http://developer.android.com/reference/android/widget/TextView.BufferType.html
-http://developer.android.com/reference/android/widget/RemoteViews.ActionException.html
-
-http://developer.android.com/reference/java/lang/RuntimeException.html
-http://developer.android.com/reference/android/view/ViewGroup.OnHierarchyChangeListener.html
-
-http://developer.android.com/reference/android/view/TouchDelegate.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.html
-
-http://developer.android.com/reference/android/view/ViewManager.html
-http://developer.android.com/reference/android/view/Gravity.html
-
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL.html
-http://developer.android.com/reference/java/awt/font/NumericShaper.html
-
-http://developer.android.com/reference/java/awt/font/TextAttribute.html
-http://developer.android.com/reference/android/text/TextWatcher.html
-
-http://developer.android.com/reference/android/text/method/MovementMethod.html
-http://developer.android.com/reference/android/text/TextUtils.TruncateAt.html
-
-http://developer.android.com/reference/android/text/InputFilter.html
-http://developer.android.com/reference/android/content/res/ColorStateList.html
-
-http://developer.android.com/reference/android/text/method/KeyListener.html
-http://developer.android.com/reference/android/text/Layout.html
-
-http://developer.android.com/reference/android/text/method/LinkMovementMethod.html
-http://developer.android.com/reference/android/text/TextPaint.html
-
-http://developer.android.com/reference/android/text/Selection.html
-http://developer.android.com/reference/android/text/method/TransformationMethod.html
-
-http://developer.android.com/reference/android/text/style/URLSpan.html
-http://developer.android.com/reference/android/text/util/Linkify.html
-
-http://developer.android.com/reference/android/text/Editable.Factory.html
-http://developer.android.com/reference/android/text/Spannable.Factory.html
-
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnPreDrawListener.html
-http://developer.android.com/reference/java/security/BasicPermission.html
-
-http://developer.android.com/reference/java/security/Guard.html
-http://developer.android.com/reference/java/security/Permission.html
-
-http://developer.android.com/reference/java/security/PermissionCollection.html
-http://developer.android.com/reference/java/util/Locale.html
-
-http://developer.android.com/reference/java/lang/NullPointerException.html
-http://developer.android.com/reference/org/apache/http/FormattedHeader.html
-
-http://developer.android.com/reference/org/apache/http/Header.html
-http://developer.android.com/reference/org/apache/http/HeaderElement.html
-
-http://developer.android.com/reference/org/apache/http/HeaderElementIterator.html
-http://developer.android.com/reference/org/apache/http/HeaderIterator.html
-
-http://developer.android.com/reference/org/apache/http/HttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/HttpConnection.html
-
-http://developer.android.com/reference/org/apache/http/HttpConnectionMetrics.html
-http://developer.android.com/reference/org/apache/http/HttpEntity.html
-
-http://developer.android.com/reference/org/apache/http/HttpInetConnection.html
-http://developer.android.com/reference/org/apache/http/HttpMessage.html
-
-http://developer.android.com/reference/org/apache/http/HttpRequestFactory.html
-http://developer.android.com/reference/org/apache/http/HttpRequestInterceptor.html
-
-http://developer.android.com/reference/org/apache/http/HttpResponseFactory.html
-http://developer.android.com/reference/org/apache/http/HttpResponseInterceptor.html
-
-http://developer.android.com/reference/org/apache/http/HttpServerConnection.html
-http://developer.android.com/reference/org/apache/http/HttpStatus.html
-
-http://developer.android.com/reference/org/apache/http/NameValuePair.html
-http://developer.android.com/reference/org/apache/http/ReasonPhraseCatalog.html
-
-http://developer.android.com/reference/org/apache/http/RequestLine.html
-http://developer.android.com/reference/org/apache/http/StatusLine.html
-
-http://developer.android.com/reference/org/apache/http/TokenIterator.html
-http://developer.android.com/reference/org/apache/http/HttpVersion.html
-
-http://developer.android.com/reference/org/apache/http/ProtocolVersion.html
-http://developer.android.com/reference/org/apache/http/ConnectionClosedException.html
-
-http://developer.android.com/reference/org/apache/http/MalformedChunkCodingException.html
-http://developer.android.com/reference/org/apache/http/MethodNotSupportedException.html
-
-http://developer.android.com/reference/org/apache/http/NoHttpResponseException.html
-http://developer.android.com/reference/org/apache/http/ParseException.html
-
-http://developer.android.com/reference/org/apache/http/ProtocolException.html
-http://developer.android.com/reference/org/apache/http/UnsupportedHttpVersionException.html
-
-http://developer.android.com/reference/org/apache/http/impl/DefaultConnectionReuseStrategy.html
-
-http://developer.android.com/reference/org/apache/http/impl/NoConnectionReuseStrategy.html
-http://developer.android.com/reference/java/lang/Enum.html
-
-http://developer.android.com/reference/java/lang/Comparable.html
-http://developer.android.com/reference/javax/crypto/SecretKey.html
-
-http://developer.android.com/reference/javax/crypto/Cipher.html
-http://developer.android.com/reference/javax/crypto/CipherInputStream.html
-
-http://developer.android.com/reference/javax/crypto/CipherOutputStream.html
-http://developer.android.com/reference/javax/crypto/CipherSpi.html
-
-http://developer.android.com/reference/javax/crypto/EncryptedPrivateKeyInfo.html
-http://developer.android.com/reference/javax/crypto/ExemptionMechanism.html
-
-http://developer.android.com/reference/javax/crypto/ExemptionMechanismSpi.html
-http://developer.android.com/reference/javax/crypto/KeyAgreement.html
-
-http://developer.android.com/reference/javax/crypto/KeyAgreementSpi.html
-http://developer.android.com/reference/javax/crypto/KeyGenerator.html
-
-http://developer.android.com/reference/javax/crypto/KeyGeneratorSpi.html
-http://developer.android.com/reference/javax/crypto/Mac.html
-
-http://developer.android.com/reference/javax/crypto/MacSpi.html
-http://developer.android.com/reference/javax/crypto/NullCipher.html
-
-http://developer.android.com/reference/javax/crypto/SealedObject.html
-http://developer.android.com/reference/javax/crypto/SecretKeyFactory.html
-
-http://developer.android.com/reference/javax/crypto/SecretKeyFactorySpi.html
-http://developer.android.com/reference/javax/crypto/BadPaddingException.html
-
-http://developer.android.com/reference/javax/crypto/ExemptionMechanismException.html
-http://developer.android.com/reference/javax/crypto/IllegalBlockSizeException.html
-
-http://developer.android.com/reference/javax/crypto/NoSuchPaddingException.html
-http://developer.android.com/reference/javax/crypto/ShortBufferException.html
-
-http://developer.android.com/reference/javax/crypto/package-descr.html
-http://developer.android.com/reference/android/database/CrossProcessCursor.html
-
-http://developer.android.com/reference/android/database/AbstractCursor.html
-http://developer.android.com/reference/android/database/AbstractCursor.SelfContentObserver.html
-
-http://developer.android.com/reference/android/database/AbstractWindowedCursor.html
-http://developer.android.com/reference/android/database/CharArrayBuffer.html
-
-http://developer.android.com/reference/android/database/ContentObservable.html
-http://developer.android.com/reference/android/database/ContentObserver.html
-
-http://developer.android.com/reference/android/database/CursorJoiner.html
-http://developer.android.com/reference/android/database/CursorWindow.html
-
-http://developer.android.com/reference/android/database/CursorWrapper.html
-http://developer.android.com/reference/android/database/DatabaseUtils.html
-
-http://developer.android.com/reference/android/database/DatabaseUtils.InsertHelper.html
-http://developer.android.com/reference/android/database/DataSetObservable.html
-
-http://developer.android.com/reference/android/database/DataSetObserver.html
-http://developer.android.com/reference/android/database/MatrixCursor.html
-
-http://developer.android.com/reference/android/database/MatrixCursor.RowBuilder.html
-http://developer.android.com/reference/android/database/MergeCursor.html
-
-http://developer.android.com/reference/android/database/Observable.html
-http://developer.android.com/reference/android/database/CursorJoiner.Result.html
-
-http://developer.android.com/reference/android/database/CursorIndexOutOfBoundsException.html
-http://developer.android.com/reference/android/database/SQLException.html
-
-http://developer.android.com/reference/android/database/StaleDataException.html
-http://developer.android.com/reference/android/database/package-descr.html
-
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionManager.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionManagerFactory.html
-
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionOperator.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionRequest.html
-
-http://developer.android.com/reference/org/apache/http/conn/ConnectionReleaseTrigger.html
-http://developer.android.com/reference/org/apache/http/conn/EofSensorWatcher.html
-
-http://developer.android.com/reference/org/apache/http/conn/ManagedClientConnection.html
-http://developer.android.com/reference/org/apache/http/conn/OperatedClientConnection.html
-
-http://developer.android.com/reference/org/apache/http/conn/BasicEofSensorWatcher.html
-http://developer.android.com/reference/org/apache/http/conn/BasicManagedEntity.html
-
-http://developer.android.com/reference/org/apache/http/conn/EofSensorInputStream.html
-http://developer.android.com/reference/org/apache/http/conn/MultihomePlainSocketFactory.html
-
-http://developer.android.com/reference/org/apache/http/conn/ConnectionPoolTimeoutException.html
-
-http://developer.android.com/reference/org/apache/http/conn/ConnectTimeoutException.html
-http://developer.android.com/reference/org/apache/http/conn/HttpHostConnectException.html
-
-http://developer.android.com/reference/java/nio/charset/Charset.html
-http://developer.android.com/reference/java/nio/charset/CharsetDecoder.html
-
-http://developer.android.com/reference/java/nio/charset/CharsetEncoder.html
-http://developer.android.com/reference/java/nio/charset/CoderResult.html
-
-http://developer.android.com/reference/java/nio/charset/CodingErrorAction.html
-http://developer.android.com/reference/java/nio/charset/CharacterCodingException.html
-
-http://developer.android.com/reference/java/nio/charset/IllegalCharsetNameException.html
-http://developer.android.com/reference/java/nio/charset/MalformedInputException.html
-
-http://developer.android.com/reference/java/nio/charset/UnmappableCharacterException.html
-http://developer.android.com/reference/java/nio/charset/UnsupportedCharsetException.html
-
-http://developer.android.com/reference/java/nio/charset/CoderMalfunctionError.html
-http://developer.android.com/reference/java/nio/charset/package-descr.html
-
-http://developer.android.com/reference/com/google/android/maps/MapView.html
-http://developer.android.com/reference/com/google/android/maps/MapActivity.html
-
-http://developer.android.com/guide/topics/location/geo/mapkey.html
-http://developer.android.com/reference/com/google/android/maps/MapController.html
-
-http://developer.android.com/reference/com/google/android/maps/ItemizedOverlay.html
-http://developer.android.com/reference/com/google/android/maps/Overlay.html
-
-http://developer.android.com/reference/java/lang/CloneNotSupportedException.html
-http://developer.android.com/reference/java/security/AlgorithmParameters.html
-
-http://developer.android.com/reference/java/security/spec/PKCS8EncodedKeySpec.html
-http://developer.android.com/reference/java/security/Key.html
-
-http://developer.android.com/reference/java/security/Provider.html
-http://developer.android.com/reference/java/security/NoSuchAlgorithmException.html
-
-http://developer.android.com/reference/java/security/NoSuchProviderException.html
-http://developer.android.com/reference/java/security/InvalidKeyException.html
-
-http://developer.android.com/reference/java/security/spec/InvalidKeySpecException.html
-http://developer.android.com/reference/android/webkit/DownloadListener.html
-
-http://developer.android.com/reference/android/webkit/Plugin.PreferencesClickHandler.html
-http://developer.android.com/reference/android/webkit/UrlInterceptHandler.html
-
-http://developer.android.com/reference/android/webkit/WebIconDatabase.IconListener.html
-http://developer.android.com/reference/android/webkit/WebView.PictureListener.html
-
-http://developer.android.com/reference/android/webkit/CacheManager.html
-http://developer.android.com/reference/android/webkit/CacheManager.CacheResult.html
-
-http://developer.android.com/reference/android/webkit/CookieManager.html
-http://developer.android.com/reference/android/webkit/CookieSyncManager.html
-
-http://developer.android.com/reference/android/webkit/DateSorter.html
-http://developer.android.com/reference/android/webkit/HttpAuthHandler.html
-
-http://developer.android.com/reference/android/webkit/JsPromptResult.html
-http://developer.android.com/reference/android/webkit/JsResult.html
-
-http://developer.android.com/reference/android/webkit/MimeTypeMap.html
-http://developer.android.com/reference/android/webkit/Plugin.html
-
-http://developer.android.com/reference/android/webkit/PluginList.html
-http://developer.android.com/reference/android/webkit/SslErrorHandler.html
-
-http://developer.android.com/reference/android/webkit/UrlInterceptRegistry.html
-http://developer.android.com/reference/android/webkit/URLUtil.html
-
-http://developer.android.com/reference/android/webkit/WebBackForwardList.html
-http://developer.android.com/reference/android/webkit/WebChromeClient.html
-
-http://developer.android.com/reference/android/webkit/WebHistoryItem.html
-http://developer.android.com/reference/android/webkit/WebIconDatabase.html
-
-http://developer.android.com/reference/android/webkit/WebSettings.html
-http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html
-
-http://developer.android.com/reference/android/webkit/WebView.WebViewTransport.html
-http://developer.android.com/reference/android/webkit/WebViewClient.html
-
-http://developer.android.com/reference/android/webkit/WebViewDatabase.html
-http://developer.android.com/reference/android/webkit/WebSettings.LayoutAlgorithm.html
-
-http://developer.android.com/reference/android/webkit/WebSettings.RenderPriority.html
-http://developer.android.com/reference/android/webkit/WebSettings.TextSize.html
-
-http://developer.android.com/reference/android/webkit/package-descr.html
-http://developer.android.com/reference/java/util/Map.html
-
-http://developer.android.com/reference/android/graphics/drawable/shapes/ArcShape.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/PathShape.html
-
-http://developer.android.com/reference/android/graphics/drawable/shapes/RectShape.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/RoundRectShape.html
-
-http://developer.android.com/reference/android/graphics/drawable/shapes/Shape.html
-http://developer.android.com/reference/android/graphics/drawable/package-descr.html
-
-http://developer.android.com/reference/java/lang/IndexOutOfBoundsException.html
-http://developer.android.com/reference/android/content/pm/ActivityInfo.html
-
-http://developer.android.com/reference/java/lang/InstantiationException.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceView.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceViewActivity.html
-
-http://developer.android.com/reference/java/util/concurrent/BlockingQueue.html
-http://developer.android.com/reference/java/util/concurrent/Callable.html
-
-http://developer.android.com/reference/java/util/concurrent/CompletionService.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentMap.html
-
-http://developer.android.com/reference/java/util/concurrent/Delayed.html
-http://developer.android.com/reference/java/util/concurrent/Executor.html
-
-http://developer.android.com/reference/java/util/concurrent/ExecutorService.html
-http://developer.android.com/reference/java/util/concurrent/Future.html
-
-http://developer.android.com/reference/java/util/concurrent/RejectedExecutionHandler.html
-http://developer.android.com/reference/java/util/concurrent/ScheduledExecutorService.html
-
-http://developer.android.com/reference/java/util/concurrent/ScheduledFuture.html
-http://developer.android.com/reference/java/util/concurrent/ThreadFactory.html
-
-http://developer.android.com/reference/java/util/concurrent/AbstractExecutorService.html
-http://developer.android.com/reference/java/util/concurrent/ArrayBlockingQueue.html
-
-http://developer.android.com/reference/java/util/concurrent/ConcurrentHashMap.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentLinkedQueue.html
-
-http://developer.android.com/reference/java/util/concurrent/CopyOnWriteArrayList.html
-http://developer.android.com/reference/java/util/concurrent/CopyOnWriteArraySet.html
-
-http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html
-http://developer.android.com/reference/java/util/concurrent/CyclicBarrier.html
-
-http://developer.android.com/reference/java/util/concurrent/DelayQueue.html
-http://developer.android.com/reference/java/util/concurrent/Exchanger.html
-
-http://developer.android.com/reference/java/util/concurrent/ExecutorCompletionService.html
-http://developer.android.com/reference/java/util/concurrent/Executors.html
-
-http://developer.android.com/reference/java/util/concurrent/FutureTask.html
-http://developer.android.com/reference/java/util/concurrent/LinkedBlockingQueue.html
-
-http://developer.android.com/reference/java/util/concurrent/PriorityBlockingQueue.html
-http://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html
-
-http://developer.android.com/reference/java/util/concurrent/Semaphore.html
-http://developer.android.com/reference/java/util/concurrent/SynchronousQueue.html
-
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.AbortPolicy.html
-
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.CallerRunsPolicy.html
-
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.DiscardOldestPolicy.html
-
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.DiscardPolicy.html
-
-http://developer.android.com/reference/java/util/concurrent/TimeUnit.html
-http://developer.android.com/reference/java/util/concurrent/BrokenBarrierException.html
-
-http://developer.android.com/reference/java/util/concurrent/CancellationException.html
-http://developer.android.com/reference/java/util/concurrent/ExecutionException.html
-
-http://developer.android.com/reference/java/util/concurrent/RejectedExecutionException.html
-http://developer.android.com/reference/java/util/concurrent/TimeoutException.html
-
-http://developer.android.com/reference/java/util/concurrent/package-descr.html
-http://developer.android.com/reference/java/util/Queue.html
-
-http://developer.android.com/reference/java/util/PriorityQueue.html
-http://developer.android.com/reference/android/telephony/CellLocation.html
-
-http://developer.android.com/reference/android/telephony/PhoneNumberFormattingTextWatcher.html
-
-http://developer.android.com/reference/android/telephony/PhoneNumberUtils.html
-http://developer.android.com/reference/android/telephony/PhoneStateListener.html
-
-http://developer.android.com/reference/android/telephony/ServiceState.html
-http://developer.android.com/reference/java/lang/Appendable.html
-
-http://developer.android.com/reference/java/lang/Iterable.html
-http://developer.android.com/reference/java/lang/Readable.html
-
-http://developer.android.com/reference/java/lang/Thread.UncaughtExceptionHandler.html
-http://developer.android.com/reference/java/lang/Boolean.html
-
-http://developer.android.com/reference/java/lang/Character.html
-http://developer.android.com/reference/java/lang/Character.Subset.html
-
-http://developer.android.com/reference/java/lang/Character.UnicodeBlock.html
-http://developer.android.com/reference/java/lang/Compiler.html
-
-http://developer.android.com/reference/java/lang/Double.html
-http://developer.android.com/reference/java/lang/Float.html
-
-http://developer.android.com/reference/java/lang/InheritableThreadLocal.html
-http://developer.android.com/reference/java/lang/Long.html
-
-http://developer.android.com/reference/java/lang/Math.html
-http://developer.android.com/reference/java/lang/Number.html
-
-http://developer.android.com/reference/java/lang/Package.html
-http://developer.android.com/reference/java/lang/Process.html
-
-http://developer.android.com/reference/java/lang/ProcessBuilder.html
-http://developer.android.com/reference/java/lang/Runtime.html
-
-http://developer.android.com/reference/java/lang/RuntimePermission.html
-http://developer.android.com/reference/java/lang/SecurityManager.html
-
-http://developer.android.com/reference/java/lang/Short.html
-http://developer.android.com/reference/java/lang/StrictMath.html
-
-http://developer.android.com/reference/java/lang/StringBuffer.html
-http://developer.android.com/reference/java/lang/StringBuilder.html
-
-http://developer.android.com/reference/java/lang/System.html
-http://developer.android.com/reference/java/lang/Thread.html
-
-http://developer.android.com/reference/java/lang/ThreadGroup.html
-http://developer.android.com/reference/java/lang/ThreadLocal.html
-
-http://developer.android.com/reference/java/lang/Void.html
-http://developer.android.com/reference/java/lang/Thread.State.html
-
-http://developer.android.com/reference/java/lang/ArithmeticException.html
-http://developer.android.com/reference/java/lang/ArrayIndexOutOfBoundsException.html
-
-http://developer.android.com/reference/java/lang/ArrayStoreException.html
-http://developer.android.com/reference/java/lang/ClassCastException.html
-
-http://developer.android.com/reference/java/lang/EnumConstantNotPresentException.html
-http://developer.android.com/reference/java/lang/IllegalMonitorStateException.html
-
-http://developer.android.com/reference/java/lang/IllegalStateException.html
-http://developer.android.com/reference/java/lang/IllegalThreadStateException.html
-
-http://developer.android.com/reference/java/lang/InterruptedException.html
-http://developer.android.com/reference/java/lang/NegativeArraySizeException.html
-
-http://developer.android.com/reference/java/lang/NoSuchFieldException.html
-http://developer.android.com/reference/java/lang/NoSuchMethodException.html
-
-http://developer.android.com/reference/java/lang/NumberFormatException.html
-http://developer.android.com/reference/java/lang/StringIndexOutOfBoundsException.html
-
-http://developer.android.com/reference/java/lang/TypeNotPresentException.html
-http://developer.android.com/reference/java/lang/UnsupportedOperationException.html
-
-http://developer.android.com/reference/java/lang/AbstractMethodError.html
-http://developer.android.com/reference/java/lang/AssertionError.html
-
-http://developer.android.com/reference/java/lang/ClassCircularityError.html
-http://developer.android.com/reference/java/lang/ClassFormatError.html
-
-http://developer.android.com/reference/java/lang/Error.html
-http://developer.android.com/reference/java/lang/ExceptionInInitializerError.html
-
-http://developer.android.com/reference/java/lang/IllegalAccessError.html
-http://developer.android.com/reference/java/lang/IncompatibleClassChangeError.html
-
-http://developer.android.com/reference/java/lang/InstantiationError.html
-http://developer.android.com/reference/java/lang/InternalError.html
-
-http://developer.android.com/reference/java/lang/LinkageError.html
-http://developer.android.com/reference/java/lang/NoClassDefFoundError.html
-
-http://developer.android.com/reference/java/lang/NoSuchFieldError.html
-http://developer.android.com/reference/java/lang/NoSuchMethodError.html
-
-http://developer.android.com/reference/java/lang/OutOfMemoryError.html
-http://developer.android.com/reference/java/lang/StackOverflowError.html
-
-http://developer.android.com/reference/java/lang/ThreadDeath.html
-http://developer.android.com/reference/java/lang/UnknownError.html
-
-http://developer.android.com/reference/java/lang/UnsatisfiedLinkError.html
-http://developer.android.com/reference/java/lang/UnsupportedClassVersionError.html
-
-http://developer.android.com/reference/java/lang/VerifyError.html
-http://developer.android.com/reference/java/lang/VirtualMachineError.html
-
-http://developer.android.com/reference/java/nio/ByteBuffer.html
-http://developer.android.com/reference/java/util/Calendar.html
-
-http://developer.android.com/reference/java/nio/CharBuffer.html
-http://developer.android.com/reference/android/preference/CheckBoxPreference.html
-
-http://developer.android.com/reference/java/sql/Date.html
-http://developer.android.com/reference/android/preference/DialogPreference.html
-
-http://developer.android.com/reference/java/nio/DoubleBuffer.html
-http://developer.android.com/reference/android/preference/EditTextPreference.html
-
-http://developer.android.com/reference/java/lang/annotation/ElementType.html
-http://developer.android.com/reference/java/nio/FloatBuffer.html
-
-http://developer.android.com/reference/java/util/Formatter.BigDecimalLayoutForm.html
-http://developer.android.com/reference/java/util/GregorianCalendar.html
-
-http://developer.android.com/reference/java/nio/IntBuffer.html
-http://developer.android.com/reference/java/security/KeyRep.Type.html
-
-http://developer.android.com/reference/android/text/Layout.Alignment.html
-http://developer.android.com/reference/android/preference/ListPreference.html
-
-http://developer.android.com/reference/java/nio/LongBuffer.html
-http://developer.android.com/reference/com/google/android/maps/MapView.ReticleDrawMode.html
-
-http://developer.android.com/reference/java/nio/MappedByteBuffer.html
-http://developer.android.com/reference/java/io/ObjectStreamField.html
-
-http://developer.android.com/reference/android/preference/Preference.html
-http://developer.android.com/reference/android/preference/PreferenceCategory.html
-
-http://developer.android.com/reference/android/preference/PreferenceGroup.html
-http://developer.android.com/reference/android/preference/PreferenceScreen.html
-
-http://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html
-http://developer.android.com/reference/android/preference/RingtonePreference.html
-
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.LayerType.html
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.TunnelType.html
-
-http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.HandshakeStatus.html
-http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.Status.html
-
-http://developer.android.com/reference/java/nio/ShortBuffer.html
-http://developer.android.com/reference/android/telephony/gsm/SmsMessage.MessageClass.html
-
-http://developer.android.com/reference/android/net/wifi/SupplicantState.html
-http://developer.android.com/reference/android/text/method/TextKeyListener.Capitalize.html
-
-http://developer.android.com/reference/java/sql/Time.html
-http://developer.android.com/reference/java/sql/Timestamp.html
-
-http://developer.android.com/reference/java/util/UUID.html
-http://developer.android.com/reference/android/view/ViewDebug.HierarchyTraceType.html
-
-http://developer.android.com/reference/android/view/ViewDebug.RecyclerTraceType.html
-http://developer.android.com/reference/android/util/Xml.Encoding.html
-
-http://developer.android.com/reference/org/apache/http/impl/auth/NTLMEngine.html
-http://developer.android.com/reference/org/apache/http/impl/auth/AuthSchemeBase.html
-
-http://developer.android.com/reference/org/apache/http/impl/auth/BasicScheme.html
-http://developer.android.com/reference/org/apache/http/impl/auth/BasicSchemeFactory.html
-
-http://developer.android.com/reference/org/apache/http/impl/auth/DigestScheme.html
-http://developer.android.com/reference/org/apache/http/impl/auth/DigestSchemeFactory.html
-
-http://developer.android.com/reference/org/apache/http/impl/auth/NTLMScheme.html
-http://developer.android.com/reference/org/apache/http/impl/auth/RFC2617Scheme.html
-
-http://developer.android.com/reference/org/apache/http/impl/auth/NTLMEngineException.html
-http://developer.android.com/reference/org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.html
-
-http://developer.android.com/reference/android/preference/Preference.OnPreferenceChangeListener.html
-
-http://developer.android.com/reference/android/preference/Preference.OnPreferenceClickListener.html
-
-http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityDestroyListener.html
-
-http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityResultListener.html
-
-http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityStopListener.html
-
-http://developer.android.com/reference/android/preference/Preference.BaseSavedState.html
-http://developer.android.com/reference/android/preference/PreferenceManager.html
-
-http://developer.android.com/reference/android/util/Printer.html
-http://developer.android.com/reference/android/util/Config.html
-
-http://developer.android.com/reference/android/util/DebugUtils.html
-http://developer.android.com/reference/android/util/DisplayMetrics.html
-
-http://developer.android.com/reference/android/util/EventLogTags.html
-http://developer.android.com/reference/android/util/EventLogTags.Description.html
-
-http://developer.android.com/reference/android/util/FloatMath.html
-http://developer.android.com/reference/android/util/LogPrinter.html
-
-http://developer.android.com/reference/android/util/MonthDisplayHelper.html
-http://developer.android.com/reference/android/util/PrintWriterPrinter.html
-
-http://developer.android.com/reference/android/util/SparseBooleanArray.html
-http://developer.android.com/reference/android/util/SparseIntArray.html
-
-http://developer.android.com/reference/android/util/StateSet.html
-http://developer.android.com/reference/android/util/StringBuilderPrinter.html
-
-http://developer.android.com/reference/android/util/TimeUtils.html
-http://developer.android.com/reference/android/util/TimingLogger.html
-
-http://developer.android.com/reference/android/util/TypedValue.html
-http://developer.android.com/reference/android/util/Xml.html
-
-http://developer.android.com/reference/android/util/AndroidException.html
-http://developer.android.com/reference/android/util/AndroidRuntimeException.html
-
-http://developer.android.com/reference/android/util/TimeFormatException.html
-http://developer.android.com/reference/android/content/res/XmlResourceParser.html
-
-http://developer.android.com/reference/javax/net/ssl/SSLSocketFactory.html
-http://developer.android.com/reference/javax/net/SocketFactory.html
-
-http://developer.android.com/reference/java/security/KeyManagementException.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeader.html
-
-http://developer.android.com/reference/org/apache/http/message/BufferedHeader.html
-http://developer.android.com/reference/android/view/GestureDetector.OnGestureListener.html
-
-http://developer.android.com/reference/android/view/LayoutInflater.Filter.html
-http://developer.android.com/reference/android/view/MenuItem.OnMenuItemClickListener.html
-
-http://developer.android.com/reference/android/view/SurfaceHolder.html
-http://developer.android.com/reference/android/view/SurfaceHolder.Callback.html
-
-http://developer.android.com/reference/android/view/ViewStub.OnInflateListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalFocusChangeListener.html
-
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalLayoutListener.html
-
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnTouchModeChangeListener.html
-
-http://developer.android.com/reference/android/view/AbsSavedState.html
-http://developer.android.com/reference/android/view/Display.html
-
-http://developer.android.com/reference/android/view/FocusFinder.html
-http://developer.android.com/reference/android/view/GestureDetector.html
-
-http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html
-
-http://developer.android.com/reference/android/view/KeyCharacterMap.html
-http://developer.android.com/reference/android/view/KeyCharacterMap.KeyData.html
-
-http://developer.android.com/reference/android/view/OrientationListener.html
-http://developer.android.com/reference/android/view/SoundEffectConstants.html
-
-http://developer.android.com/reference/android/view/Surface.html
-http://developer.android.com/reference/android/view/VelocityTracker.html
-
-http://developer.android.com/reference/android/view/View.BaseSavedState.html
-http://developer.android.com/reference/android/view/ViewConfiguration.html
-
-http://developer.android.com/reference/android/view/ViewDebug.html
-http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html
-
-http://developer.android.com/reference/android/view/ViewStub.html
-http://developer.android.com/reference/android/view/InflateException.html
-
-http://developer.android.com/reference/android/view/Surface.OutOfResourcesException.html
-http://developer.android.com/reference/android/view/SurfaceHolder.BadSurfaceTypeException.html
-
-http://developer.android.com/reference/android/view/WindowManager.BadTokenException.html
-http://developer.android.com/reference/org/apache/http/entity/AbstractHttpEntity.html
-
-http://developer.android.com/reference/org/apache/http/entity/BasicHttpEntity.html
-http://developer.android.com/reference/org/apache/http/entity/BufferedHttpEntity.html
-
-http://developer.android.com/reference/org/apache/http/entity/ByteArrayEntity.html
-http://developer.android.com/reference/org/apache/http/entity/EntityTemplate.html
-
-http://developer.android.com/reference/org/apache/http/entity/FileEntity.html
-http://developer.android.com/reference/org/apache/http/entity/HttpEntityWrapper.html
-
-http://developer.android.com/reference/org/apache/http/entity/InputStreamEntity.html
-http://developer.android.com/reference/org/apache/http/entity/SerializableEntity.html
-
-http://developer.android.com/reference/org/apache/http/entity/StringEntity.html
-http://developer.android.com/reference/org/apache/http/client/entity/UrlEncodedFormEntity.html
-
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicInteger.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLong.html
-
-http://developer.android.com/reference/java/util/Collection.html
-http://developer.android.com/reference/java/util/Comparator.html
-
-http://developer.android.com/reference/java/util/Enumeration.html
-http://developer.android.com/reference/java/util/Formattable.html
-
-http://developer.android.com/reference/java/util/Iterator.html
-http://developer.android.com/reference/java/util/ListIterator.html
-
-http://developer.android.com/reference/java/util/Map.Entry.html
-http://developer.android.com/reference/java/util/Observer.html
-
-http://developer.android.com/reference/java/util/RandomAccess.html
-http://developer.android.com/reference/java/util/SortedMap.html
-
-http://developer.android.com/reference/java/util/SortedSet.html
-http://developer.android.com/reference/java/util/AbstractCollection.html
-
-http://developer.android.com/reference/java/util/AbstractList.html
-http://developer.android.com/reference/java/util/AbstractMap.html
-
-http://developer.android.com/reference/java/util/AbstractQueue.html
-http://developer.android.com/reference/java/util/AbstractSequentialList.html
-
-http://developer.android.com/reference/java/util/AbstractSet.html
-http://developer.android.com/reference/java/util/Arrays.html
-
-http://developer.android.com/reference/java/util/BitSet.html
-http://developer.android.com/reference/java/util/Collections.html
-
-http://developer.android.com/reference/java/util/Currency.html
-http://developer.android.com/reference/java/util/Dictionary.html
-
-http://developer.android.com/reference/java/util/EnumMap.html
-http://developer.android.com/reference/java/util/EnumSet.html
-
-http://developer.android.com/reference/java/util/EventListenerProxy.html
-http://developer.android.com/reference/java/util/EventObject.html
-
-http://developer.android.com/reference/java/util/FormattableFlags.html
-http://developer.android.com/reference/java/util/HashMap.html
-
-http://developer.android.com/reference/java/util/HashSet.html
-http://developer.android.com/reference/java/util/Hashtable.html
-
-http://developer.android.com/reference/java/util/IdentityHashMap.html
-http://developer.android.com/reference/java/util/LinkedHashMap.html
-
-http://developer.android.com/reference/java/util/LinkedHashSet.html
-http://developer.android.com/reference/java/util/LinkedList.html
-
-http://developer.android.com/reference/java/util/ListResourceBundle.html
-http://developer.android.com/reference/java/util/Observable.html
-
-http://developer.android.com/reference/java/util/PropertyPermission.html
-http://developer.android.com/reference/java/util/PropertyResourceBundle.html
-
-http://developer.android.com/reference/java/util/Random.html
-http://developer.android.com/reference/java/util/ResourceBundle.html
-
-http://developer.android.com/reference/java/util/Scanner.html
-http://developer.android.com/reference/java/util/SimpleTimeZone.html
-
-http://developer.android.com/reference/java/util/Stack.html
-http://developer.android.com/reference/java/util/StringTokenizer.html
-
-http://developer.android.com/reference/java/util/Timer.html
-http://developer.android.com/reference/java/util/TimerTask.html
-
-http://developer.android.com/reference/java/util/TimeZone.html
-http://developer.android.com/reference/java/util/TreeMap.html
-
-http://developer.android.com/reference/java/util/TreeSet.html
-http://developer.android.com/reference/java/util/Vector.html
-
-http://developer.android.com/reference/java/util/WeakHashMap.html
-http://developer.android.com/reference/java/util/ConcurrentModificationException.html
-
-http://developer.android.com/reference/java/util/DuplicateFormatFlagsException.html
-http://developer.android.com/reference/java/util/EmptyStackException.html
-
-http://developer.android.com/reference/java/util/FormatFlagsConversionMismatchException.html
-http://developer.android.com/reference/java/util/FormatterClosedException.html
-
-http://developer.android.com/reference/java/util/IllegalFormatCodePointException.html
-http://developer.android.com/reference/java/util/IllegalFormatConversionException.html
-
-http://developer.android.com/reference/java/util/IllegalFormatException.html
-http://developer.android.com/reference/java/util/IllegalFormatFlagsException.html
-
-http://developer.android.com/reference/java/util/IllegalFormatPrecisionException.html
-http://developer.android.com/reference/java/util/IllegalFormatWidthException.html
-
-http://developer.android.com/reference/java/util/InputMismatchException.html
-http://developer.android.com/reference/java/util/InvalidPropertiesFormatException.html
-
-http://developer.android.com/reference/java/util/MissingFormatArgumentException.html
-http://developer.android.com/reference/java/util/MissingFormatWidthException.html
-
-http://developer.android.com/reference/java/util/MissingResourceException.html
-http://developer.android.com/reference/java/util/NoSuchElementException.html
-
-http://developer.android.com/reference/java/util/TooManyListenersException.html
-http://developer.android.com/reference/java/util/UnknownFormatConversionException.html
-
-http://developer.android.com/reference/java/util/UnknownFormatFlagsException.html
-http://developer.android.com/reference/org/apache/http/impl/EnglishReasonPhraseCatalog.html
-
-http://developer.android.com/reference/org/apache/http/params/CoreConnectionPNames.html
-http://developer.android.com/reference/org/apache/http/params/CoreProtocolPNames.html
-
-http://developer.android.com/reference/org/apache/http/params/AbstractHttpParams.html
-http://developer.android.com/reference/org/apache/http/params/BasicHttpParams.html
-
-http://developer.android.com/reference/org/apache/http/params/DefaultedHttpParams.html
-http://developer.android.com/reference/org/apache/http/params/HttpAbstractParamBean.html
-
-http://developer.android.com/reference/org/apache/http/params/HttpConnectionParamBean.html
-http://developer.android.com/reference/org/apache/http/params/HttpConnectionParams.html
-
-http://developer.android.com/reference/org/apache/http/params/HttpProtocolParamBean.html
-http://developer.android.com/reference/org/apache/http/params/HttpProtocolParams.html
-
-http://developer.android.com/reference/org/apache/http/params/package-descr.html
-http://developer.android.com/reference/org/apache/http/io/SessionOutputBuffer.html
-
-http://developer.android.com/reference/org/apache/http/util/CharArrayBuffer.html
-http://developer.android.com/reference/android/content/res/AssetFileDescriptor.html
-
-http://developer.android.com/reference/android/content/res/AssetManager.AssetInputStream.html
-
-http://developer.android.com/reference/android/content/res/Resources.NotFoundException.html
-http://developer.android.com/reference/java/util/zip/ZipEntry.html
-
-http://developer.android.com/reference/java/security/cert/Certificate.html
-http://developer.android.com/reference/java/security/CodeSigner.html
-
-http://developer.android.com/reference/org/apache/http/auth/AuthSchemeFactory.html
-http://developer.android.com/reference/org/apache/http/auth/AuthScheme.html
-
-http://developer.android.com/reference/android/content/SharedPreferences.Editor.html
-http://developer.android.com/reference/android/media/RingtoneManager.html
-
-http://developer.android.com/reference/android/content/DialogInterface.html
-http://developer.android.com/reference/android/content/DialogInterface.OnClickListener.html
-
-http://developer.android.com/reference/android/content/DialogInterface.OnDismissListener.html
-
-http://developer.android.com/reference/org/apache/http/conn/routing/HttpRouteDirector.html
-http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoutePlanner.html
-
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.html
-http://developer.android.com/reference/org/apache/http/conn/routing/BasicRouteDirector.html
-
-http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoute.html
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteTracker.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultClientConnectionOperator.html
-
-http://developer.android.com/reference/org/apache/http/conn/scheme/SocketFactory.html
-http://developer.android.com/reference/java/nio/channels/Channel.html
-
-http://developer.android.com/reference/org/apache/http/message/LineParser.html
-http://developer.android.com/reference/org/apache/http/io/HttpMessageParser.html
-
-http://developer.android.com/reference/java/security/AuthProvider.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicClientCookie.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicClientCookie2.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderElement.html
-
-http://developer.android.com/reference/org/apache/http/protocol/BasicHttpProcessor.html
-http://developer.android.com/reference/org/apache/http/message/BasicNameValuePair.html
-
-http://developer.android.com/reference/org/apache/http/message/BasicRequestLine.html
-http://developer.android.com/reference/org/apache/http/message/BasicStatusLine.html
-
-http://developer.android.com/reference/java/security/cert/CRLSelector.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilderResult.html
-
-http://developer.android.com/reference/java/security/cert/CertPathParameters.html
-http://developer.android.com/reference/java/security/cert/CertPathValidatorResult.html
-
-http://developer.android.com/reference/java/security/cert/CertSelector.html
-http://developer.android.com/reference/java/security/cert/CertStoreParameters.html
-
-http://developer.android.com/reference/java/security/cert/CollectionCertStoreParameters.html
-http://developer.android.com/reference/org/apache/http/message/HeaderGroup.html
-
-http://developer.android.com/reference/org/apache/http/client/methods/HttpDelete.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpEntityEnclosingRequestBase.html
-
-http://developer.android.com/reference/org/apache/http/client/methods/HttpGet.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpHead.html
-
-http://developer.android.com/reference/org/apache/http/client/methods/HttpOptions.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpPost.html
-
-http://developer.android.com/reference/org/apache/http/client/methods/HttpPut.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpRequestBase.html
-
-http://developer.android.com/reference/org/apache/http/client/methods/HttpTrace.html
-http://developer.android.com/reference/java/security/cert/LDAPCertStoreParameters.html
-
-http://developer.android.com/reference/java/security/cert/PKIXBuilderParameters.html
-http://developer.android.com/reference/java/security/cert/PKIXCertPathBuilderResult.html
-
-http://developer.android.com/reference/java/security/cert/PKIXCertPathChecker.html
-http://developer.android.com/reference/java/security/cert/PKIXCertPathValidatorResult.html
-
-http://developer.android.com/reference/java/security/cert/PKIXParameters.html
-http://developer.android.com/reference/java/security/cert/X509CRLSelector.html
-
-http://developer.android.com/reference/java/security/cert/X509CertSelector.html
-http://developer.android.com/reference/android/text/Editable.html
-http://developer.android.com/reference/java/security/spec/AlgorithmParameterSpec.html
-
-http://developer.android.com/reference/java/security/SecureRandom.html
-http://developer.android.com/reference/javax/net/ssl/HandshakeCompletedListener.html
-
-http://developer.android.com/reference/javax/net/ssl/HostnameVerifier.html
-http://developer.android.com/reference/javax/net/ssl/KeyManager.html
-
-http://developer.android.com/reference/javax/net/ssl/ManagerFactoryParameters.html
-http://developer.android.com/reference/javax/net/ssl/SSLSession.html
-
-http://developer.android.com/reference/javax/net/ssl/SSLSessionBindingListener.html
-http://developer.android.com/reference/javax/net/ssl/SSLSessionContext.html
-
-http://developer.android.com/reference/javax/net/ssl/TrustManager.html
-http://developer.android.com/reference/javax/net/ssl/X509KeyManager.html
-
-http://developer.android.com/reference/javax/net/ssl/X509TrustManager.html
-http://developer.android.com/reference/javax/net/ssl/CertPathTrustManagerParameters.html
-
-http://developer.android.com/reference/javax/net/ssl/HandshakeCompletedEvent.html
-http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html
-
-http://developer.android.com/reference/javax/net/ssl/KeyManagerFactory.html
-http://developer.android.com/reference/javax/net/ssl/KeyManagerFactorySpi.html
-
-http://developer.android.com/reference/javax/net/ssl/KeyStoreBuilderParameters.html
-http://developer.android.com/reference/javax/net/ssl/SSLContext.html
-
-http://developer.android.com/reference/javax/net/ssl/SSLContextSpi.html
-http://developer.android.com/reference/javax/net/ssl/SSLEngine.html
-
-http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.html
-http://developer.android.com/reference/javax/net/ssl/SSLPermission.html
-
-http://developer.android.com/reference/javax/net/ssl/SSLServerSocket.html
-http://developer.android.com/reference/javax/net/ssl/SSLServerSocketFactory.html
-
-http://developer.android.com/reference/javax/net/ssl/SSLSessionBindingEvent.html
-http://developer.android.com/reference/javax/net/ssl/SSLSocket.html
-
-http://developer.android.com/reference/javax/net/ssl/TrustManagerFactory.html
-http://developer.android.com/reference/javax/net/ssl/TrustManagerFactorySpi.html
-
-http://developer.android.com/reference/javax/net/ssl/X509ExtendedKeyManager.html
-http://developer.android.com/reference/javax/net/ssl/SSLException.html
-
-http://developer.android.com/reference/javax/net/ssl/SSLHandshakeException.html
-http://developer.android.com/reference/javax/net/ssl/SSLKeyException.html
-
-http://developer.android.com/reference/javax/net/ssl/SSLPeerUnverifiedException.html
-http://developer.android.com/reference/javax/net/ssl/SSLProtocolException.html
-
-http://developer.android.com/reference/javax/crypto/spec/DESedeKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/DESKeySpec.html
-
-http://developer.android.com/reference/javax/crypto/spec/DHGenParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/DHParameterSpec.html
-
-http://developer.android.com/reference/javax/crypto/spec/DHPrivateKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/DHPublicKeySpec.html
-
-http://developer.android.com/reference/javax/crypto/spec/IvParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/OAEPParameterSpec.html
-
-http://developer.android.com/reference/javax/crypto/spec/PBEKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/PBEParameterSpec.html
-
-http://developer.android.com/reference/javax/crypto/spec/PSource.html
-http://developer.android.com/reference/javax/crypto/spec/PSource.PSpecified.html
-
-http://developer.android.com/reference/javax/crypto/spec/RC2ParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/RC5ParameterSpec.html
-
-http://developer.android.com/reference/javax/crypto/spec/SecretKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/package-descr.html
-
-http://developer.android.com/reference/android/text/method/ArrowKeyMovementMethod.html
-http://developer.android.com/reference/android/text/method/BaseKeyListener.html
-
-http://developer.android.com/reference/android/text/method/CharacterPickerDialog.html
-http://developer.android.com/reference/android/text/method/DateKeyListener.html
-
-http://developer.android.com/reference/android/text/method/DateTimeKeyListener.html
-http://developer.android.com/reference/android/text/method/DialerKeyListener.html
-
-http://developer.android.com/reference/android/text/method/DigitsKeyListener.html
-http://developer.android.com/reference/android/text/method/HideReturnsTransformationMethod.html
-
-http://developer.android.com/reference/android/text/method/MetaKeyKeyListener.html
-http://developer.android.com/reference/android/text/method/MultiTapKeyListener.html
-
-http://developer.android.com/reference/android/text/method/NumberKeyListener.html
-http://developer.android.com/reference/android/text/method/PasswordTransformationMethod.html
-
-http://developer.android.com/reference/android/text/method/QwertyKeyListener.html
-http://developer.android.com/reference/android/text/method/ReplacementTransformationMethod.html
-
-http://developer.android.com/reference/android/text/method/ScrollingMovementMethod.html
-http://developer.android.com/reference/android/text/method/SingleLineTransformationMethod.html
-
-http://developer.android.com/reference/android/text/method/TextKeyListener.html
-http://developer.android.com/reference/android/text/method/TimeKeyListener.html
-
-http://developer.android.com/reference/android/text/method/Touch.html
-http://developer.android.com/reference/android/location/Address.html
-
-http://developer.android.com/reference/android/content/pm/ApplicationInfo.html
-http://developer.android.com/reference/android/location/Criteria.html
-
-http://developer.android.com/reference/android/content/pm/InstrumentationInfo.html
-http://developer.android.com/reference/android/content/Intent.ShortcutIconResource.html
-
-http://developer.android.com/reference/android/location/Location.html
-http://developer.android.com/reference/android/content/pm/PackageInfo.html
-
-http://developer.android.com/reference/android/content/pm/PackageStats.html
-http://developer.android.com/reference/android/content/pm/PermissionGroupInfo.html
-
-http://developer.android.com/reference/android/content/pm/PermissionInfo.html
-http://developer.android.com/reference/android/content/pm/ProviderInfo.html
-
-http://developer.android.com/reference/android/content/pm/ResolveInfo.html
-http://developer.android.com/reference/android/net/wifi/ScanResult.html
-
-http://developer.android.com/reference/android/content/pm/ServiceInfo.html
-http://developer.android.com/reference/android/content/pm/Signature.html
-
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.html
-http://developer.android.com/reference/android/net/wifi/WifiInfo.html
-
-http://developer.android.com/reference/java/io/FileDescriptor.html
-http://developer.android.com/reference/java/security/SecureClassLoader.html
-
-http://developer.android.com/reference/java/security/ProtectionDomain.html
-http://developer.android.com/reference/java/io/Closeable.html
-
-http://developer.android.com/reference/java/io/DataInput.html
-http://developer.android.com/reference/java/io/DataOutput.html
-
-http://developer.android.com/reference/java/io/Externalizable.html
-http://developer.android.com/reference/java/io/FileFilter.html
-
-http://developer.android.com/reference/java/io/FilenameFilter.html
-http://developer.android.com/reference/java/io/Flushable.html
-
-http://developer.android.com/reference/java/io/ObjectInput.html
-http://developer.android.com/reference/java/io/ObjectInputValidation.html
-
-http://developer.android.com/reference/java/io/ObjectOutput.html
-http://developer.android.com/reference/java/io/ObjectStreamConstants.html
-
-http://developer.android.com/reference/java/io/BufferedInputStream.html
-http://developer.android.com/reference/java/io/BufferedOutputStream.html
-
-http://developer.android.com/reference/java/io/BufferedReader.html
-http://developer.android.com/reference/java/io/BufferedWriter.html
-
-http://developer.android.com/reference/java/io/ByteArrayInputStream.html
-http://developer.android.com/reference/java/io/ByteArrayOutputStream.html
-
-http://developer.android.com/reference/java/io/CharArrayReader.html
-http://developer.android.com/reference/java/io/CharArrayWriter.html
-
-http://developer.android.com/reference/java/io/DataInputStream.html
-http://developer.android.com/reference/java/io/DataOutputStream.html
-
-http://developer.android.com/reference/java/io/FilePermission.html
-http://developer.android.com/reference/java/io/FileReader.html
-
-http://developer.android.com/reference/java/io/FileWriter.html
-http://developer.android.com/reference/java/io/FilterInputStream.html
-
-http://developer.android.com/reference/java/io/FilterOutputStream.html
-http://developer.android.com/reference/java/io/FilterReader.html
-
-http://developer.android.com/reference/java/io/FilterWriter.html
-http://developer.android.com/reference/java/io/InputStreamReader.html
-
-http://developer.android.com/reference/java/io/LineNumberInputStream.html
-http://developer.android.com/reference/java/io/LineNumberReader.html
-
-http://developer.android.com/reference/java/io/ObjectInputStream.html
-http://developer.android.com/reference/java/io/ObjectInputStream.GetField.html
-
-http://developer.android.com/reference/java/io/ObjectOutputStream.html
-http://developer.android.com/reference/java/io/ObjectOutputStream.PutField.html
-
-http://developer.android.com/reference/java/io/ObjectStreamClass.html
-http://developer.android.com/reference/java/io/OutputStreamWriter.html
-
-http://developer.android.com/reference/java/io/PipedInputStream.html
-http://developer.android.com/reference/java/io/PipedOutputStream.html
-
-http://developer.android.com/reference/java/io/PipedReader.html
-http://developer.android.com/reference/java/io/PipedWriter.html
-
-http://developer.android.com/reference/java/io/PushbackInputStream.html
-http://developer.android.com/reference/java/io/PushbackReader.html
-
-http://developer.android.com/reference/java/io/RandomAccessFile.html
-http://developer.android.com/reference/java/io/Reader.html
-
-http://developer.android.com/reference/java/io/SequenceInputStream.html
-http://developer.android.com/reference/java/io/SerializablePermission.html
-
-http://developer.android.com/reference/java/io/StreamTokenizer.html
-http://developer.android.com/reference/java/io/StringBufferInputStream.html
-
-http://developer.android.com/reference/java/io/StringReader.html
-http://developer.android.com/reference/java/io/StringWriter.html
-
-http://developer.android.com/reference/java/io/Writer.html
-http://developer.android.com/reference/java/io/CharConversionException.html
-
-http://developer.android.com/reference/java/io/EOFException.html
-http://developer.android.com/reference/java/io/FileNotFoundException.html
-
-http://developer.android.com/reference/java/io/InterruptedIOException.html
-http://developer.android.com/reference/java/io/InvalidClassException.html
-
-http://developer.android.com/reference/java/io/InvalidObjectException.html
-http://developer.android.com/reference/java/io/NotActiveException.html
-
-http://developer.android.com/reference/java/io/NotSerializableException.html
-http://developer.android.com/reference/java/io/ObjectStreamException.html
-
-http://developer.android.com/reference/java/io/OptionalDataException.html
-http://developer.android.com/reference/java/io/StreamCorruptedException.html
-
-http://developer.android.com/reference/java/io/SyncFailedException.html
-http://developer.android.com/reference/java/io/UnsupportedEncodingException.html
-
-http://developer.android.com/reference/java/io/UTFDataFormatException.html
-http://developer.android.com/reference/java/io/WriteAbortedException.html
-
-http://developer.android.com/reference/org/apache/http/entity/ContentLengthStrategy.html
-http://developer.android.com/reference/org/apache/http/entity/ContentProducer.html
-
-http://developer.android.com/reference/java/security/Certificate.html
-http://developer.android.com/reference/java/security/DomainCombiner.html
-
-http://developer.android.com/reference/java/security/KeyStore.Entry.html
-http://developer.android.com/reference/java/security/KeyStore.LoadStoreParameter.html
-
-http://developer.android.com/reference/java/security/KeyStore.ProtectionParameter.html
-http://developer.android.com/reference/java/security/Principal.html
-
-http://developer.android.com/reference/java/security/PrivateKey.html
-http://developer.android.com/reference/java/security/PrivilegedAction.html
-
-http://developer.android.com/reference/java/security/PrivilegedExceptionAction.html
-http://developer.android.com/reference/java/security/PublicKey.html
-
-http://developer.android.com/reference/java/security/AccessControlContext.html
-http://developer.android.com/reference/java/security/AccessController.html
-
-http://developer.android.com/reference/java/security/AlgorithmParameterGenerator.html
-http://developer.android.com/reference/java/security/AlgorithmParameterGeneratorSpi.html
-
-http://developer.android.com/reference/java/security/AlgorithmParametersSpi.html
-http://developer.android.com/reference/java/security/AllPermission.html
-
-http://developer.android.com/reference/java/security/CodeSource.html
-http://developer.android.com/reference/java/security/DigestInputStream.html
-
-http://developer.android.com/reference/java/security/DigestOutputStream.html
-http://developer.android.com/reference/java/security/GuardedObject.html
-
-http://developer.android.com/reference/java/security/Identity.html
-http://developer.android.com/reference/java/security/IdentityScope.html
-
-http://developer.android.com/reference/java/security/KeyFactory.html
-http://developer.android.com/reference/java/security/KeyFactorySpi.html
-
-http://developer.android.com/reference/java/security/KeyPair.html
-http://developer.android.com/reference/java/security/KeyPairGenerator.html
-
-http://developer.android.com/reference/java/security/KeyPairGeneratorSpi.html
-http://developer.android.com/reference/java/security/KeyRep.html
-
-http://developer.android.com/reference/java/security/KeyStore.html
-http://developer.android.com/reference/java/security/KeyStore.Builder.html
-
-http://developer.android.com/reference/java/security/KeyStore.CallbackHandlerProtection.html
-http://developer.android.com/reference/java/security/KeyStore.PasswordProtection.html
-
-http://developer.android.com/reference/java/security/KeyStore.PrivateKeyEntry.html
-http://developer.android.com/reference/java/security/KeyStore.SecretKeyEntry.html
-
-http://developer.android.com/reference/java/security/KeyStore.TrustedCertificateEntry.html
-http://developer.android.com/reference/java/security/KeyStoreSpi.html
-
-http://developer.android.com/reference/java/security/MessageDigest.html
-http://developer.android.com/reference/java/security/MessageDigestSpi.html
-
-http://developer.android.com/reference/java/security/Permissions.html
-http://developer.android.com/reference/java/security/Policy.html
-
-http://developer.android.com/reference/java/security/Provider.Service.html
-http://developer.android.com/reference/java/security/SecureRandomSpi.html
-
-http://developer.android.com/reference/java/security/Security.html
-http://developer.android.com/reference/java/security/SecurityPermission.html
-
-http://developer.android.com/reference/java/security/Signature.html
-http://developer.android.com/reference/java/security/SignatureSpi.html
-
-http://developer.android.com/reference/java/security/SignedObject.html
-http://developer.android.com/reference/java/security/Signer.html
-
-http://developer.android.com/reference/java/security/Timestamp.html
-http://developer.android.com/reference/java/security/UnresolvedPermission.html
-
-http://developer.android.com/reference/java/security/AccessControlException.html
-http://developer.android.com/reference/java/security/DigestException.html
-
-http://developer.android.com/reference/java/security/GeneralSecurityException.html
-http://developer.android.com/reference/java/security/InvalidAlgorithmParameterException.html
-
-http://developer.android.com/reference/java/security/InvalidParameterException.html
-http://developer.android.com/reference/java/security/KeyException.html
-
-http://developer.android.com/reference/java/security/KeyStoreException.html
-http://developer.android.com/reference/java/security/PrivilegedActionException.html
-
-http://developer.android.com/reference/java/security/ProviderException.html
-http://developer.android.com/reference/java/security/SignatureException.html
-
-http://developer.android.com/reference/java/security/UnrecoverableEntryException.html
-http://developer.android.com/reference/java/security/UnrecoverableKeyException.html
-
-http://developer.android.com/reference/java/nio/Buffer.html
-http://developer.android.com/reference/java/nio/ByteOrder.html
-
-http://developer.android.com/reference/java/nio/BufferOverflowException.html
-http://developer.android.com/reference/java/nio/BufferUnderflowException.html
-
-http://developer.android.com/reference/java/nio/InvalidMarkException.html
-http://developer.android.com/reference/java/nio/ReadOnlyBufferException.html
-
-http://developer.android.com/reference/org/apache/http/client/methods/AbortableHttpRequest.html
-
-http://developer.android.com/reference/org/apache/http/client/methods/HttpUriRequest.html
-http://developer.android.com/reference/org/apache/http/conn/package-descr.html
-
-http://developer.android.com/reference/java/security/cert/PolicyNode.html
-http://developer.android.com/reference/java/security/cert/X509Extension.html
-
-http://developer.android.com/reference/java/security/cert/Certificate.CertificateRep.html
-http://developer.android.com/reference/java/security/cert/CertificateFactory.html
-
-http://developer.android.com/reference/java/security/cert/CertificateFactorySpi.html
-http://developer.android.com/reference/java/security/cert/CertPath.html
-
-http://developer.android.com/reference/java/security/cert/CertPath.CertPathRep.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilder.html
-
-http://developer.android.com/reference/java/security/cert/CertPathBuilderSpi.html
-http://developer.android.com/reference/java/security/cert/CertPathValidator.html
-
-http://developer.android.com/reference/java/security/cert/CertPathValidatorSpi.html
-http://developer.android.com/reference/java/security/cert/CertStore.html
-
-http://developer.android.com/reference/java/security/cert/CertStoreSpi.html
-http://developer.android.com/reference/java/security/cert/CRL.html
-
-http://developer.android.com/reference/java/security/cert/PolicyQualifierInfo.html
-http://developer.android.com/reference/java/security/cert/TrustAnchor.html
-
-http://developer.android.com/reference/java/security/cert/X509Certificate.html
-http://developer.android.com/reference/java/security/cert/X509CRL.html
-
-http://developer.android.com/reference/java/security/cert/X509CRLEntry.html
-http://developer.android.com/reference/java/security/cert/CertificateEncodingException.html
-
-http://developer.android.com/reference/java/security/cert/CertificateException.html
-http://developer.android.com/reference/java/security/cert/CertificateExpiredException.html
-
-http://developer.android.com/reference/java/security/cert/CertificateNotYetValidException.html
-
-http://developer.android.com/reference/java/security/cert/CertificateParsingException.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilderException.html
-
-http://developer.android.com/reference/java/security/cert/CertPathValidatorException.html
-http://developer.android.com/reference/java/security/cert/CertStoreException.html
-
-http://developer.android.com/reference/java/security/cert/CRLException.html
-http://developer.android.com/reference/com/google/android/maps/ItemizedOverlay.OnFocusChangeListener.html
-
-http://developer.android.com/reference/com/google/android/maps/Projection.html
-http://developer.android.com/reference/com/google/android/maps/GeoPoint.html
-
-http://developer.android.com/reference/com/google/android/maps/OverlayItem.html
-http://developer.android.com/reference/com/google/android/maps/MapView.LayoutParams.html
-
-http://developer.android.com/reference/com/google/android/maps/MyLocationOverlay.html
-http://developer.android.com/reference/com/google/android/maps/TrackballGestureDetector.html
-
-http://developer.android.com/reference/java/sql/Array.html
-http://developer.android.com/reference/java/sql/Blob.html
-
-http://developer.android.com/reference/java/sql/CallableStatement.html
-http://developer.android.com/reference/java/sql/Clob.html
-
-http://developer.android.com/reference/java/sql/Connection.html
-http://developer.android.com/reference/java/sql/DatabaseMetaData.html
-
-http://developer.android.com/reference/java/sql/Driver.html
-http://developer.android.com/reference/java/sql/ParameterMetaData.html
-
-http://developer.android.com/reference/java/sql/PreparedStatement.html
-http://developer.android.com/reference/java/sql/Ref.html
-
-http://developer.android.com/reference/java/sql/ResultSet.html
-http://developer.android.com/reference/java/sql/ResultSetMetaData.html
-
-http://developer.android.com/reference/java/sql/Savepoint.html
-http://developer.android.com/reference/java/sql/SQLData.html
-
-http://developer.android.com/reference/java/sql/SQLInput.html
-http://developer.android.com/reference/java/sql/SQLOutput.html
-
-http://developer.android.com/reference/java/sql/Statement.html
-http://developer.android.com/reference/java/sql/Struct.html
-
-http://developer.android.com/reference/java/sql/DriverManager.html
-http://developer.android.com/reference/java/sql/DriverPropertyInfo.html
-
-http://developer.android.com/reference/java/sql/SQLPermission.html
-http://developer.android.com/reference/java/sql/Types.html
-
-http://developer.android.com/reference/java/sql/BatchUpdateException.html
-http://developer.android.com/reference/java/sql/DataTruncation.html
-
-http://developer.android.com/reference/java/sql/SQLException.html
-http://developer.android.com/reference/java/sql/SQLWarning.html
-
-http://developer.android.com/reference/org/apache/http/message/BasicTokenIterator.html
-http://developer.android.com/reference/java/security/package-descr.html
-
-http://developer.android.com/reference/java/security/spec/KeySpec.html
-http://developer.android.com/reference/android/text/GetChars.html
-
-http://developer.android.com/reference/android/text/Html.ImageGetter.html
-http://developer.android.com/reference/android/text/Html.TagHandler.html
-
-http://developer.android.com/reference/android/text/Spanned.html
-http://developer.android.com/reference/android/text/SpanWatcher.html
-
-http://developer.android.com/reference/android/text/TextUtils.EllipsizeCallback.html
-http://developer.android.com/reference/android/text/TextUtils.StringSplitter.html
-
-http://developer.android.com/reference/android/text/AlteredCharSequence.html
-http://developer.android.com/reference/android/text/AndroidCharacter.html
-
-http://developer.android.com/reference/android/text/Annotation.html
-http://developer.android.com/reference/android/text/AutoText.html
-
-http://developer.android.com/reference/android/text/BoringLayout.html
-http://developer.android.com/reference/android/text/BoringLayout.Metrics.html
-
-http://developer.android.com/reference/android/text/DynamicLayout.html
-http://developer.android.com/reference/android/text/Html.html
-
-http://developer.android.com/reference/android/text/InputFilter.AllCaps.html
-http://developer.android.com/reference/android/text/InputFilter.LengthFilter.html
-
-http://developer.android.com/reference/android/text/Layout.Directions.html
-http://developer.android.com/reference/android/text/LoginFilter.html
-
-http://developer.android.com/reference/android/text/LoginFilter.PasswordFilterGMail.html
-http://developer.android.com/reference/android/text/LoginFilter.UsernameFilterGeneric.html
-
-http://developer.android.com/reference/android/text/LoginFilter.UsernameFilterGMail.html
-http://developer.android.com/reference/android/text/SpannableString.html
-
-http://developer.android.com/reference/android/text/SpannableStringBuilder.html
-http://developer.android.com/reference/android/text/SpannedString.html
-
-http://developer.android.com/reference/android/text/StaticLayout.html
-http://developer.android.com/reference/android/text/TextUtils.html
-
-http://developer.android.com/reference/android/text/TextUtils.SimpleStringSplitter.html
-http://developer.android.com/reference/javax/security/auth/Subject.html
-
-http://developer.android.com/reference/javax/security/auth/callback/CallbackHandler.html
-http://developer.android.com/reference/javax/security/auth/login/LoginException.html
-
-http://developer.android.com/reference/java/nio/package-descr.html
-
-http://developer.android.com/reference/java/util/zip/ZipFile.html
-http://developer.android.com/reference/android/widget/RemoteViews.RemoteView.html
-
-http://developer.android.com/reference/javax/security/auth/Destroyable.html
-http://developer.android.com/reference/javax/security/auth/AuthPermission.html
-
-http://developer.android.com/reference/javax/security/auth/PrivateCredentialPermission.html
-http://developer.android.com/reference/javax/security/auth/SubjectDomainCombiner.html
-
-http://developer.android.com/reference/javax/security/auth/DestroyFailedException.html
-http://developer.android.com/reference/javax/security/auth/package-descr.html
-
-http://developer.android.com/guide/tutorials/views/hello-linearlayout.html
-http://developer.android.com/guide/tutorials/views/hello-tablelayout.html
-
-http://developer.android.com/guide/tutorials/views/hello-relativelayout.html
-http://developer.android.com/reference/android/view/ViewDebug.ExportedProperty.html
-
-http://developer.android.com/reference/android/view/ViewDebug.IntToString.html
-http://developer.android.com/reference/android/content/DialogInterface.OnCancelListener.html
-
-http://developer.android.com/reference/android/content/DialogInterface.OnKeyListener.html
-http://developer.android.com/reference/android/content/DialogInterface.OnMultiChoiceClickListener.html
-
-http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html
-
-http://developer.android.com/reference/android/content/AsyncQueryHandler.html
-http://developer.android.com/reference/android/content/AsyncQueryHandler.WorkerArgs.html
-
-http://developer.android.com/reference/android/content/AsyncQueryHandler.WorkerHandler.html
-http://developer.android.com/reference/android/content/ContentQueryMap.html
-
-http://developer.android.com/reference/android/content/ContentUris.html
-http://developer.android.com/reference/android/content/Intent.FilterComparison.html
-
-http://developer.android.com/reference/android/content/IntentFilter.AuthorityEntry.html
-http://developer.android.com/reference/android/content/MutableContextWrapper.html
-
-http://developer.android.com/reference/android/content/UriMatcher.html
-http://developer.android.com/reference/android/content/ActivityNotFoundException.html
-
-http://developer.android.com/reference/android/content/IntentFilter.MalformedMimeTypeException.html
-
-http://developer.android.com/reference/android/content/ReceiverCallNotAllowedException.html
-http://developer.android.com/reference/android/test/mock/MockContext.html
-
-http://developer.android.com/reference/android/test/mock/MockApplication.html
-http://developer.android.com/reference/android/content/pm/PackageManager.NameNotFoundException.html
-
-http://developer.android.com/reference/org/xml/sax/ContentHandler.html
-http://developer.android.com/reference/org/xml/sax/DocumentHandler.html
-
-http://developer.android.com/reference/org/xml/sax/DTDHandler.html
-http://developer.android.com/reference/org/xml/sax/EntityResolver.html
-
-http://developer.android.com/reference/org/xml/sax/ErrorHandler.html
-http://developer.android.com/reference/org/xml/sax/XMLFilter.html
-
-http://developer.android.com/reference/org/xml/sax/XMLReader.html
-http://developer.android.com/reference/org/xml/sax/HandlerBase.html
-
-http://developer.android.com/reference/org/xml/sax/InputSource.html
-http://developer.android.com/reference/org/xml/sax/SAXException.html
-
-http://developer.android.com/reference/org/xml/sax/SAXNotRecognizedException.html
-http://developer.android.com/reference/org/xml/sax/SAXNotSupportedException.html
-
-http://developer.android.com/reference/org/xml/sax/SAXParseException.html
-http://developer.android.com/reference/org/xml/sax/package-descr.html
-
-http://developer.android.com/reference/javax/sql/RowSet.html
-http://developer.android.com/reference/android/content/pm/IPackageInstallObserver.html
-
-http://developer.android.com/reference/android/content/pm/ApplicationInfo.DisplayNameComparator.html
-
-http://developer.android.com/reference/android/content/pm/ComponentInfo.html
-http://developer.android.com/reference/android/content/pm/IPackageInstallObserver.Stub.html
-
-http://developer.android.com/reference/android/content/pm/PackageItemInfo.DisplayNameComparator.html
-
-http://developer.android.com/reference/android/content/pm/ResolveInfo.DisplayNameComparator.html
-
-http://developer.android.com/guide/samples/NotePad/res/index.html
-http://developer.android.com/guide/samples/NotePad/src/index.html
-
-http://developer.android.com/guide/samples/NotePad/tests/index.html
-http://developer.android.com/guide/samples/NotePad/AndroidManifest.html
-
-http://developer.android.com/guide/samples/NotePad/sample_note.html
-http://developer.android.com/guide/samples/NotePad/sample_notepad.html
-
-http://developer.android.com/reference/android/telephony/gsm/GsmCellLocation.html
-
-http://developer.android.com/reference/java/nio/channels/ServerSocketChannel.html
-http://developer.android.com/reference/javax/xml/XMLConstants.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultResponseParser.html
-http://developer.android.com/reference/java/nio/channels/ByteChannel.html
-
-http://developer.android.com/reference/java/nio/channels/GatheringByteChannel.html
-http://developer.android.com/reference/java/nio/channels/InterruptibleChannel.html
-
-http://developer.android.com/reference/java/nio/channels/ReadableByteChannel.html
-http://developer.android.com/reference/java/nio/channels/ScatteringByteChannel.html
-
-http://developer.android.com/reference/java/nio/channels/WritableByteChannel.html
-http://developer.android.com/reference/java/nio/channels/Channels.html
-
-http://developer.android.com/reference/java/nio/channels/FileChannel.html
-http://developer.android.com/reference/java/nio/channels/FileChannel.MapMode.html
-
-http://developer.android.com/reference/java/nio/channels/FileLock.html
-http://developer.android.com/reference/java/nio/channels/Pipe.html
-
-http://developer.android.com/reference/java/nio/channels/Pipe.SinkChannel.html
-http://developer.android.com/reference/java/nio/channels/Pipe.SourceChannel.html
-
-http://developer.android.com/reference/java/nio/channels/SelectableChannel.html
-http://developer.android.com/reference/java/nio/channels/SelectionKey.html
-
-http://developer.android.com/reference/java/nio/channels/Selector.html
-http://developer.android.com/reference/java/nio/channels/SocketChannel.html
-
-http://developer.android.com/reference/java/nio/channels/AlreadyConnectedException.html
-http://developer.android.com/reference/java/nio/channels/AsynchronousCloseException.html
-
-http://developer.android.com/reference/java/nio/channels/CancelledKeyException.html
-http://developer.android.com/reference/java/nio/channels/ClosedByInterruptException.html
-
-http://developer.android.com/reference/java/nio/channels/ClosedChannelException.html
-http://developer.android.com/reference/java/nio/channels/ClosedSelectorException.html
-
-http://developer.android.com/reference/java/nio/channels/ConnectionPendingException.html
-http://developer.android.com/reference/java/nio/channels/FileLockInterruptionException.html
-
-http://developer.android.com/reference/java/nio/channels/IllegalBlockingModeException.html
-http://developer.android.com/reference/java/nio/channels/IllegalSelectorException.html
-
-http://developer.android.com/reference/java/nio/channels/NoConnectionPendingException.html
-http://developer.android.com/reference/java/nio/channels/NonReadableChannelException.html
-
-http://developer.android.com/reference/java/nio/channels/NonWritableChannelException.html
-http://developer.android.com/reference/java/nio/channels/NotYetBoundException.html
-
-http://developer.android.com/reference/java/nio/channels/NotYetConnectedException.html
-http://developer.android.com/reference/java/nio/channels/OverlappingFileLockException.html
-
-http://developer.android.com/reference/java/nio/channels/UnresolvedAddressException.html
-http://developer.android.com/reference/java/nio/channels/UnsupportedAddressTypeException.html
-
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderIterator.html
-http://developer.android.com/reference/org/apache/http/message/BasicListHeaderIterator.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/AbstractClientConnAdapter.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/AbstractPooledConnAdapter.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/AbstractPoolEntry.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultClientConnection.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultHttpRoutePlanner.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/IdleConnectionHandler.html
-http://developer.android.com/reference/org/apache/http/impl/conn/LoggingSessionInputBuffer.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/LoggingSessionOutputBuffer.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/ProxySelectorRoutePlanner.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.ConnAdapter.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.PoolEntry.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/Wire.html
-http://developer.android.com/reference/java/security/spec/ECField.html
-
-http://developer.android.com/reference/java/security/spec/DSAParameterSpec.html
-http://developer.android.com/reference/java/security/spec/DSAPrivateKeySpec.html
-
-http://developer.android.com/reference/java/security/spec/DSAPublicKeySpec.html
-http://developer.android.com/reference/java/security/spec/ECFieldF2m.html
-
-http://developer.android.com/reference/java/security/spec/ECFieldFp.html
-http://developer.android.com/reference/java/security/spec/ECGenParameterSpec.html
-
-http://developer.android.com/reference/java/security/spec/ECParameterSpec.html
-http://developer.android.com/reference/java/security/spec/ECPoint.html
-
-http://developer.android.com/reference/java/security/spec/ECPrivateKeySpec.html
-http://developer.android.com/reference/java/security/spec/ECPublicKeySpec.html
-
-http://developer.android.com/reference/java/security/spec/EllipticCurve.html
-http://developer.android.com/reference/java/security/spec/EncodedKeySpec.html
-
-http://developer.android.com/reference/java/security/spec/MGF1ParameterSpec.html
-http://developer.android.com/reference/java/security/spec/PSSParameterSpec.html
-
-http://developer.android.com/reference/java/security/spec/RSAKeyGenParameterSpec.html
-http://developer.android.com/reference/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.html
-
-http://developer.android.com/reference/java/security/spec/RSAOtherPrimeInfo.html
-http://developer.android.com/reference/java/security/spec/RSAPrivateCrtKeySpec.html
-
-http://developer.android.com/reference/java/security/spec/RSAPrivateKeySpec.html
-http://developer.android.com/reference/java/security/spec/RSAPublicKeySpec.html
-
-http://developer.android.com/reference/java/security/spec/X509EncodedKeySpec.html
-http://developer.android.com/reference/java/security/spec/InvalidParameterSpecException.html
-
-http://developer.android.com/reference/org/apache/http/auth/Credentials.html
-http://developer.android.com/reference/org/apache/http/auth/AUTH.html
-
-http://developer.android.com/reference/org/apache/http/auth/AuthSchemeRegistry.html
-http://developer.android.com/reference/org/apache/http/auth/AuthScope.html
-
-http://developer.android.com/reference/org/apache/http/auth/AuthState.html
-http://developer.android.com/reference/org/apache/http/auth/BasicUserPrincipal.html
-
-http://developer.android.com/reference/org/apache/http/auth/NTCredentials.html
-http://developer.android.com/reference/org/apache/http/auth/NTUserPrincipal.html
-
-http://developer.android.com/reference/org/apache/http/auth/UsernamePasswordCredentials.html
-http://developer.android.com/reference/org/apache/http/auth/AuthenticationException.html
-
-http://developer.android.com/reference/org/apache/http/auth/InvalidCredentialsException.html
-http://developer.android.com/reference/org/apache/http/auth/MalformedChallengeException.html
-
-http://developer.android.com/reference/org/apache/http/auth/package-descr.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.AuthAlgorithm.html
-
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.GroupCipher.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.KeyMgmt.html
-
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.PairwiseCipher.html
-
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.Protocol.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.Status.html
-
-http://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html
-http://developer.android.com/reference/org/apache/http/protocol/HTTP.html
-
-http://developer.android.com/reference/java/util/zip/ZipInputStream.html
-http://developer.android.com/reference/java/util/zip/InflaterInputStream.html
-
-http://developer.android.com/reference/java/util/zip/Inflater.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/PoolEntryRequest.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RefQueueHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/AbstractConnPool.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPoolEntry.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/ConnPoolByRoute.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RefQueueWorker.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RouteSpecificPool.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/WaitingThread.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/WaitingThreadAborter.html
-
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/package-descr.html
-http://developer.android.com/reference/java/util/regex/PatternSyntaxException.html
-
-http://developer.android.com/reference/org/xmlpull/v1/sax2/Driver.html
-http://developer.android.com/guide/tutorials/views/hello-spinner.html
-
-http://developer.android.com/guide/tutorials/views/hello-listview.html
-http://developer.android.com/guide/tutorials/views/hello-gridview.html
-
-http://developer.android.com/reference/android/test/mock/MockPackageManager.html
-
-http://developer.android.com/reference/android/text/util/Linkify.MatchFilter.html
-
-http://developer.android.com/reference/android/text/util/Linkify.TransformFilter.html
-http://developer.android.com/reference/android/text/util/Rfc822Token.html
-
-http://developer.android.com/reference/android/text/util/Rfc822Tokenizer.html
-http://developer.android.com/reference/java/util/regex/Pattern.html
-
-http://developer.android.com/reference/java/lang/reflect/ReflectPermission.html
-
-http://developer.android.com/reference/javax/security/auth/callback/Callback.html
-http://developer.android.com/reference/javax/security/auth/callback/PasswordCallback.html
-
-http://developer.android.com/reference/javax/security/auth/callback/UnsupportedCallbackException.html
-
-http://developer.android.com/reference/javax/security/cert/Certificate.html
-http://developer.android.com/reference/javax/security/cert/X509Certificate.html
-
-http://developer.android.com/reference/javax/security/cert/CertificateEncodingException.html
-http://developer.android.com/reference/javax/security/cert/CertificateException.html
-
-http://developer.android.com/reference/javax/security/cert/CertificateExpiredException.html
-http://developer.android.com/reference/javax/security/cert/CertificateNotYetValidException.html
-
-http://developer.android.com/reference/javax/security/cert/CertificateParsingException.html
-http://developer.android.com/reference/javax/security/cert/package-descr.html
-
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestExecutor.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpProcessor.html
-
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpRequestFactory.html
-http://developer.android.com/reference/javax/crypto/interfaces/PBEKey.html
-
-http://developer.android.com/reference/java/lang/annotation/Annotation.html
-http://developer.android.com/reference/java/lang/annotation/AnnotationTypeMismatchException.html
-
-http://developer.android.com/reference/java/lang/annotation/IncompleteAnnotationException.html
-
-http://developer.android.com/reference/java/lang/annotation/AnnotationFormatError.html
-http://developer.android.com/reference/java/lang/annotation/package-descr.html
-
-http://developer.android.com/reference/android/app/package-descr.html
-http://developer.android.com/reference/java/lang/reflect/Method.html
-
-http://developer.android.com/reference/org/apache/http/message/BasicHttpEntityEnclosingRequest.html
-
-http://developer.android.com/reference/org/apache/http/message/BasicHttpRequest.html
-http://developer.android.com/reference/org/apache/http/message/BasicHttpResponse.html
-
-http://developer.android.com/guide/samples/NotePad/src/com/index.html
-http://developer.android.com/reference/org/apache/http/io/HttpMessageWriter.html
-
-http://developer.android.com/reference/org/apache/http/io/package-descr.html
-http://developer.android.com/reference/android/location/LocationListener.html
-
-http://developer.android.com/reference/android/location/Geocoder.html
-http://developer.android.com/reference/android/location/LocationProvider.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/AbstractCookieAttributeHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/AbstractCookieSpec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicCommentHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicDomainHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicExpiresHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicMaxAgeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicPathHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicSecureHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BestMatchSpec.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/BestMatchSpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BrowserCompatSpec.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/BrowserCompatSpecFactory.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/CookieSpecBase.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/DateUtils.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDomainHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftHeaderParser.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftSpec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftSpecFactory.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109DomainHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109Spec.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109SpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109VersionHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965PortAttributeHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965Spec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965SpecFactory.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.html
-
-http://developer.android.com/reference/org/apache/http/impl/cookie/DateParseException.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LabelView.java
-
-http://developer.android.com/reference/android/net/http/SslCertificate.html
-http://developer.android.com/reference/android/net/http/SslCertificate.DName.html
-
-http://developer.android.com/reference/android/test/mock/MockContentResolver.html
-http://developer.android.com/reference/android/test/mock/MockDialogInterface.html
-
-http://developer.android.com/reference/android/test/mock/MockResources.html
-http://developer.android.com/reference/android/test/mock/package-descr.html
-
-http://developer.android.com/reference/junit/framework/Protectable.html
-http://developer.android.com/reference/junit/framework/TestFailure.html
-
-http://developer.android.com/reference/junit/framework/ComparisonFailure.html
-http://developer.android.com/reference/android/test/suitebuilder/TestSuiteBuilder.FailedToCreateTests.html
-
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicBoolean.html
-
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerArray.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.html
-
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongArray.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongFieldUpdater.html
-
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicMarkableReference.html
-
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReference.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceArray.html
-
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.html
-
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicStampedReference.html
-
-http://developer.android.com/reference/java/util/concurrent/atomic/package-descr.html
-http://developer.android.com/reference/org/apache/http/impl/AbstractHttpClientConnection.html
-
-http://developer.android.com/reference/org/apache/http/impl/AbstractHttpServerConnection.html
-
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedSynchronizer.html
-
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedSynchronizer.ConditionObject.html
-
-http://developer.android.com/reference/org/apache/http/conn/ssl/AbstractVerifier.html
-http://developer.android.com/reference/java/lang/reflect/AccessibleObject.html
-
-http://developer.android.com/reference/java/util/zip/Adler32.html
-http://developer.android.com/reference/android/text/style/AlignmentSpan.Standard.html
-
-http://developer.android.com/reference/java/lang/reflect/Array.html
-http://developer.android.com/reference/android/media/AsyncPlayer.html
-
-http://developer.android.com/reference/org/apache/http/client/params/AuthPolicy.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderElementIterator.html
-
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderValueFormatter.html
-
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderValueParser.html
-http://developer.android.com/reference/org/apache/http/protocol/BasicHttpContext.html
-
-http://developer.android.com/reference/org/apache/http/message/BasicLineFormatter.html
-http://developer.android.com/reference/org/apache/http/message/BasicLineParser.html
-
-http://developer.android.com/reference/android/text/style/BulletSpan.html
-http://developer.android.com/reference/org/apache/http/util/ByteArrayBuffer.html
-
-http://developer.android.com/reference/java/util/zip/CRC32.html
-http://developer.android.com/reference/android/hardware/Camera.Parameters.html
-
-http://developer.android.com/reference/android/hardware/Camera.Size.html
-http://developer.android.com/reference/android/text/style/CharacterStyle.html
-
-http://developer.android.com/reference/java/nio/charset/spi/CharsetProvider.html
-http://developer.android.com/reference/org/apache/http/client/utils/CloneUtils.html
-
-http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerParams.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnPerRouteBean.html
-
-http://developer.android.com/reference/org/apache/http/conn/params/ConnRouteParams.html
-http://developer.android.com/reference/org/apache/http/client/params/CookiePolicy.html
-
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpResponseFactory.html
-http://developer.android.com/reference/org/apache/http/protocol/DefaultedHttpContext.html
-
-http://developer.android.com/reference/java/util/zip/Deflater.html
-http://developer.android.com/reference/android/text/style/DrawableMarginSpan.html
-
-http://developer.android.com/reference/org/apache/http/util/EncodingUtils.html
-http://developer.android.com/reference/org/apache/http/impl/entity/EntityDeserializer.html
-
-http://developer.android.com/reference/org/apache/http/impl/entity/EntitySerializer.html
-http://developer.android.com/reference/org/apache/http/util/EntityUtils.html
-
-http://developer.android.com/reference/org/apache/http/util/ExceptionUtils.html
-http://developer.android.com/reference/android/media/FaceDetector.html
-
-http://developer.android.com/reference/android/media/FaceDetector.Face.html
-http://developer.android.com/reference/android/opengl/GLDebugHelper.html
-
-http://developer.android.com/reference/android/opengl/GLU.html
-http://developer.android.com/reference/android/opengl/GLUtils.html
-
-http://developer.android.com/reference/org/apache/http/client/params/HttpClientParams.html
-http://developer.android.com/reference/org/apache/http/impl/HttpConnectionMetricsImpl.html
-
-http://developer.android.com/reference/org/apache/http/protocol/HttpDateGenerator.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandlerRegistry.html
-
-http://developer.android.com/reference/org/apache/http/protocol/HttpService.html
-http://developer.android.com/reference/android/text/style/IconMarginSpan.html
-
-http://developer.android.com/reference/org/apache/http/conn/util/InetAddressUtils.html
-http://developer.android.com/reference/org/json/JSONArray.html
-
-http://developer.android.com/reference/org/json/JSONObject.html
-http://developer.android.com/reference/org/json/JSONStringer.html
-
-http://developer.android.com/reference/org/json/JSONTokener.html
-http://developer.android.com/reference/org/apache/http/util/LangUtils.html
-
-http://developer.android.com/reference/org/apache/http/impl/entity/LaxContentLengthStrategy.html
-
-http://developer.android.com/reference/android/text/style/LeadingMarginSpan.Standard.html
-http://developer.android.com/reference/java/util/concurrent/locks/LockSupport.html
-
-http://developer.android.com/reference/java/util/regex/Matcher.html
-http://developer.android.com/reference/android/opengl/Matrix.html
-
-http://developer.android.com/reference/android/media/MediaRecorder.AudioEncoder.html
-http://developer.android.com/reference/android/media/MediaRecorder.AudioSource.html
-
-http://developer.android.com/reference/android/media/MediaRecorder.OutputFormat.html
-http://developer.android.com/reference/android/media/MediaScannerConnection.html
-
-http://developer.android.com/reference/java/lang/reflect/Modifier.html
-http://developer.android.com/reference/org/apache/http/message/ParserCursor.html
-
-http://developer.android.com/reference/org/apache/http/conn/scheme/PlainSocketFactory.html
-http://developer.android.com/reference/android/text/style/QuoteSpan.html
-
-http://developer.android.com/reference/java/util/concurrent/locks/ReentrantLock.html
-http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.html
-
-http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.ReadLock.html
-
-http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html
-
-http://developer.android.com/reference/org/apache/http/protocol/RequestConnControl.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestContent.html
-
-http://developer.android.com/reference/org/apache/http/protocol/RequestDate.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestExpectContinue.html
-
-http://developer.android.com/reference/org/apache/http/protocol/RequestTargetHost.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestUserAgent.html
-
-http://developer.android.com/reference/org/apache/http/protocol/ResponseConnControl.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseContent.html
-
-http://developer.android.com/reference/org/apache/http/protocol/ResponseDate.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseServer.html
-
-http://developer.android.com/reference/android/media/Ringtone.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory.html
-
-http://developer.android.com/reference/org/apache/http/conn/scheme/Scheme.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/SchemeRegistry.html
-
-http://developer.android.com/reference/javax/net/ServerSocketFactory.html
-http://developer.android.com/reference/android/telephony/gsm/SmsManager.html
-
-http://developer.android.com/reference/android/telephony/gsm/SmsMessage.html
-http://developer.android.com/reference/android/telephony/gsm/SmsMessage.SubmitPdu.html
-
-http://developer.android.com/reference/android/media/SoundPool.html
-http://developer.android.com/reference/org/apache/http/impl/entity/StrictContentLengthStrategy.html
-
-http://developer.android.com/reference/android/text/style/TabStopSpan.Standard.html
-http://developer.android.com/reference/android/test/suitebuilder/TestMethod.html
-
-http://developer.android.com/reference/android/test/suitebuilder/TestSuiteBuilder.html
-http://developer.android.com/reference/android/media/ToneGenerator.html
-
-http://developer.android.com/reference/org/apache/http/client/utils/URIUtils.html
-http://developer.android.com/reference/org/apache/http/client/utils/URLEncodedUtils.html
-
-http://developer.android.com/reference/org/apache/http/protocol/UriPatternMatcher.html
-http://developer.android.com/reference/junit/runner/Version.html
-
-http://developer.android.com/reference/org/apache/http/util/VersionInfo.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlPullParserFactory.html
-
-http://developer.android.com/reference/java/util/concurrent/locks/Lock.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/X509HostnameVerifier.html
-
-http://developer.android.com/reference/java/util/concurrent/locks/ReadWriteLock.html
-http://developer.android.com/reference/android/text/style/AbsoluteSizeSpan.html
-
-http://developer.android.com/reference/org/apache/http/conn/ssl/AllowAllHostnameVerifier.html
-
-http://developer.android.com/reference/android/text/style/BackgroundColorSpan.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.html
-
-http://developer.android.com/reference/java/util/zip/CheckedInputStream.html
-http://developer.android.com/reference/java/util/zip/CheckedOutputStream.html
-
-http://developer.android.com/reference/android/text/style/ClickableSpan.html
-http://developer.android.com/reference/org/apache/http/client/params/ClientParamBean.html
-
-http://developer.android.com/reference/org/apache/http/conn/params/ConnConnectionParamBean.html
-
-http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerParamBean.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnRouteParamBean.html
-
-http://developer.android.com/reference/javax/sql/ConnectionEvent.html
-http://developer.android.com/reference/java/lang/reflect/Constructor.html
-
-http://developer.android.com/reference/org/apache/http/cookie/params/CookieSpecParamBean.html
-
-http://developer.android.com/reference/org/w3c/dom/DOMException.html
-http://developer.android.com/reference/java/util/zip/DataFormatException.html
-
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpServerConnection.html
-
-http://developer.android.com/reference/java/util/zip/DeflaterOutputStream.html
-http://developer.android.com/reference/android/text/style/DynamicDrawableSpan.html
-
-http://developer.android.com/reference/java/lang/reflect/Field.html
-http://developer.android.com/reference/android/text/style/ForegroundColorSpan.html
-
-http://developer.android.com/reference/android/opengl/GLException.html
-http://developer.android.com/reference/java/util/zip/GZIPInputStream.html
-
-http://developer.android.com/reference/java/util/zip/GZIPOutputStream.html
-http://developer.android.com/reference/java/lang/reflect/GenericSignatureFormatError.html
-
-http://developer.android.com/reference/android/text/style/ImageSpan.html
-http://developer.android.com/reference/java/lang/reflect/InvocationTargetException.html
-
-http://developer.android.com/reference/org/json/JSONException.html
-http://developer.android.com/reference/java/lang/reflect/MalformedParameterizedTypeException.html
-
-http://developer.android.com/reference/android/text/style/MaskFilterSpan.html
-http://developer.android.com/reference/android/text/style/MetricAffectingSpan.html
-
-http://developer.android.com/reference/android/text/style/RasterizerSpan.html
-http://developer.android.com/reference/android/text/style/RelativeSizeSpan.html
-
-http://developer.android.com/reference/android/text/style/ReplacementSpan.html
-http://developer.android.com/reference/javax/sql/RowSetEvent.html
-
-http://developer.android.com/reference/android/text/style/ScaleXSpan.html
-http://developer.android.com/reference/org/apache/http/impl/SocketHttpClientConnection.html
-
-http://developer.android.com/reference/org/apache/http/impl/SocketHttpServerConnection.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/StrictHostnameVerifier.html
-
-http://developer.android.com/reference/android/text/style/StrikethroughSpan.html
-http://developer.android.com/reference/android/text/style/StyleSpan.html
-
-http://developer.android.com/reference/android/text/style/SubscriptSpan.html
-http://developer.android.com/reference/android/text/style/SuperscriptSpan.html
-
-http://developer.android.com/reference/org/apache/http/protocol/SyncBasicHttpContext.html
-http://developer.android.com/reference/android/text/style/TextAppearanceSpan.html
-
-http://developer.android.com/reference/android/text/style/TypefaceSpan.html
-http://developer.android.com/reference/java/lang/reflect/UndeclaredThrowableException.html
-
-http://developer.android.com/reference/android/text/style/UnderlineSpan.html
-http://developer.android.com/reference/java/util/zip/ZipException.html
-
-http://developer.android.com/reference/java/util/zip/ZipOutputStream.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnBufferingUpdateListener.html
-
-http://developer.android.com/reference/android/media/MediaPlayer.OnCompletionListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnErrorListener.html
-
-http://developer.android.com/reference/android/media/MediaPlayer.OnPreparedListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnSeekCompleteListener.html
-
-http://developer.android.com/reference/android/media/MediaScannerConnection.MediaScannerConnectionClient.html
-
-http://developer.android.com/reference/java/util/zip/Checksum.html
-http://developer.android.com/guide/developing/tools/adt.html
-
-http://developer.android.com/reference/org/apache/http/client/params/AllClientPNames.html
-http://developer.android.com/reference/org/apache/http/message/HeaderValueFormatter.html
-
-http://developer.android.com/reference/org/apache/http/message/HeaderValueParser.html
-http://developer.android.com/reference/org/apache/http/message/LineFormatter.html
-
-http://developer.android.com/reference/java/lang/package-descr.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnConnectionPNames.html
-
-http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerPNames.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnPerRoute.html
-
-http://developer.android.com/reference/org/apache/http/conn/params/ConnRoutePNames.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/HostNameResolver.html
-
-http://developer.android.com/reference/org/apache/http/conn/scheme/LayeredSocketFactory.html
-http://developer.android.com/reference/android/text/style/AlignmentSpan.html
-
-http://developer.android.com/reference/java/lang/reflect/AnnotatedElement.html
-http://developer.android.com/reference/org/w3c/dom/Attr.html
-
-http://developer.android.com/reference/android/hardware/Camera.AutoFocusCallback.html
-http://developer.android.com/reference/android/hardware/Camera.ErrorCallback.html
-
-http://developer.android.com/reference/android/hardware/Camera.PictureCallback.html
-http://developer.android.com/reference/android/hardware/Camera.PreviewCallback.html
-
-http://developer.android.com/reference/android/hardware/Camera.ShutterCallback.html
-http://developer.android.com/reference/org/w3c/dom/CDATASection.html
-
-http://developer.android.com/reference/org/w3c/dom/CharacterData.html
-http://developer.android.com/reference/org/apache/http/client/params/ClientPNames.html
-
-http://developer.android.com/reference/org/w3c/dom/Comment.html
-http://developer.android.com/reference/java/util/concurrent/locks/Condition.html
-
-http://developer.android.com/reference/javax/sql/ConnectionEventListener.html
-http://developer.android.com/reference/javax/sql/ConnectionPoolDataSource.html
-
-http://developer.android.com/reference/org/apache/http/cookie/params/CookieSpecPNames.html
-http://developer.android.com/reference/javax/sql/DataSource.html
-
-http://developer.android.com/reference/java/lang/Deprecated.html
-http://developer.android.com/reference/javax/crypto/interfaces/DHKey.html
-
-http://developer.android.com/reference/javax/crypto/interfaces/DHPrivateKey.html
-http://developer.android.com/reference/javax/crypto/interfaces/DHPublicKey.html
-
-http://developer.android.com/reference/org/w3c/dom/Document.html
-http://developer.android.com/reference/java/lang/annotation/Documented.html
-
-http://developer.android.com/reference/org/w3c/dom/DocumentFragment.html
-http://developer.android.com/reference/org/w3c/dom/DocumentType.html
-
-http://developer.android.com/reference/org/w3c/dom/DOMImplementation.html
-http://developer.android.com/reference/java/security/interfaces/DSAKey.html
-
-http://developer.android.com/reference/java/security/interfaces/DSAKeyPairGenerator.html
-http://developer.android.com/reference/java/security/interfaces/DSAParams.html
-
-http://developer.android.com/reference/java/security/interfaces/DSAPrivateKey.html
-http://developer.android.com/reference/java/security/interfaces/DSAPublicKey.html
-
-http://developer.android.com/reference/java/security/interfaces/ECKey.html
-http://developer.android.com/reference/java/security/interfaces/ECPrivateKey.html
-
-http://developer.android.com/reference/java/security/interfaces/ECPublicKey.html
-http://developer.android.com/reference/org/w3c/dom/Element.html
-
-http://developer.android.com/reference/org/w3c/dom/Entity.html
-http://developer.android.com/reference/org/w3c/dom/EntityReference.html
-
-http://developer.android.com/reference/org/apache/http/protocol/ExecutionContext.html
-http://developer.android.com/reference/android/test/FlakyTest.html
-
-http://developer.android.com/reference/java/lang/reflect/GenericArrayType.html
-http://developer.android.com/reference/java/lang/reflect/GenericDeclaration.html
-
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10Ext.html
-
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11Ext.html
-
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11ExtensionPack.html
-
-http://developer.android.com/reference/org/apache/http/protocol/HttpExpectationVerifier.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandler.html
-
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandlerResolver.html
-
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestInterceptorList.html
-
-http://developer.android.com/reference/org/apache/http/protocol/HttpResponseInterceptorList.html
-
-http://developer.android.com/reference/java/lang/annotation/Inherited.html
-http://developer.android.com/reference/java/lang/reflect/InvocationHandler.html
-
-http://developer.android.com/reference/android/text/style/LeadingMarginSpan.html
-http://developer.android.com/reference/android/text/style/LineBackgroundSpan.html
-
-http://developer.android.com/reference/android/text/style/LineHeightSpan.html
-http://developer.android.com/reference/java/util/regex/MatchResult.html
-
-http://developer.android.com/reference/java/lang/reflect/Member.html
-http://developer.android.com/reference/org/w3c/dom/NamedNodeMap.html
-
-http://developer.android.com/reference/org/w3c/dom/Node.html
-http://developer.android.com/reference/org/w3c/dom/NodeList.html
-
-http://developer.android.com/reference/org/w3c/dom/Notation.html
-http://developer.android.com/reference/dalvik/bytecode/Opcodes.html
-
-http://developer.android.com/reference/java/lang/Override.html
-http://developer.android.com/reference/android/text/style/ParagraphStyle.html
-
-http://developer.android.com/reference/java/lang/reflect/ParameterizedType.html
-http://developer.android.com/reference/javax/sql/PooledConnection.html
-
-http://developer.android.com/reference/org/w3c/dom/ProcessingInstruction.html
-http://developer.android.com/reference/java/lang/reflect/Proxy.html
-
-http://developer.android.com/reference/java/lang/annotation/Retention.html
-http://developer.android.com/reference/javax/sql/RowSetInternal.html
-
-http://developer.android.com/reference/javax/sql/RowSetListener.html
-http://developer.android.com/reference/javax/sql/RowSetMetaData.html
-
-http://developer.android.com/reference/javax/sql/RowSetReader.html
-http://developer.android.com/reference/javax/sql/RowSetWriter.html
-
-http://developer.android.com/reference/java/security/interfaces/RSAKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAMultiPrimePrivateCrtKey.html
-
-http://developer.android.com/reference/java/security/interfaces/RSAPrivateCrtKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAPrivateKey.html
-
-http://developer.android.com/reference/java/security/interfaces/RSAPublicKey.html
-http://developer.android.com/reference/android/hardware/SensorListener.html
-
-http://developer.android.com/reference/android/test/suitebuilder/annotation/Smoke.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/Suppress.html
-
-http://developer.android.com/reference/java/lang/SuppressWarnings.html
-http://developer.android.com/reference/android/text/style/TabStopSpan.html
-
-http://developer.android.com/reference/java/lang/annotation/Target.html
-http://developer.android.com/reference/dalvik/annotation/TestTarget.html
-
-http://developer.android.com/reference/dalvik/annotation/TestTargetClass.html
-http://developer.android.com/reference/org/w3c/dom/Text.html
-
-http://developer.android.com/reference/java/lang/reflect/Type.html
-http://developer.android.com/reference/java/lang/reflect/TypeVariable.html
-
-http://developer.android.com/reference/android/test/UiThreadTest.html
-http://developer.android.com/reference/android/text/style/UpdateLayout.html
-
-http://developer.android.com/reference/java/lang/reflect/WildcardType.html
-http://developer.android.com/reference/android/text/style/WrapTogetherSpan.html
-
-http://developer.android.com/reference/org/xmlpull/v1/XmlSerializer.html
-
-http://developer.android.com/reference/java/util/zip/package-descr.html
-http://developer.android.com/reference/javax/security/auth/login/package-descr.html
-
-http://developer.android.com/reference/android/text/style/package-descr.html
-
-http://developer.android.com/reference/java/nio/channels/package-descr.html
-http://developer.android.com/reference/android/opengl/package-descr.html
-
-http://developer.android.com/guide/tutorials/notepad/notepad-ex1.html
-
-http://developer.android.com/guide/tutorials/notepad/notepad-ex2.html
-http://developer.android.com/guide/tutorials/notepad/notepad-ex3.html
-
-http://developer.android.com/guide/tutorials/notepad/notepad-extra-credit.html
-http://developer.android.com/reference/java/util/package-descr.html
-
-http://developer.android.com/reference/org/apache/http/client/methods/package-descr.html
-http://developer.android.com/reference/android/os/package-descr.html
-
-http://developer.android.com/reference/org/apache/http/client/utils/package-descr.html
-
-http://developer.android.com/reference/org/apache/http/impl/package-descr.html
-
-http://developer.android.com/reference/java/io/package-descr.html
-http://developer.android.com/guide/samples/NotePad/src/com/example/index.html
-
-http://developer.android.com/reference/java/nio/charset/spi/package-descr.html
-
-http://developer.android.com/reference/org/apache/http/impl/entity/package-descr.html
-
-http://developer.android.com/guide/samples/LunarLander/res/index.html
-
-http://developer.android.com/guide/samples/LunarLander/src/index.html
-http://developer.android.com/guide/samples/LunarLander/tests/index.html
-
-http://developer.android.com/guide/samples/LunarLander/AndroidManifest.html
-http://developer.android.com/guide/samples/LunarLander/sample_lunarlander.html
-
-http://developer.android.com/reference/javax/crypto/interfaces/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/assets/index.html
-http://developer.android.com/guide/samples/ApiDemos/res/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/index.html
-http://developer.android.com/guide/samples/ApiDemos/tests/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/AndroidManifest.html
-http://developer.android.com/reference/android/widget/package-descr.html
-http://developer.android.com/reference/org/apache/http/conn/params/package-descr.html
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/index.html
-http://developer.android.com/guide/samples/ApiDemos/tests/AndroidManifest.html
-
-http://developer.android.com/reference/android/test/suitebuilder/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/StyledText.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/ResourcesSample.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/ReadAsset.html
-
-http://developer.android.com/reference/android/view/package-descr.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/HelloWorld.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SaveRestoreState.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PersistentState.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ReceiveResult.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/Forwarding.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectEnter.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/TranslucentActivity.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceController.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceBinding.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteServiceController.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteServiceBinding.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArgumentsController.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArguments.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmController.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/OneShotAlarm.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RepeatingAlarm.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmService.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmService_Service.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyWithText.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessage.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchInvoke.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchQueryResults.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchSuggestionSampleProvider.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AdvancedPreferences.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlertDialogSamples.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilter.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilterInstrumentation.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsSelectInstrumentation.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/CustomDialogActivity.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/CustomTitle.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/DefaultValues.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/DialogActivity.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ForwardTarget.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessageView.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LauncherShortcuts.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LaunchingPreferences.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalSample.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalSampleInstrumentation.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/MenuInflateFromXml.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/MyPreference.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyingController.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyingService.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferenceDependencies.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromCode.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromXml.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectGetter.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectMain.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SendResult.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/StatusBarNotifications.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/TranslucentBlurActivity.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/CustomDialogActivity.java
-
-http://developer.android.com/reference/org/w3c/dom/package-descr.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceBinding.java
-
-http://developer.android.com/guide/samples/ApiDemos/res/anim/index.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/index.html
-http://developer.android.com/guide/samples/ApiDemos/res/menu/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/raw/index.html
-http://developer.android.com/guide/samples/ApiDemos/res/values/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/xml/index.html
-http://developer.android.com/reference/java/sql/package-descr.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RepeatingAlarm.java
-
-http://developer.android.com/guide/samples/LunarLander/res/drawable/index.html
-http://developer.android.com/guide/samples/LunarLander/res/drawable-land/index.html
-
-http://developer.android.com/guide/samples/LunarLander/res/drawable-port/index.html
-http://developer.android.com/guide/samples/LunarLander/res/layout/index.html
-
-http://developer.android.com/guide/samples/LunarLander/res/values/index.html
-http://developer.android.com/reference/android/util/package-descr.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalSampleInstrumentation.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectMain.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/Forwarding.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilterInstrumentation.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchSuggestionSampleProvider.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LaunchingPreferences.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchInvoke.java
-
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/index.html
-
-http://developer.android.com/reference/android/content/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ShapeDrawable1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PolyToPoly.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/DrawPoints.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PathEffects.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/SurfaceViewOverlay.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AlphaBitmap.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawable.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawables.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Arcs.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapDecode.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapMesh.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Clipping.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ColorMatrixSample.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ColorPickerDialog.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Compass.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CreateBitmap.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Cube.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CubeRenderer.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/FingerPaint.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GradientDrawable1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GraphicsActivity.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Layers.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/MeasureText.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PathFillTypes.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Patterns.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PictureLayout.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Pictures.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ProxyDrawable.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Regions.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/RoundRects.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ScaleToFit.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/SensorTest.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Sweep.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TextAlign.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TranslucentGLSurfaceViewActivity.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleActivity.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleRenderer.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Typefaces.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/UnicodeChart.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Vertices.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.html
-
-http://developer.android.com/guide/samples/NotePad/tests/src/index.html
-http://developer.android.com/guide/samples/NotePad/tests/AndroidManifest.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ShapeDrawable1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawable.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Typefaces.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArgumentsController.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessage.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/RoundRects.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SaveRestoreState.java
-
-http://developer.android.com/reference/org/apache/http/client/params/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ForwardTarget.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlertDialogSamples.java
-
-http://developer.android.com/reference/java/security/spec/package-descr.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/FingerPaint.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SearchQueryResults.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyingController.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ScaleToFit.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyingService.java
-
-http://developer.android.com/guide/samples/LunarLander/res/drawable-land/earthrise.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectEnter.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsFilter.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AnimateDrawables.java
-
-http://developer.android.com/reference/org/apache/http/conn/ssl/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Arcs.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CubeRenderer.java
-
-http://developer.android.com/reference/org/apache/http/message/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleRenderer.java
-
-http://developer.android.com/guide/samples/ApiDemos/assets/fonts/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/TranslucentBlurActivity.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Grid.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/LabelMaker.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixGrabber.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixStack.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixTrackingGL.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/NumericSprite.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Projector.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/SpriteTextActivity.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/SpriteTextRenderer.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GradientDrawable1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/DialogActivity.java
-
-http://developer.android.com/reference/android/text/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapDecode.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/ResourcesSample.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TranslucentGLSurfaceViewActivity.java
-
-http://developer.android.com/reference/org/apache/http/conn/routing/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Vertices.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PersistentState.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ReceiveResult.java
-
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/index.html
-
-http://developer.android.com/reference/com/google/android/maps/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LauncherShortcuts.java
-
-http://developer.android.com/guide/samples/NotePad/tests/src/com/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapMesh.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/SurfaceViewOverlay.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/CreateBitmap.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/CustomTitle.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AdvancedPreferences.java
-
-http://developer.android.com/
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GraphicsActivity.java
-
-http://developer.android.com/guide/samples/ApiDemos/res/xml/advanced_preferences.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/xml/default_values.html
-http://developer.android.com/guide/samples/ApiDemos/res/xml/preference_dependencies.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/xml/preferences.html
-http://developer.android.com/guide/samples/ApiDemos/res/xml/searchable.html
-
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotePad.html
-
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotePadProvider.html
-
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotesList.html
-
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/TitleEditor.html
-
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/TitleEditor.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Layers.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteServiceBinding.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Compass.java
-
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotesList.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/DefaultValues.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmService.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/OneShotAlarm.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmController.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixTrackingGL.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ProxyDrawable.java
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/alarm_controller.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/alarm_service.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/alert_dialog.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/alert_dialog_text_entry.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/animation_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/animation_2.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/animations_main_screen.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_3.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_4.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_5.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/autocomplete_6.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_3.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_4.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_6.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_7.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_nested_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_nested_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/baseline_nested_3.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/buttons_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/chronometer.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/contacts_filter.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/controls_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/custom_dialog_activity.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/custom_title.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/custom_title_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/date_widgets_example_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/date_widgets_example_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/dialog_activity.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/focus_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/focus_2.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/focus_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/forward_target.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/forwarding.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/gallery_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/gallery_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/google_login.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/grid_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/grid_2.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/hello_world.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/image_button_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/image_switcher_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/image_view_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/incoming_message.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/incoming_message_info.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/incoming_message_panel.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/incoming_message_view.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/launcher_shortcuts.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_4.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_5.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_6.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/layout_animation_7.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_10.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_2.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_4.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_5.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_6.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_7.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_8.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/linear_layout_9.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/link.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/list_12.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/list_13.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/list_7.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/list_8.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/list_item_checkbox.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/list_item_icon_text.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/list_position.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/local_sample.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/local_service_binding.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/local_service_controller.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/log_text_box_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/mapview.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/marquee.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/mediaplayer_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/mediaplayer_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/morse_code.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/notify_with_text.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/notifying_controller.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/preference_widget_mypreference.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/progressbar_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/progressbar_2.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/progressbar_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/progressbar_4.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/radio_group_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/ratingbar_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/read_asset.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/receive_result.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/redirect_enter.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/redirect_getter.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/redirect_main.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/relative_layout_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/relative_layout_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/remote_service_binding.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/remote_service_controller.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/resources.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/save_restore_state.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/scroll_view_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/scroll_view_2.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/scrollbar1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/scrollbar2.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/scrollbar3.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/search_invoke.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/search_query_results.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/seekbar_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/select_dialog.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/send_result.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/service_start_arguments_controller.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/shape_drawable_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/spinner_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/status_bar_balloon.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/status_bar_notifications.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/styled_text.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/surface_view_overlay.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_10.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_11.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_12.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_3.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_4.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_5.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_6.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_7.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_8.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/table_layout_9.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/tabs1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/text_switcher_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/translucent_background.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/videoview.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/layout/visibility_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/layout/webview_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/NumericSprite.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/TranslucentActivity.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceController.java
-
-http://developer.android.com/guide/samples/ApiDemos/res/menu/category_order.html
-http://developer.android.com/guide/samples/ApiDemos/res/menu/checkable.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/menu/disabled.html
-http://developer.android.com/guide/samples/ApiDemos/res/menu/groups.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/menu/order.html
-http://developer.android.com/guide/samples/ApiDemos/res/menu/shortcuts.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/menu/submenu.html
-http://developer.android.com/guide/samples/ApiDemos/res/menu/title_icon.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/menu/title_only.html
-http://developer.android.com/guide/samples/ApiDemos/res/menu/visible.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Clipping.java
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/alert_dialog_icon.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/animated_gif.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/app_sample_code.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/arrow_down_float.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/arrow_up_float.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/balloons.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/beach.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/black_box.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/black_opaque_box.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/box.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/button.9.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/circular_progress.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/filled_box.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/frog.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_background_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_3.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_4.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_5.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_6.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_7.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/gallery_photo_8.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/ic_popup_reminder.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/icon48x48_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/icon48x48_2.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/line.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo2.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo3.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo4.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo5.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/photo6.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/picture_frame.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/progress_circular_background.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/progress_particle.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/robot.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_0.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_3.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_4.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_5.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_6.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_7.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_0.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_1.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_2.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_3.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_4.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_5.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_6.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/sample_thumb_7.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/scrollbar_state2.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/scrollbar_vertical_thumb.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/scrollbar_vertical_track.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/shape_1.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/shape_2.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/shape_3.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/shape_4.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/shape_5.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/star_big_on.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/stat_happy.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/stat_neutral.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/stat_sad.html
-http://developer.android.com/guide/samples/ApiDemos/res/drawable/stat_sample.html
-
-http://developer.android.com/guide/samples/LunarLander/res/layout/lunar_layout.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Cube.java
-
-http://developer.android.com/reference/android/hardware/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceViewActivity.java
-
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotePadProvider.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteServiceController.java
-
-http://developer.android.com/reference/junit/runner/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TextAlign.java
-
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NotePad.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Projector.java
-
-http://developer.android.com/guide/samples/LunarLander/tests/src/index.html
-http://developer.android.com/guide/samples/LunarLander/tests/AndroidManifest.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ColorMatrixSample.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromXml.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/MeasureText.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/ColorPickerDialog.java
-
-http://developer.android.com/guide/samples/LunarLander/res/drawable/app_lunar_lander.html
-http://developer.android.com/guide/samples/LunarLander/res/drawable/lander_crashed.html
-
-http://developer.android.com/guide/samples/LunarLander/res/drawable/lander_firing.html
-http://developer.android.com/guide/samples/LunarLander/res/drawable/lander_plain.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/StyledText.java
-
-http://developer.android.com/reference/org/apache/http/package-descr.html
-http://developer.android.com/reference/javax/net/ssl/package-descr.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/RedirectGetter.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/DrawPoints.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/MyPreference.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PathEffects.java
-
-http://developer.android.com/guide/samples/LunarLander/res/values/strings.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/cycle_7.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/anim/fade.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/hyperspace_in.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/anim/hyperspace_out.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_animation_row_left_slide.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_animation_row_right_slide.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_animation_table.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_bottom_to_top_slide.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_grid_fade.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_grid_inverse_fade.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_random_fade.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/layout_wave_scale.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/anim/push_left_in.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/push_left_out.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/anim/push_up_in.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/push_up_out.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/anim/shake.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/slide_left.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/anim/slide_right.html
-http://developer.android.com/guide/samples/ApiDemos/res/anim/slide_top_to_bottom.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/anim/wave_scale.html
-
-http://developer.android.com/guide/tutorials/views/hello-datepicker.html
-
-http://developer.android.com/guide/tutorials/views/hello-timepicker.html
-http://developer.android.com/guide/tutorials/views/hello-autocomplete.html
-
-http://developer.android.com/guide/tutorials/views/hello-gallery.html
-http://developer.android.com/guide/tutorials/views/hello-tabwidget.html
-
-http://developer.android.com/guide/tutorials/views/hello-mapview.html
-http://developer.android.com/guide/tutorials/views/hello-webview.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/SpriteTextActivity.java
-
-http://developer.android.com/guide/samples/NotePad/src/com/example/android/notepad/NoteEditor.java
-
-http://developer.android.com/reference/java/util/concurrent/locks/package-descr.html
-http://developer.android.com/guide/samples/NotePad/tests/src/com/example/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PictureLayout.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixGrabber.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RelativeLayout1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RelativeLayout2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout3.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout4.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout5.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout6.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout7.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout8.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout9.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollView1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollView2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout3.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout4.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout5.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout6.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout7.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout8.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout9.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout10.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout11.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout12.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline3.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline4.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline6.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline7.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested3.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RadioGroup1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Visibility1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List3.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List4.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List5.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List6.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List7.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List8.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/CustomView1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ImageButton1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/DateWidgets1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/DateWidgets2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Gallery1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Gallery2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Spinner1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Grid1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Grid2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ImageSwitcher1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TextSwitcher1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Animation1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Animation2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Controls1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Controls2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete3.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete4.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete5.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar3.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar4.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus3.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete6.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Buttons1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ChronometerDemo.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList3.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ImageView1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionFocus.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionScroll.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionView.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation3.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation4.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation5.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation6.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation7.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout10.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List10.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List11.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List12.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List13.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List14.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List9.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/MapViewCompassDemo.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/MapViewDemo.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RatingBar1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar3.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/SeekBar1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs2.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs3.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/WebView1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/LabelMaker.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RelativeLayout1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/CustomView1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation7.java
-
-http://developer.android.com/reference/android/text/method/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/NotifyWithText.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionScroll.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RadioGroup1.java
-
-http://developer.android.com/reference/org/apache/http/entity/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/TriangleActivity.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs3.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/WebView1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List14.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout9.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline7.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout6.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout3.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/HelloWorld.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/AlphaBitmap.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Buttons1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout10.java
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout11.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout7.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout3.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollView2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/MatrixStack.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout5.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar3.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/AlarmService_Service.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete6.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List6.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/Grid.java
-
-http://developer.android.com/reference/org/apache/http/protocol/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Regions.java
-
-http://developer.android.com/guide/samples/LunarLander/src/com/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline4.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferencesFromCode.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/PreferenceDependencies.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceView.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalSample.java
-
-http://developer.android.com/guide/samples/NotePad/tests/src/com/example/android/index.html
-http://developer.android.com/reference/javax/security/auth/callback/package-descr.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List5.java
-
-http://developer.android.com/reference/javax/sql/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List9.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List8.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/Link.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/LogTextBox.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/LogTextBox1.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/Marquee.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List7.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout10.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline3.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline6.java
-
-http://developer.android.com/reference/android/location/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ImageSwitcher1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArguments.java
-
-http://developer.android.com/reference/java/util/regex/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Cube.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLColor.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLFace.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLShape.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLVertex.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLWorld.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Kube.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/KubeRenderer.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Layer.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/M4.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar4.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Gallery2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus3.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Sweep.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List12.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Xfermodes.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/DateWidgets1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Animation2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation4.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLWorld.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/content/ReadAsset.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Tabs1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PolyToPoly.java
-
-http://developer.android.com/reference/org/apache/http/cookie/params/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout4.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/StatusBarNotifications.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/LogTextBox.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Pictures.java
-
-http://developer.android.com/reference/java/security/cert/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List13.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ChronometerDemo.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/KubeRenderer.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/SensorTest.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete5.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation3.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/SendResult.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout9.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Controls2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TextSwitcher1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/ContactsSelectInstrumentation.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ImageButton1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout8.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Kube.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Controls1.java
-
-http://developer.android.com/reference/org/apache/http/util/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Layer.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List10.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/BaselineNested3.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List4.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollBar1.java
-
-http://developer.android.com/reference/java/security/interfaces/package-descr.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation5.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout5.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/IncomingMessageView.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Gallery1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLColor.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Visibility1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/DateWidgets2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/PathFillTypes.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout12.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/Patterns.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List3.java
-
-http://developer.android.com/guide/samples/LunarLander/res/drawable-port/earthrise.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Baseline2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout7.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/TableLayout1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Grid1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RelativeLayout2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Spinner1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLVertex.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Focus1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout6.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionFocus.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout4.java
-
-http://developer.android.com/guide/samples/LunarLander/src/com/example/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/M4.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/InternalSelectionView.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/LogTextBox1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList3.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ScrollView1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/RatingBar1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Grid2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/MenuInflateFromXml.java
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/UnicodeChart.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete3.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/Cube.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout8.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List2.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/Marquee.java
-
-http://developer.android.com/guide/samples/ApiDemos/res/values/arrays.html
-http://developer.android.com/guide/samples/ApiDemos/res/values/attrs.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/values/colors.html
-http://developer.android.com/guide/samples/ApiDemos/res/values/ids.html
-
-http://developer.android.com/guide/samples/ApiDemos/res/values/strings.html
-http://developer.android.com/guide/samples/ApiDemos/res/values/styles.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/app/LocalService.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/Animation1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLShape.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LayoutAnimation6.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/MapViewCompassDemo.java
-
-http://developer.android.com/guide/samples/LunarLander/tests/src/com/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List11.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ImageView1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/kube/GLFace.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/ProgressBar3.java
-
-http://developer.android.com/guide/samples/LunarLander/src/com/example/android/index.html
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/LinearLayout1.java
-
-http://developer.android.com/guide/samples/NotePad/tests/src/com/example/android/notepad/index.html
-
-http://developer.android.com/guide/samples/NotePad/tests/src/com/example/android/notepad/NotePadTest.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/SeekBar1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/List1.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/graphics/spritetext/SpriteTextRenderer.java
-
-http://developer.android.com/guide/samples/NotePad/res/drawable/index.html
-http://developer.android.com/guide/samples/NotePad/res/layout/index.html
-
-http://developer.android.com/guide/samples/NotePad/res/values/index.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete4.java
-
-http://developer.android.com/guide/samples/NotePad/res/drawable/app_notes.html
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/app/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/os/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/view/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/AllTests.html
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/ApiDemosApplicationTests.html
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/ApiDemosTest.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/MapViewDemo.java
-
-http://developer.android.com/guide/samples/NotePad/tests/src/com/example/android/notepad/NotePadTest.java
-
-http://developer.android.com/guide/samples/NotePad/res/values/strings.html
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete2.java
-
-http://developer.android.com/guide/samples/LunarLander/tests/src/com/example/index.html
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/view/Focus2ActivityTest.html
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/view/Focus2AndroidTest.html
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/ApiDemosTest.java
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/ApiDemosApplicationTests.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/index.html
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/AllTests.java
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/os/MorseCodeConverterTest.html
-
-http://developer.android.com/guide/samples/LunarLander/tests/src/com/example/android/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/app/ForwardingTest.html
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/app/LocalServiceTest.html
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/view/Focus2AndroidTest.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/text/Link.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/animation/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/ApiDemos.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/ApiDemosApplication.html
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/app/ForwardingTest.java
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/view/Focus2ActivityTest.java
-
-http://developer.android.com/guide/samples/LunarLander/src/com/example/android/lunarlander/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/os/MorseCodeConverterTest.java
-
-http://developer.android.com/guide/samples/NotePad/res/layout/note_editor.html
-http://developer.android.com/guide/samples/NotePad/res/layout/noteslist_item.html
-
-http://developer.android.com/guide/samples/NotePad/res/layout/title_editor.html
-http://developer.android.com/guide/samples/LunarLander/tests/src/com/example/android/lunarlander/index.html
-
-http://developer.android.com/guide/samples/ApiDemos/tests/src/com/example/android/apis/app/LocalServiceTest.java
-
-http://developer.android.com/guide/samples/LunarLander/src/com/example/android/lunarlander/LunarLander.html
-
-http://developer.android.com/guide/samples/LunarLander/src/com/example/android/lunarlander/LunarView.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/MorseCode.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/MorseCodeConverter.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/Sensors.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/ApiDemosApplication.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Audio.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Video.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/VideoViewDemo.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/animation/Rotate3dAnimation.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/animation/Transition3d.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/ApiDemos.java
-
-http://developer.android.com/guide/samples/LunarLander/tests/src/com/example/android/lunarlander/LunarLanderTest.html
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/MorseCode.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Audio.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/MorseCodeConverter.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/VideoViewDemo.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/animation/Rotate3dAnimation.java
-
-http://developer.android.com/guide/samples/LunarLander/src/com/example/android/lunarlander/LunarView.java
-
-http://developer.android.com/guide/samples/LunarLander/src/com/example/android/lunarlander/LunarLander.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/os/Sensors.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Video.java
-
-http://developer.android.com/guide/samples/LunarLander/tests/src/com/example/android/lunarlander/LunarLanderTest.java
-
-http://developer.android.com/guide/samples/ApiDemos/src/com/example/android/apis/animation/Transition3d.java \ No newline at end of file
diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java
index 42e28e8..cf72f38 100644
--- a/graphics/java/android/graphics/drawable/Drawable.java
+++ b/graphics/java/android/graphics/drawable/Drawable.java
@@ -739,8 +739,6 @@ public abstract class Drawable {
if (r != null) {
((BitmapDrawable) drawable).setDensityScale(r.getDisplayMetrics());
}
- } else if (name.equals("nine-patch")) {
- drawable = new NinePatchDrawable();
} else {
throw new XmlPullParserException(parser.getPositionDescription() +
": invalid drawable tag " + name);
diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
index dace96c..3ded37b 100644
--- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java
+++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
@@ -17,15 +17,6 @@
package android.graphics.drawable;
import android.graphics.*;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.util.AttributeSet;
-import android.util.TypedValue;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-import java.io.InputStream;
/**
*
@@ -41,9 +32,6 @@ public class NinePatchDrawable extends Drawable {
private Paint mPaint;
private boolean mMutated;
- NinePatchDrawable() {
- }
-
public NinePatchDrawable(Bitmap bitmap, byte[] chunk, Rect padding, String srcName) {
this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding));
}
@@ -52,13 +40,6 @@ public class NinePatchDrawable extends Drawable {
this(new NinePatchState(patch, null));
}
- private void setNinePatchState(NinePatchState state) {
- mNinePatchState = state;
- mNinePatch = state.mNinePatch;
- mPadding = state.mPadding;
- if (state.mDither) setDither(state.mDither);
- }
-
// overrides
@Override
@@ -92,55 +73,6 @@ public class NinePatchDrawable extends Drawable {
getPaint().setDither(dither);
}
- @Override
- public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
- throws XmlPullParserException, IOException {
- super.inflate(r, parser, attrs);
-
- TypedArray a = r.obtainAttributes(attrs, com.android.internal.R.styleable.NinePatchDrawable);
-
- final int id = a.getResourceId(com.android.internal.R.styleable.NinePatchDrawable_src, 0);
- if (id == 0) {
- throw new XmlPullParserException(parser.getPositionDescription() +
- ": <nine-patch> requires a valid src attribute");
- }
-
- final boolean dither = a.getBoolean(
- com.android.internal.R.styleable.NinePatchDrawable_dither, false);
- final BitmapFactory.Options options = new BitmapFactory.Options();
- if (dither) {
- options.inDither = false;
- }
-
- final Rect padding = new Rect();
- Bitmap bitmap = null;
-
- try {
- final TypedValue value = new TypedValue();
- final InputStream is = r.openRawResource(id, value);
-
- bitmap = BitmapFactory.decodeStream(r, value, is, padding, options);
-
- is.close();
- } catch (IOException e) {
- // Ignore
- }
-
- if (bitmap == null) {
- throw new XmlPullParserException(parser.getPositionDescription() +
- ": <nine-patch> requires a valid src attribute");
- } else if (bitmap.getNinePatchChunk() == null) {
- throw new XmlPullParserException(parser.getPositionDescription() +
- ": <nine-patch> requires a valid 9-patch source image");
- }
-
- setNinePatchState(new NinePatchState(
- new NinePatch(bitmap, bitmap.getNinePatchChunk(), "XML 9-patch"), padding, dither));
-
- a.recycle();
- }
-
-
public Paint getPaint() {
if (mPaint == null) {
mPaint = new Paint();
@@ -209,24 +141,17 @@ public class NinePatchDrawable extends Drawable {
final static class NinePatchState extends ConstantState {
final NinePatch mNinePatch;
final Rect mPadding;
- final boolean mDither;
int mChangingConfigurations;
NinePatchState(NinePatch ninePatch, Rect padding) {
- this(ninePatch, padding, false);
- }
-
- NinePatchState(NinePatch ninePatch, Rect rect, boolean dither) {
mNinePatch = ninePatch;
- mPadding = rect;
- mDither = dither;
+ mPadding = padding;
}
NinePatchState(NinePatchState state) {
mNinePatch = new NinePatch(state.mNinePatch);
mPadding = new Rect(state.mPadding);
mChangingConfigurations = state.mChangingConfigurations;
- mDither = state.mDither;
}
@Override
@@ -241,7 +166,9 @@ public class NinePatchDrawable extends Drawable {
}
private NinePatchDrawable(NinePatchState state) {
- setNinePatchState(state);
+ mNinePatchState = state;
+ mNinePatch = state.mNinePatch;
+ mPadding = state.mPadding;
}
}
diff --git a/graphics/java/android/graphics/drawable/StateListDrawable.java b/graphics/java/android/graphics/drawable/StateListDrawable.java
index d22a4ba..475825c 100644
--- a/graphics/java/android/graphics/drawable/StateListDrawable.java
+++ b/graphics/java/android/graphics/drawable/StateListDrawable.java
@@ -203,20 +203,7 @@ public class StateListDrawable extends DrawableContainer {
public Drawable getStateDrawable(int index) {
return mStateListState.getChildren()[index];
}
-
- /**
- * Gets the index of the drawable with the provided state set.
- *
- * @param stateSet the state set to look up
- * @return the index of the provided state set, or -1 if not found
- * @hide pending API council
- * @see #getStateDrawable(int)
- * @see #getStateSet(int)
- */
- public int getStateDrawableIndex(int[] stateSet) {
- return mStateListState.indexOfStateSet(stateSet);
- }
-
+
@Override
public Drawable mutate() {
if (!mMutated && super.mutate() == this) {
diff --git a/include/media/AudioRecord.h b/include/media/AudioRecord.h
index ff64855..dd585c9 100644
--- a/include/media/AudioRecord.h
+++ b/include/media/AudioRecord.h
@@ -125,8 +125,7 @@ public:
* channelCount: Number of PCM channels (e.g 2 for stereo).
* frameCount: Total size of track PCM buffer in frames. This defines the
* latency of the track.
- * flags: A bitmask of acoustic values from enum record_flags. It enables
- * AGC, NS, and IIR.
+ * flags: Reserved for future use.
* cbf: Callback function. If not null, this function is called periodically
* to provide new PCM data.
* notificationFrames: The callback function is called each time notificationFrames PCM
@@ -134,12 +133,6 @@ public:
* user Context for use by the callback receiver.
*/
- enum record_flags {
- RECORD_AGC_ENABLE = AudioSystem::AGC_ENABLE,
- RECORD_NS_ENABLE = AudioSystem::NS_ENABLE,
- RECORD_IIR_ENABLE = AudioSystem::TX_IIR_ENABLE
- };
-
AudioRecord(int streamType,
uint32_t sampleRate = 0,
int format = 0,
diff --git a/include/media/IMediaRecorder.h b/include/media/IMediaRecorder.h
index eace996..0dff84e 100644
--- a/include/media/IMediaRecorder.h
+++ b/include/media/IMediaRecorder.h
@@ -24,7 +24,6 @@ namespace android {
class ISurface;
class ICamera;
-class IMediaPlayerClient;
class IMediaRecorder: public IInterface
{
@@ -42,7 +41,6 @@ public:
virtual status_t setOutputFile(int fd, int64_t offset, int64_t length) = 0;
virtual status_t setVideoSize(int width, int height) = 0;
virtual status_t setVideoFrameRate(int frames_per_second) = 0;
- virtual status_t setListener(const sp<IMediaPlayerClient>& listener) = 0;
virtual status_t prepare() = 0;
virtual status_t getMaxAmplitude(int* max) = 0;
virtual status_t start() = 0;
diff --git a/include/media/PVMediaRecorder.h b/include/media/PVMediaRecorder.h
index 3315c59..f795d04 100644
--- a/include/media/PVMediaRecorder.h
+++ b/include/media/PVMediaRecorder.h
@@ -19,7 +19,6 @@
#define ANDROID_PVMEDIARECORDER_H
#include <media/mediarecorder.h>
-#include <media/IMediaPlayerClient.h>
namespace android {
@@ -45,7 +44,6 @@ public:
status_t setPreviewSurface(const sp<ISurface>& surface);
status_t setOutputFile(const char *path);
status_t setOutputFile(int fd, int64_t offset, int64_t length);
- status_t setListener(const sp<IMediaPlayerClient>& listener);
status_t prepare();
status_t start();
status_t stop();
diff --git a/include/media/mediarecorder.h b/include/media/mediarecorder.h
index 8991f08..436e8f1 100644
--- a/include/media/mediarecorder.h
+++ b/include/media/mediarecorder.h
@@ -19,7 +19,6 @@
#define ANDROID_MEDIARECORDER_H
#include <utils.h>
-#include <media/IMediaPlayerClient.h>
namespace android {
@@ -88,24 +87,7 @@ enum media_recorder_states {
MEDIA_RECORDER_RECORDING = 1 << 4,
};
-// The "msg" code passed to the listener in notify.
-enum {
- MEDIA_RECORDER_EVENT_ERROR = 1
-};
-
-enum {
- MEDIA_RECORDER_ERROR_UNKNOWN = 1
-};
-
-// ----------------------------------------------------------------------------
-// ref-counted object for callbacks
-class MediaRecorderListener: virtual public RefBase
-{
-public:
- virtual void notify(int msg, int ext1, int ext2) = 0;
-};
-
-class MediaRecorder : public BnMediaPlayerClient
+class MediaRecorder
{
public:
MediaRecorder();
@@ -123,7 +105,6 @@ public:
status_t setOutputFile(int fd, int64_t offset, int64_t length);
status_t setVideoSize(int width, int height);
status_t setVideoFrameRate(int frames_per_second);
- status_t setListener(const sp<MediaRecorderListener>& listener);
status_t prepare();
status_t getMaxAmplitude(int* max);
status_t start();
@@ -132,22 +113,18 @@ public:
status_t init();
status_t close();
status_t release();
- void notify(int msg, int ext1, int ext2);
private:
void doCleanUp();
status_t doReset();
- sp<IMediaRecorder> mMediaRecorder;
- sp<MediaRecorderListener> mListener;
- media_recorder_states mCurrentState;
- bool mIsAudioSourceSet;
- bool mIsVideoSourceSet;
- bool mIsAudioEncoderSet;
- bool mIsVideoEncoderSet;
- bool mIsOutputFileSet;
- Mutex mLock;
- Mutex mNotifyLock;
+ sp<IMediaRecorder> mMediaRecorder;
+ media_recorder_states mCurrentState;
+ bool mIsAudioSourceSet;
+ bool mIsVideoSourceSet;
+ bool mIsAudioEncoderSet;
+ bool mIsVideoEncoderSet;
+ bool mIsOutputFileSet;
};
}; // namespace android
diff --git a/include/ui/CameraHardwareInterface.h b/include/ui/CameraHardwareInterface.h
index 73036f0..b068c52 100644
--- a/include/ui/CameraHardwareInterface.h
+++ b/include/ui/CameraHardwareInterface.h
@@ -87,9 +87,6 @@ public:
/** Return the IMemoryHeap for the preview image heap */
virtual sp<IMemoryHeap> getPreviewHeap() const = 0;
- /** Return the IMemoryHeap for the raw image heap */
- virtual sp<IMemoryHeap> getRawHeap() const = 0;
-
/**
* Start preview mode. When a preview image is available
* preview_callback is called with the user parameter. The
diff --git a/include/utils/ResourceTypes.h b/include/utils/ResourceTypes.h
index 7d3fcf2..d83a33c 100644
--- a/include/utils/ResourceTypes.h
+++ b/include/utils/ResourceTypes.h
@@ -1101,22 +1101,16 @@ struct ResTable_config
return false;
}
- // Return true if 'this' can be considered a match for the parameters in
+ // Return true if 'this' can be considered a match for the parameters in
// 'settings'.
- // Note this is asymetric. A default piece of data will match every request
- // but a request for the default should not match odd specifics
- // (ie, request with no mcc should not match a particular mcc's data)
- // settings is the requested settings
inline bool match(const ResTable_config& settings) const {
if (imsi != 0) {
- if ((settings.mcc != 0 && mcc != 0
- && mcc != settings.mcc) ||
- (settings.mcc == 0 && mcc != 0)) {
+ if (settings.mcc != 0 && mcc != 0
+ && mcc != settings.mcc) {
return false;
}
- if ((settings.mnc != 0 && mnc != 0
- && mnc != settings.mnc) ||
- (settings.mnc == 0 && mnc != 0)) {
+ if (settings.mnc != 0 && mnc != 0
+ && mnc != settings.mnc) {
return false;
}
}
diff --git a/libs/audioflinger/A2dpAudioInterface.cpp b/libs/audioflinger/A2dpAudioInterface.cpp
index eb00f8c..d1b7af3 100644
--- a/libs/audioflinger/A2dpAudioInterface.cpp
+++ b/libs/audioflinger/A2dpAudioInterface.cpp
@@ -131,7 +131,8 @@ status_t A2dpAudioInterface::dump(int fd, const Vector<String16>& args)
// ----------------------------------------------------------------------------
A2dpAudioInterface::A2dpAudioStreamOut::A2dpAudioStreamOut() :
- mFd(-1), mStandby(true), mStartCount(0), mRetryCount(0), mData(NULL)
+ mFd(-1), mStandby(true), mStartCount(0), mRetryCount(0), mData(NULL),
+ mInitialized(false)
{
// use any address by default
strncpy(mA2dpAddress, "00:00:00:00:00:00", sizeof(mA2dpAddress));
@@ -166,14 +167,13 @@ ssize_t A2dpAudioInterface::A2dpAudioStreamOut::write(const void* buffer, size_t
status_t status = NO_INIT;
size_t remaining = bytes;
- if (!mData) {
- status = a2dp_init(44100, 2, &mData);
+ if (!mInitialized) {
+ status = a2dp_init(mA2dpAddress, 44100, 2, &mData);
if (status < 0) {
LOGE("a2dp_init failed err: %d\n", status);
- mData = NULL;
goto Error;
}
- a2dp_set_sink(mData, mA2dpAddress);
+ mInitialized = true;
}
while (remaining > 0) {
@@ -191,6 +191,7 @@ ssize_t A2dpAudioInterface::A2dpAudioStreamOut::write(const void* buffer, size_t
return bytes;
Error:
+ close();
// Simulate audio output timing in case of error
usleep(bytes * 1000000 / frameSize() / sampleRate());
@@ -217,8 +218,7 @@ status_t A2dpAudioInterface::A2dpAudioStreamOut::setAddress(const char* address)
if (strcmp(address, mA2dpAddress)) {
strcpy(mA2dpAddress, address);
- if (mData)
- a2dp_set_sink(mData, mA2dpAddress);
+ close();
}
return NO_ERROR;
@@ -229,6 +229,7 @@ status_t A2dpAudioInterface::A2dpAudioStreamOut::close()
if (mData) {
a2dp_cleanup(mData);
mData = NULL;
+ mInitialized = false;
}
return NO_ERROR;
}
diff --git a/libs/audioflinger/A2dpAudioInterface.h b/libs/audioflinger/A2dpAudioInterface.h
index a56e8a0..5bef5da 100644
--- a/libs/audioflinger/A2dpAudioInterface.h
+++ b/libs/audioflinger/A2dpAudioInterface.h
@@ -96,6 +96,7 @@ private:
int mRetryCount;
char mA2dpAddress[20];
void* mData;
+ bool mInitialized;
};
Mutex mLock;
diff --git a/libs/audioflinger/AudioFlinger.cpp b/libs/audioflinger/AudioFlinger.cpp
index 92c40e9..557d93b 100644
--- a/libs/audioflinger/AudioFlinger.cpp
+++ b/libs/audioflinger/AudioFlinger.cpp
@@ -171,6 +171,13 @@ AudioFlinger::AudioFlinger()
} else {
LOGE("Couldn't even initialize the stubbed audio hardware!");
}
+
+ char value[PROPERTY_VALUE_MAX];
+ property_get("ro.audio.silent", value, "0");
+ if (atoi(value)) {
+ LOGD("Silence is golden");
+ setMasterMute(true);
+ }
}
AudioFlinger::~AudioFlinger()
@@ -988,16 +995,6 @@ bool AudioFlinger::MixerThread::threadLoop()
IPCThreadState::self()->flushCommands();
mWaitWorkCV.wait(mLock);
LOGV("Audio hardware exiting standby, output %d\n", mOutputType);
-
- if (mMasterMute == false) {
- char value[PROPERTY_VALUE_MAX];
- property_get("ro.audio.silent", value, "0");
- if (atoi(value)) {
- LOGD("Silence is golden");
- setMasterMute(true);
- }
- }
-
standbyTime = systemTime() + kStandbyTimeInNsecs;
continue;
}
diff --git a/libs/audioflinger/AudioFlinger.h b/libs/audioflinger/AudioFlinger.h
index 77f064b..dfbb1e9 100644
--- a/libs/audioflinger/AudioFlinger.h
+++ b/libs/audioflinger/AudioFlinger.h
@@ -223,7 +223,10 @@ private:
enum track_flags {
STEPSERVER_FAILED = 0x01, // StepServer could not acquire cblk->lock mutex
SYSTEM_FLAGS_MASK = 0x0000ffffUL,
- // The upper 16 bits are used for track-specific flags.
+
+ AUDIO_IN_AGC_ENABLE = AudioSystem::AGC_ENABLE << 16,
+ AUDIO_IN_NS_ENABLE = AudioSystem::NS_ENABLE << 16,
+ AUDIO_IN_IIR_ENABLE = AudioSystem::TX_IIR_ENABLE << 16
};
TrackBase(const sp<MixerThread>& mixerThread,
diff --git a/libs/audioflinger/AudioHardwareGeneric.h b/libs/audioflinger/AudioHardwareGeneric.h
index c949aa1..1d58389 100644
--- a/libs/audioflinger/AudioHardwareGeneric.h
+++ b/libs/audioflinger/AudioHardwareGeneric.h
@@ -47,7 +47,7 @@ public:
virtual size_t bufferSize() const { return 4096; }
virtual int channelCount() const { return 2; }
virtual int format() const { return AudioSystem::PCM_16_BIT; }
- virtual uint32_t latency() const { return 20; }
+ virtual uint32_t latency() const { return 0; }
virtual status_t setVolume(float volume) { return INVALID_OPERATION; }
virtual ssize_t write(const void* buffer, size_t bytes);
virtual status_t standby();
diff --git a/libs/ui/Camera.cpp b/libs/ui/Camera.cpp
index b3cbda1..6c60b85 100644
--- a/libs/ui/Camera.cpp
+++ b/libs/ui/Camera.cpp
@@ -110,8 +110,6 @@ sp<Camera> Camera::connect()
if (c->mCamera != 0) {
c->mCamera->asBinder()->linkToDeath(c);
c->mStatus = NO_ERROR;
- } else {
- c.clear();
}
return c;
}
diff --git a/libs/utils/Threads.cpp b/libs/utils/Threads.cpp
index 5f407a9..74271ba 100644
--- a/libs/utils/Threads.cpp
+++ b/libs/utils/Threads.cpp
@@ -896,7 +896,6 @@ void ReadWriteLock::unlockForRead()
{
mLock.lock();
if (mNumReaders == 0) {
- mLock.unlock();
LOG(LOG_WARN, "thread",
"WARNING: unlockForRead requested, but not locked\n");
return;
@@ -962,7 +961,6 @@ void ReadWriteLock::unlockForWrite()
{
mLock.lock();
if (mNumWriters == 0) {
- mLock.unlock();
LOG(LOG_WARN, "thread",
"WARNING: unlockForWrite requested, but not locked\n");
return;
@@ -974,7 +972,7 @@ void ReadWriteLock::unlockForWrite()
//printf(" wrlk held %.3f msec\n",
// (double) mDebugTimer.durationUsecs() / 1000.0);
#endif
- mWriteWaiter.signal(); // should other writers get first dibs?
+ // mWriteWaiter.signal(); // should other writers get first dibs?
//printf("+++ signaling readers (if any)\n");
mReadWaiter.broadcast(); // wake all readers (if any)
mLock.unlock();
diff --git a/location/java/com/android/internal/location/CellState.java b/location/java/com/android/internal/location/CellState.java
index eb6535e..8f6ca1f 100644
--- a/location/java/com/android/internal/location/CellState.java
+++ b/location/java/com/android/internal/location/CellState.java
@@ -168,8 +168,15 @@ public class CellState {
}
}
- public void updateRadioType(int radioType) {
- mRadioType = radioType;
+ public void updateRadioType(TelephonyManager telephonyManager) {
+ // Get radio type
+ int radioType = telephonyManager.getNetworkType();
+ if (radioType == TelephonyManager.NETWORK_TYPE_GPRS ||
+ radioType == TelephonyManager.NETWORK_TYPE_EDGE) {
+ mRadioType = RADIO_TYPE_GPRS;
+ } else if (radioType == TelephonyManager.NETWORK_TYPE_UMTS) {
+ mRadioType = RADIO_TYPE_WCDMA;
+ }
if (Log.isLoggable(TAG, Log.VERBOSE)) {
Log.d(TAG, "updateRadioType(): " + mLac +"," + mCid + "," + mMnc +"," + mMcc + "," +
diff --git a/location/java/com/android/internal/location/INetworkLocationManager.java b/location/java/com/android/internal/location/INetworkLocationManager.java
index d85ff0a..6b632fd 100644
--- a/location/java/com/android/internal/location/INetworkLocationManager.java
+++ b/location/java/com/android/internal/location/INetworkLocationManager.java
@@ -28,7 +28,7 @@ public interface INetworkLocationManager {
/* callback to allow installation to occur in Location Manager's thread */
public interface InstallCallback {
- void installNetworkLocationProvider(INetworkLocationManager manager);
+ void installNetworkLocationProvider(Context context, INetworkLocationManager manager);
}
void setInstallCallback(InstallCallback callback);
diff --git a/media/java/android/media/AudioRecord.java b/media/java/android/media/AudioRecord.java
index 0ef7760..fd990fe 100644
--- a/media/java/android/media/AudioRecord.java
+++ b/media/java/android/media/AudioRecord.java
@@ -532,19 +532,12 @@ public class AudioRecord
* @param audioData the array to which the recorded audio data is written.
* @param offsetInBytes index in audioData from which the data is written.
* @param sizeInBytes the number of requested bytes.
- * @return the number of bytes that were read or or {@link #ERROR_INVALID_OPERATION}
- * if the object wasn't properly initialized, or {@link #ERROR_BAD_VALUE} if
- * the parameters don't resolve to valid data and indexes.
- * The number of bytes will not exceed sizeInBytes.
+ * @return the number of bytes that were read or -1 if the object wasn't properly
+ * initialized. The number of bytes will not exceed sizeInBytes.
*/
public int read(byte[] audioData, int offsetInBytes, int sizeInBytes) {
if (mState != STATE_INITIALIZED) {
- return ERROR_INVALID_OPERATION;
- }
-
- if ( (audioData == null) || (offsetInBytes < 0 ) || (sizeInBytes < 0)
- || (offsetInBytes + sizeInBytes > audioData.length)) {
- return ERROR_BAD_VALUE;
+ return -1;
}
return native_read_in_byte_array(audioData, offsetInBytes, sizeInBytes);
@@ -556,19 +549,12 @@ public class AudioRecord
* @param audioData the array to which the recorded audio data is written.
* @param offsetInShorts index in audioData from which the data is written.
* @param sizeInShorts the number of requested shorts.
- * @return the number of bytes that were read or or {@link #ERROR_INVALID_OPERATION}
- * if the object wasn't properly initialized, or {@link #ERROR_BAD_VALUE} if
- * the parameters don't resolve to valid data and indexes.
- * The number of shorts will not exceed sizeInShorts.
+ * @return the number of shorts that were read. or -1 if the object wasn't properly
+ * initialized. The number of shorts will not exceed sizeInShorts
*/
public int read(short[] audioData, int offsetInShorts, int sizeInShorts) {
if (mState != STATE_INITIALIZED) {
- return ERROR_INVALID_OPERATION;
- }
-
- if ( (audioData == null) || (offsetInShorts < 0 ) || (sizeInShorts < 0)
- || (offsetInShorts + sizeInShorts > audioData.length)) {
- return ERROR_BAD_VALUE;
+ return -1;
}
return native_read_in_short_array(audioData, offsetInShorts, sizeInShorts);
@@ -580,18 +566,12 @@ public class AudioRecord
* is not a direct buffer, this method will always return 0.
* @param audioBuffer the direct buffer to which the recorded audio data is written.
* @param sizeInBytes the number of requested bytes.
- * @return the number of bytes that were read or or {@link #ERROR_INVALID_OPERATION}
- * if the object wasn't properly initialized, or {@link #ERROR_BAD_VALUE} if
- * the parameters don't resolve to valid data and indexes.
- * The number of bytes will not exceed sizeInBytes.
+ * @return the number of bytes that were read or -1 if the object wasn't properly
+ * initialized. The number of bytes will not exceed sizeInBytes.
*/
public int read(ByteBuffer audioBuffer, int sizeInBytes) {
if (mState != STATE_INITIALIZED) {
- return ERROR_INVALID_OPERATION;
- }
-
- if ( (audioBuffer == null) || (sizeInBytes < 0) ) {
- return ERROR_BAD_VALUE;
+ return -1;
}
return native_read_in_direct_buffer(audioBuffer, sizeInBytes);
diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java
index 997cd44..e32835c 100644
--- a/media/java/android/media/AudioTrack.java
+++ b/media/java/android/media/AudioTrack.java
@@ -436,15 +436,6 @@ public class AudioTrack
public int getSampleRate() {
return mSampleRate;
}
-
- /**
- * @hide
- * Returns the current playback rate in Hz. Note that this rate may differ from one set using
- * {@link #setPlaybackRate(int)} as the value effectively set is implementation-dependent.
- */
- public int getPlaybackRate() {
- return native_get_playback_rate();
- }
/**
* Returns the configured audio data format. See {@link AudioFormat#ENCODING_PCM_16BIT}
@@ -532,8 +523,8 @@ public class AudioTrack
/**
* Returns the hardware output sample rate
*/
- static public int getNativeOutputSampleRate(int streamType) {
- return native_get_output_sample_rate(streamType);
+ static public int getNativeOutputSampleRate() {
+ return native_get_output_sample_rate();
}
/**
@@ -659,19 +650,16 @@ public class AudioTrack
* content. Setting it to half the sample rate of the content will cause the playback to
* last twice as long, but will also result result in a negative pitch shift.
* The current implementation supports a maximum sample rate of twice the hardware output
- * sample rate (see {@link #getNativeOutputSampleRate(int)}). Use {@link #getSampleRate()} to
+ * sample rate (see {@link #getNativeOutputSampleRate()}). Use {@link #getSampleRate()} to
* check the rate actually used in hardware after potential clamping.
* @param sampleRateInHz
- * @return error code or success, see {@link #SUCCESS}, {@link #ERROR_BAD_VALUE},
+ * @return error code or success, see {@link #SUCCESS},
* {@link #ERROR_INVALID_OPERATION}
*/
public int setPlaybackRate(int sampleRateInHz) {
if (mState != STATE_INITIALIZED) {
return ERROR_INVALID_OPERATION;
}
- if (sampleRateInHz <= 0) {
- return ERROR_BAD_VALUE;
- }
native_set_playback_rate(sampleRateInHz);
return SUCCESS;
}
@@ -711,7 +699,7 @@ public class AudioTrack
*/
public int setPlaybackHeadPosition(int positionInFrames) {
synchronized(mPlayStateLock) {
- if ((mPlayState == PLAYSTATE_STOPPED) || (mPlayState == PLAYSTATE_PAUSED)) {
+ if(mPlayState == PLAYSTATE_STOPPED) {
return native_set_position(positionInFrames);
} else {
return ERROR_INVALID_OPERATION;
@@ -729,9 +717,6 @@ public class AudioTrack
* {@link #ERROR_INVALID_OPERATION}
*/
public int setLoopPoints(int startInFrames, int endInFrames, int loopCount) {
- if (mDataLoadMode == MODE_STREAM) {
- return ERROR_INVALID_OPERATION;
- }
return native_set_loop(startInFrames, endInFrames, loopCount);
}
@@ -821,9 +806,8 @@ public class AudioTrack
* @param audioData the array that holds the data to play.
* @param offsetInBytes the offset in audioData where the data to play starts.
* @param sizeInBytes the number of bytes to read in audioData after the offset.
- * @return the number of bytes that were written or {@link #ERROR_INVALID_OPERATION}
- * if the object wasn't properly initialized, or {@link #ERROR_BAD_VALUE} if
- * the parameters don't resolve to valid data and indexes.
+ * @return the number of bytes that were written or -1 if the object wasn't properly
+ * initialized.
*/
public int write(byte[] audioData,int offsetInBytes, int sizeInBytes) {
@@ -832,14 +816,11 @@ public class AudioTrack
&& (sizeInBytes > 0)) {
mState = STATE_INITIALIZED;
}
+ //TODO check if future writes should be forbidden for static tracks
+ // or: how to update data for static tracks?
if (mState != STATE_INITIALIZED) {
- return ERROR_INVALID_OPERATION;
- }
-
- if ( (audioData == null) || (offsetInBytes < 0 ) || (sizeInBytes < 0)
- || (offsetInBytes + sizeInBytes > audioData.length)) {
- return ERROR_BAD_VALUE;
+ return -1;
}
return native_write_byte(audioData, offsetInBytes, sizeInBytes, mAudioFormat);
@@ -851,9 +832,8 @@ public class AudioTrack
* @param audioData the array that holds the data to play.
* @param offsetInShorts the offset in audioData where the data to play starts.
* @param sizeInShorts the number of bytes to read in audioData after the offset.
- * @return the number of shorts that were written or {@link #ERROR_INVALID_OPERATION}
- * if the object wasn't properly initialized, or {@link #ERROR_BAD_VALUE} if
- * the parameters don't resolve to valid data and indexes.
+ * @return the number of shorts that were written or -1 if the object wasn't properly
+ * initialized.
*/
public int write(short[] audioData, int offsetInShorts, int sizeInShorts) {
@@ -862,14 +842,11 @@ public class AudioTrack
&& (sizeInShorts > 0)) {
mState = STATE_INITIALIZED;
}
-
- if (mState != STATE_INITIALIZED) {
- return ERROR_INVALID_OPERATION;
- }
+ //TODO check if future writes should be forbidden for static tracks
+ // or: how to update data for static tracks?
- if ( (audioData == null) || (offsetInShorts < 0 ) || (sizeInShorts < 0)
- || (offsetInShorts + sizeInShorts > audioData.length)) {
- return ERROR_BAD_VALUE;
+ if (mState != STATE_INITIALIZED) {
+ return -1;
}
return native_write_short(audioData, offsetInShorts, sizeInShorts, mAudioFormat);
@@ -1030,7 +1007,7 @@ public class AudioTrack
private native final int native_set_loop(int start, int end, int loopCount);
- static private native final int native_get_output_sample_rate(int streamType);
+ static private native final int native_get_output_sample_rate();
static private native final int native_get_min_buff_size(
int sampleRateInHz, int channelConfig, int audioFormat);
diff --git a/media/java/android/media/JetPlayer.java b/media/java/android/media/JetPlayer.java
index 9de0eec..bfa2f80 100644
--- a/media/java/android/media/JetPlayer.java
+++ b/media/java/android/media/JetPlayer.java
@@ -25,7 +25,6 @@ import android.content.res.AssetFileDescriptor;
import android.os.Looper;
import android.os.Handler;
import android.os.Message;
-import android.util.AndroidRuntimeException;
import android.util.Log;
/**
@@ -164,12 +163,8 @@ public class JetPlayer
public boolean loadJetFile(AssetFileDescriptor afd) {
- long len = afd.getLength();
- if (len < 0) {
- throw new AndroidRuntimeException("no length for fd");
- }
return native_loadJetFromFileD(
- afd.getFileDescriptor(), afd.getStartOffset(), len);
+ afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
}
@@ -256,9 +251,7 @@ public class JetPlayer
mJet,
(short)((msg.arg1 & JET_EVENT_SEG_MASK) >> JET_EVENT_SEG_SHIFT),
(byte) ((msg.arg1 & JET_EVENT_TRACK_MASK) >> JET_EVENT_TRACK_SHIFT),
- // JETCreator channel numbers start at 1, but the index starts at 0
- // in the .jet files
- (byte)(((msg.arg1 & JET_EVENT_CHAN_MASK) >> JET_EVENT_CHAN_SHIFT) + 1),
+ (byte) ((msg.arg1 & JET_EVENT_CHAN_MASK) >> JET_EVENT_CHAN_SHIFT),
(byte) ((msg.arg1 & JET_EVENT_CTRL_MASK) >> JET_EVENT_CTRL_SHIFT),
(byte) (msg.arg1 & JET_EVENT_VAL_MASK) );
}
diff --git a/media/java/android/media/MediaMetadataRetriever.java b/media/java/android/media/MediaMetadataRetriever.java
index 3a49a5f..c1a0c21 100644
--- a/media/java/android/media/MediaMetadataRetriever.java
+++ b/media/java/android/media/MediaMetadataRetriever.java
@@ -18,7 +18,6 @@ package android.media;
import android.content.ContentResolver;
import android.content.Context;
-import android.content.res.AssetFileDescriptor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
@@ -138,11 +137,11 @@ public class MediaMetadataRetriever
return;
}
- AssetFileDescriptor fd = null;
+ ParcelFileDescriptor fd = null;
try {
ContentResolver resolver = context.getContentResolver();
try {
- fd = resolver.openAssetFileDescriptor(uri, "r");
+ fd = resolver.openFileDescriptor(uri, "r");
} catch(FileNotFoundException e) {
throw new IllegalArgumentException();
}
@@ -153,14 +152,7 @@ public class MediaMetadataRetriever
if (!descriptor.valid()) {
throw new IllegalArgumentException();
}
- // Note: using getDeclaredLength so that our behavior is the same
- // as previous versions when the content provider is returning
- // a full file.
- if (fd.getDeclaredLength() < 0) {
- setDataSource(descriptor);
- } else {
- setDataSource(descriptor, fd.getStartOffset(), fd.getDeclaredLength());
- }
+ setDataSource(descriptor);
return;
} catch (SecurityException ex) {
} finally {
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
index fe1de8e..601557d 100644
--- a/media/java/android/media/MediaPlayer.java
+++ b/media/java/android/media/MediaPlayer.java
@@ -584,21 +584,14 @@ public class MediaPlayer
return;
}
- AssetFileDescriptor fd = null;
+ ParcelFileDescriptor fd = null;
try {
ContentResolver resolver = context.getContentResolver();
- fd = resolver.openAssetFileDescriptor(uri, "r");
+ fd = resolver.openFileDescriptor(uri, "r");
if (fd == null) {
return;
}
- // Note: using getDeclaredLength so that our behavior is the same
- // as previous versions when the content provider is returning
- // a full file.
- if (fd.getDeclaredLength() < 0) {
- setDataSource(fd.getFileDescriptor());
- } else {
- setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getDeclaredLength());
- }
+ setDataSource(fd.getFileDescriptor());
return;
} catch (SecurityException ex) {
} catch (IOException ex) {
diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java
index 4906cbb..3609826 100644
--- a/media/java/android/media/MediaRecorder.java
+++ b/media/java/android/media/MediaRecorder.java
@@ -16,27 +16,23 @@
package android.media;
-import android.hardware.Camera;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.util.Log;
import android.view.Surface;
+import android.hardware.Camera;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileDescriptor;
-import java.lang.ref.WeakReference;
+import android.util.Log;
/**
* Used to record audio and video. The recording control is based on a
- * simple state machine (see below).
- *
+ * simple state machine (see below).
+ *
* <p><img src="{@docRoot}images/mediarecorder_state_diagram.gif" border="0" />
* </p>
- *
+ *
* <p>A common case of using MediaRecorder to record audio works as follows:
- *
+ *
* <pre>MediaRecorder recorder = new MediaRecorder();
* recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
* recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
@@ -49,54 +45,39 @@ import java.lang.ref.WeakReference;
* recorder.reset(); // You can reuse the object by going back to setAudioSource() step
* recorder.release(); // Now the object cannot be reused
* </pre>
- *
+ *
* <p>See the <a href="{@docRoot}guide/topics/media/index.html">Audio and Video</a>
* documentation for additional help with using MediaRecorder.
*/
public class MediaRecorder
-{
+{
static {
System.loadLibrary("media_jni");
}
private final static String TAG = "MediaRecorder";
-
+
// The two fields below are accessed by native methods
@SuppressWarnings("unused")
private int mNativeContext;
-
+
@SuppressWarnings("unused")
private Surface mSurface;
private String mPath;
private FileDescriptor mFd;
- private EventHandler mEventHandler;
- private OnErrorListener mOnErrorListener;
/**
* Default constructor.
*/
public MediaRecorder() {
-
- Looper looper;
- if ((looper = Looper.myLooper()) != null) {
- mEventHandler = new EventHandler(this, looper);
- } else if ((looper = Looper.getMainLooper()) != null) {
- mEventHandler = new EventHandler(this, looper);
- } else {
- mEventHandler = null;
- }
-
- /* Native setup requires a weak reference to our object.
- * It's easier to create it here than in C++.
- */
- native_setup(new WeakReference<MediaRecorder>(this));
+ native_setup();
}
-
+
/**
* Sets a Camera to use for recording. Use this function to switch
* quickly between preview and capture mode without a teardown of
* the camera object. Must call before prepare().
- *
+ *
* @param c the Camera to use for recording
*/
public native void setCamera(Camera c);
@@ -105,15 +86,15 @@ public class MediaRecorder
* Sets a Surface to show a preview of recorded media (video). Calls this
* before prepare() to make sure that the desirable preview display is
* set.
- *
+ *
* @param sv the Surface to use for the preview
*/
public void setPreviewDisplay(Surface sv) {
mSurface = sv;
}
-
+
/**
- * Defines the audio source. These constants are used with
+ * Defines the audio source. These constants are used with
* {@link MediaRecorder#setAudioSource(int)}.
*/
public final class AudioSource {
@@ -127,7 +108,7 @@ public class MediaRecorder
}
/**
- * Defines the video source. These constants are used with
+ * Defines the video source. These constants are used with
* {@link MediaRecorder#setVideoSource(int)}.
*/
public final class VideoSource {
@@ -141,7 +122,7 @@ public class MediaRecorder
}
/**
- * Defines the output format. These constants are used with
+ * Defines the output format. These constants are used with
* {@link MediaRecorder#setOutputFormat(int)}.
*/
public final class OutputFormat {
@@ -159,7 +140,7 @@ public class MediaRecorder
};
/**
- * Defines the audio encoding. These constants are used with
+ * Defines the audio encoding. These constants are used with
* {@link MediaRecorder#setAudioEncoder(int)}.
*/
public final class AudioEncoder {
@@ -174,7 +155,7 @@ public class MediaRecorder
}
/**
- * Defines the video encoding. These constants are used with
+ * Defines the video encoding. These constants are used with
* {@link MediaRecorder#setVideoEncoder(int)}.
*/
public final class VideoEncoder {
@@ -191,50 +172,50 @@ public class MediaRecorder
/**
* Sets the audio source to be used for recording. If this method is not
* called, the output file will not contain an audio track. The source needs
- * to be specified before setting recording-parameters or encoders. Call
+ * to be specified before setting recording-parameters or encoders. Call
* this only before setOutputFormat().
- *
+ *
* @param audio_source the audio source to use
* @throws IllegalStateException if it is called after setOutputFormat()
* @see android.media.MediaRecorder.AudioSource
- */
+ */
public native void setAudioSource(int audio_source)
throws IllegalStateException;
/**
* Sets the video source to be used for recording. If this method is not
* called, the output file will not contain an video track. The source needs
- * to be specified before setting recording-parameters or encoders. Call
+ * to be specified before setting recording-parameters or encoders. Call
* this only before setOutputFormat().
- *
+ *
* @param video_source the video source to use
* @throws IllegalStateException if it is called after setOutputFormat()
* @see android.media.MediaRecorder.VideoSource
- */
+ */
public native void setVideoSource(int video_source)
throws IllegalStateException;
/**
* Sets the format of the output file produced during recording. Call this
* after setAudioSource()/setVideoSource() but before prepare().
- *
- * @param output_format the output format to use. The output format
+ *
+ * @param output_format the output format to use. The output format
* needs to be specified before setting recording-parameters or encoders.
* @throws IllegalStateException if it is called after prepare() or before
* setAudioSource()/setVideoSource().
* @see android.media.MediaRecorder.OutputFormat
- */
+ */
public native void setOutputFormat(int output_format)
throws IllegalStateException;
-
+
/**
* Sets the width and height of the video to be captured. Must be called
* after setVideoSource(). Call this after setOutFormat() but before
* prepare().
- *
+ *
* @param width the width of the video to be captured
* @param height the height of the video to be captured
- * @throws IllegalStateException if it is called after
+ * @throws IllegalStateException if it is called after
* prepare() or before setOutputFormat()
*/
public native void setVideoSize(int width, int height)
@@ -246,7 +227,7 @@ public class MediaRecorder
* prepare().
*
* @param rate the number of frames per second of video to capture
- * @throws IllegalStateException if it is called after
+ * @throws IllegalStateException if it is called after
* prepare() or before setOutputFormat().
*
* NOTE: On some devices that have auto-frame rate, this sets the
@@ -259,12 +240,12 @@ public class MediaRecorder
* Sets the audio encoder to be used for recording. If this method is not
* called, the output file will not contain an audio track. Call this after
* setOutputFormat() but before prepare().
- *
+ *
* @param audio_encoder the audio encoder to use.
* @throws IllegalStateException if it is called before
* setOutputFormat() or after prepare().
* @see android.media.MediaRecorder.AudioEncoder
- */
+ */
public native void setAudioEncoder(int audio_encoder)
throws IllegalStateException;
@@ -272,43 +253,43 @@ public class MediaRecorder
* Sets the video encoder to be used for recording. If this method is not
* called, the output file will not contain an video track. Call this after
* setOutputFormat() and before prepare().
- *
+ *
* @param video_encoder the video encoder to use.
* @throws IllegalStateException if it is called before
* setOutputFormat() or after prepare()
* @see android.media.MediaRecorder.VideoEncoder
- */
+ */
public native void setVideoEncoder(int video_encoder)
throws IllegalStateException;
/**
* Pass in the file descriptor of the file to be written. Call this after
* setOutputFormat() but before prepare().
- *
+ *
* @param fd an open file descriptor to be written into.
* @throws IllegalStateException if it is called before
* setOutputFormat() or after prepare()
- */
+ */
public void setOutputFile(FileDescriptor fd) throws IllegalStateException
{
mPath = null;
mFd = fd;
}
-
+
/**
* Sets the path of the output file to be produced. Call this after
* setOutputFormat() but before prepare().
- *
+ *
* @param path The pathname to use.
* @throws IllegalStateException if it is called before
* setOutputFormat() or after prepare()
- */
+ */
public void setOutputFile(String path) throws IllegalStateException
{
mFd = null;
mPath = path;
}
-
+
// native implementation
private native void _setOutputFile(FileDescriptor fd, long offset, long length)
throws IllegalStateException, IOException;
@@ -318,7 +299,7 @@ public class MediaRecorder
* Prepares the recorder to begin capturing and encoding data. This method
* must be called after setting up the desired audio and video sources,
* encoders, file format, etc., but before start().
- *
+ *
* @throws IllegalStateException if it is called after
* start() or before setOutputFormat().
* @throws IOException if prepare fails otherwise.
@@ -326,12 +307,8 @@ public class MediaRecorder
public void prepare() throws IllegalStateException, IOException
{
if (mPath != null) {
- FileOutputStream fos = new FileOutputStream(mPath);
- try {
- _setOutputFile(fos.getFD(), 0, 0);
- } finally {
- fos.close();
- }
+ FileOutputStream f = new FileOutputStream(mPath);
+ _setOutputFile(f.getFD(), 0, 0);
} else if (mFd != null) {
_setOutputFile(mFd, 0, 0);
} else {
@@ -341,9 +318,9 @@ public class MediaRecorder
}
/**
- * Begins capturing and encoding data to the file specified with
+ * Begins capturing and encoding data to the file specified with
* setOutputFile(). Call this after prepare().
- *
+ *
* @throws IllegalStateException if it is called before
* prepare().
*/
@@ -352,7 +329,7 @@ public class MediaRecorder
/**
* Stops recording. Call this after start(). Once recording is stopped,
* you will have to configure it again as if it has just been constructed.
- *
+ *
* @throws IllegalStateException if it is called before start()
*/
public native void stop() throws IllegalStateException;
@@ -362,118 +339,19 @@ public class MediaRecorder
* this method, you will have to configure it again as if it had just been
* constructed.
*/
- public void reset() {
- native_reset();
-
- // make sure none of the listeners get called anymore
- mEventHandler.removeCallbacksAndMessages(null);
- }
-
- private native void native_reset();
-
+ public native void reset();
+
/**
- * Returns the maximum absolute amplitude that was sampled since the last
+ * Returns the maximum absolute amplitude that was sampled since the last
* call to this method. Call this only after the setAudioSource().
- *
- * @return the maximum absolute amplitude measured since the last call, or
+ *
+ * @return the maximum absolute amplitude measured since the last call, or
* 0 when called for the first time
* @throws IllegalStateException if it is called before
* the audio source has been set.
*/
public native int getMaxAmplitude() throws IllegalStateException;
-
- /* Do not change this value without updating its counterpart
- * in include/media/mediarecorder.h!
- */
- /** Unspecified media recorder error.
- * @see android.media.MediaRecorder.OnErrorListener
- */
- public static final int MEDIA_RECORDER_ERROR_UNKNOWN = 1;
-
- /**
- * Interface definition for a callback to be invoked when an error
- * occurs while recording.
- */
- public interface OnErrorListener
- {
- /**
- * Called when an error occurs while recording.
- *
- * @param mr the MediaRecorder that encountered the error
- * @param what the type of error that has occurred:
- * <ul>
- * <li>{@link #MEDIA_RECORDER_ERROR_UNKNOWN}
- * </ul>
- * @param extra an extra code, specific to the error type
- */
- void onError(MediaRecorder mr, int what, int extra);
- }
-
- /**
- * Register a callback to be invoked when an error occurs while
- * recording.
- *
- * @param l the callback that will be run
- */
- public void setOnErrorListener(OnErrorListener l)
- {
- mOnErrorListener = l;
- }
-
- private class EventHandler extends Handler
- {
- private MediaRecorder mMediaRecorder;
-
- public EventHandler(MediaRecorder mr, Looper looper) {
- super(looper);
- mMediaRecorder = mr;
- }
-
- /* Do not change this value without updating its counterpart
- * in include/media/mediarecorder.h!
- */
- private static final int MEDIA_RECORDER_EVENT_ERROR = 1;
-
- @Override
- public void handleMessage(Message msg) {
- if (mMediaRecorder.mNativeContext == 0) {
- Log.w(TAG, "mediarecorder went away with unhandled events");
- return;
- }
- switch(msg.what) {
- case MEDIA_RECORDER_EVENT_ERROR:
- if (mOnErrorListener != null)
- mOnErrorListener.onError(mMediaRecorder, msg.arg1, msg.arg2);
-
- return;
-
- default:
- Log.e(TAG, "Unknown message type " + msg.what);
- return;
- }
- }
- }
-
- /**
- * Called from native code when an interesting event happens. This method
- * just uses the EventHandler system to post the event back to the main app thread.
- * We use a weak reference to the original MediaRecorder object so that the native
- * code is safe from the object disappearing from underneath it. (This is
- * the cookie passed to native_setup().)
- */
- private static void postEventFromNative(Object mediarecorder_ref,
- int what, int arg1, int arg2, Object obj)
- {
- MediaRecorder mr = (MediaRecorder)((WeakReference)mediarecorder_ref).get();
- if (mr == null) {
- return;
- }
-
- if (mr.mEventHandler != null) {
- Message m = mr.mEventHandler.obtainMessage(what, arg1, arg2, obj);
- mr.mEventHandler.sendMessage(m);
- }
- }
+
/**
* Releases resources associated with this MediaRecorder object.
@@ -482,10 +360,10 @@ public class MediaRecorder
*/
public native void release();
- private native final void native_setup(Object mediarecorder_this) throws IllegalStateException;
-
+ private native final void native_setup() throws IllegalStateException;
+
private native final void native_finalize();
-
+
@Override
protected void finalize() { native_finalize(); }
}
diff --git a/media/java/android/media/Ringtone.java b/media/java/android/media/Ringtone.java
index e80d8aa..cfcb5eb 100644
--- a/media/java/android/media/Ringtone.java
+++ b/media/java/android/media/Ringtone.java
@@ -164,16 +164,9 @@ public class Ringtone {
} else if (mFileDescriptor != null) {
mAudio.setDataSource(mFileDescriptor);
} else if (mAssetFileDescriptor != null) {
- // Note: using getDeclaredLength so that our behavior is the same
- // as previous versions when the content provider is returning
- // a full file.
- if (mAssetFileDescriptor.getDeclaredLength() < 0) {
- mAudio.setDataSource(mAssetFileDescriptor.getFileDescriptor());
- } else {
- mAudio.setDataSource(mAssetFileDescriptor.getFileDescriptor(),
- mAssetFileDescriptor.getStartOffset(),
- mAssetFileDescriptor.getDeclaredLength());
- }
+ mAudio.setDataSource(mAssetFileDescriptor.getFileDescriptor(),
+ mAssetFileDescriptor.getStartOffset(),
+ mAssetFileDescriptor.getLength());
} else {
throw new IOException("No data source set.");
}
diff --git a/media/java/android/media/SoundPool.java b/media/java/android/media/SoundPool.java
index 000430f..427f173 100644
--- a/media/java/android/media/SoundPool.java
+++ b/media/java/android/media/SoundPool.java
@@ -16,7 +16,6 @@
package android.media;
-import android.util.AndroidRuntimeException;
import android.util.Log;
import java.io.File;
import java.io.FileDescriptor;
@@ -80,11 +79,7 @@ public class SoundPool
public int load(AssetFileDescriptor afd, int priority) {
if (afd != null) {
- long len = afd.getLength();
- if (len < 0) {
- throw new AndroidRuntimeException("no length for fd");
- }
- return _load(afd.getFileDescriptor(), afd.getStartOffset(), len, priority);
+ return _load(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength(), priority);
} else {
return 0;
}
diff --git a/media/jni/android_media_MediaRecorder.cpp b/media/jni/android_media_MediaRecorder.cpp
index 44f875c..095749b 100644
--- a/media/jni/android_media_MediaRecorder.cpp
+++ b/media/jni/android_media_MediaRecorder.cpp
@@ -41,68 +41,16 @@ using namespace android;
// ----------------------------------------------------------------------------
// helper function to extract a native Camera object from a Camera Java object
-extern sp<Camera> get_native_camera(JNIEnv *env, jobject thiz, struct camera_context_t** context);
+extern sp<Camera> get_native_camera(JNIEnv *env, jobject thiz);
struct fields_t {
jfieldID context;
jfieldID surface;
/* actually in android.view.Surface XXX */
jfieldID surface_native;
-
- jmethodID post_event;
};
static fields_t fields;
-static Mutex sLock;
-
-// ----------------------------------------------------------------------------
-// ref-counted object for callbacks
-class JNIMediaRecorderListener: public MediaRecorderListener
-{
-public:
- JNIMediaRecorderListener(JNIEnv* env, jobject thiz, jobject weak_thiz);
- ~JNIMediaRecorderListener();
- void notify(int msg, int ext1, int ext2);
-private:
- JNIMediaRecorderListener();
- jclass mClass; // Reference to MediaRecorder class
- jobject mObject; // Weak ref to MediaRecorder Java object to call on
-};
-
-JNIMediaRecorderListener::JNIMediaRecorderListener(JNIEnv* env, jobject thiz, jobject weak_thiz)
-{
-
- // Hold onto the MediaRecorder class for use in calling the static method
- // that posts events to the application thread.
- jclass clazz = env->GetObjectClass(thiz);
- if (clazz == NULL) {
- LOGE("Can't find android/media/MediaRecorder");
- jniThrowException(env, "java/lang/Exception", NULL);
- return;
- }
- mClass = (jclass)env->NewGlobalRef(clazz);
-
- // We use a weak reference so the MediaRecorder object can be garbage collected.
- // The reference is only used as a proxy for callbacks.
- mObject = env->NewGlobalRef(weak_thiz);
-}
-
-JNIMediaRecorderListener::~JNIMediaRecorderListener()
-{
- // remove global references
- JNIEnv *env = AndroidRuntime::getJNIEnv();
- env->DeleteGlobalRef(mObject);
- env->DeleteGlobalRef(mClass);
-}
-
-void JNIMediaRecorderListener::notify(int msg, int ext1, int ext2)
-{
- LOGV("JNIMediaRecorderListener::notify");
-
- JNIEnv *env = AndroidRuntime::getJNIEnv();
- env->CallStaticVoidMethod(mClass, fields.post_event, mObject, msg, ext1, ext2, 0);
-}
-
// ----------------------------------------------------------------------------
static sp<Surface> get_surface(JNIEnv* env, jobject clazz)
@@ -126,32 +74,10 @@ static bool process_media_recorder_call(JNIEnv *env, status_t opStatus, const ch
return false;
}
-static sp<MediaRecorder> getMediaRecorder(JNIEnv* env, jobject thiz)
-{
- Mutex::Autolock l(sLock);
- MediaRecorder* const p = (MediaRecorder*)env->GetIntField(thiz, fields.context);
- return sp<MediaRecorder>(p);
-}
-
-static sp<MediaRecorder> setMediaRecorder(JNIEnv* env, jobject thiz, const sp<MediaRecorder>& recorder)
-{
- Mutex::Autolock l(sLock);
- sp<MediaRecorder> old = (MediaRecorder*)env->GetIntField(thiz, fields.context);
- if (recorder.get()) {
- recorder->incStrong(thiz);
- }
- if (old != 0) {
- old->decStrong(thiz);
- }
- env->SetIntField(thiz, fields.context, (int)recorder.get());
- return old;
-}
-
-
static void android_media_MediaRecorder_setCamera(JNIEnv* env, jobject thiz, jobject camera)
{
- sp<Camera> c = get_native_camera(env, camera, NULL);
- sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
+ sp<Camera> c = get_native_camera(env, camera);
+ MediaRecorder *mr = (MediaRecorder*)env->GetIntField(thiz, fields.context);
process_media_recorder_call(env, mr->setCamera(c->remote()),
"java/lang/RuntimeException", "setCamera failed.");
}
@@ -164,7 +90,7 @@ android_media_MediaRecorder_setVideoSource(JNIEnv *env, jobject thiz, jint vs)
jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid video source");
return;
}
- sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
+ MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
process_media_recorder_call(env, mr->setVideoSource(vs), "java/lang/RuntimeException", "setVideoSource failed.");
}
@@ -176,7 +102,7 @@ android_media_MediaRecorder_setAudioSource(JNIEnv *env, jobject thiz, jint as)
jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid audio source");
return;
}
- sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
+ MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
process_media_recorder_call(env, mr->setAudioSource(as), "java/lang/RuntimeException", "setAudioSource failed.");
}
@@ -188,7 +114,7 @@ android_media_MediaRecorder_setOutputFormat(JNIEnv *env, jobject thiz, jint of)
jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid output format");
return;
}
- sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
+ MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
process_media_recorder_call(env, mr->setOutputFormat(of), "java/lang/RuntimeException", "setOutputFormat failed.");
}
@@ -200,7 +126,7 @@ android_media_MediaRecorder_setVideoEncoder(JNIEnv *env, jobject thiz, jint ve)
jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid video encoder");
return;
}
- sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
+ MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
process_media_recorder_call(env, mr->setVideoEncoder(ve), "java/lang/RuntimeException", "setVideoEncoder failed.");
}
@@ -212,7 +138,7 @@ android_media_MediaRecorder_setAudioEncoder(JNIEnv *env, jobject thiz, jint ae)
jniThrowException(env, "java/lang/IllegalArgumentException", "Invalid audio encoder");
return;
}
- sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
+ MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
process_media_recorder_call(env, mr->setAudioEncoder(ae), "java/lang/RuntimeException", "setAudioEncoder failed.");
}
@@ -225,7 +151,7 @@ android_media_MediaRecorder_setOutputFileFD(JNIEnv *env, jobject thiz, jobject f
return;
}
int fd = getParcelFileDescriptorFD(env, fileDescriptor);
- sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
+ MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
status_t opStatus = mr->setOutputFile(fd, offset, length);
process_media_recorder_call(env, opStatus, "java/io/IOException", "setOutputFile failed.");
}
@@ -234,7 +160,7 @@ static void
android_media_MediaRecorder_setVideoSize(JNIEnv *env, jobject thiz, jint width, jint height)
{
LOGV("setVideoSize(%d, %d)", width, height);
- sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
+ MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
if (width <= 0 || height <= 0) {
jniThrowException(env, "java/lang/IllegalArgumentException", "invalid video size");
@@ -251,7 +177,7 @@ android_media_MediaRecorder_setVideoFrameRate(JNIEnv *env, jobject thiz, jint ra
jniThrowException(env, "java/lang/IllegalArgumentException", "invalid frame rate");
return;
}
- sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
+ MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
process_media_recorder_call(env, mr->setVideoFrameRate(rate), "java/lang/RuntimeException", "setVideoFrameRate failed.");
}
@@ -259,7 +185,7 @@ static void
android_media_MediaRecorder_prepare(JNIEnv *env, jobject thiz)
{
LOGV("prepare");
- sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
+ MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
jobject surface = env->GetObjectField(thiz, fields.surface);
if (surface != NULL) {
@@ -276,7 +202,7 @@ static int
android_media_MediaRecorder_native_getMaxAmplitude(JNIEnv *env, jobject thiz)
{
LOGV("getMaxAmplitude");
- sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
+ MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
int result = 0;
process_media_recorder_call(env, mr->getMaxAmplitude(&result), "java/lang/RuntimeException", "getMaxAmplitude failed.");
return result;
@@ -286,7 +212,7 @@ static void
android_media_MediaRecorder_start(JNIEnv *env, jobject thiz)
{
LOGV("start");
- sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
+ MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
process_media_recorder_call(env, mr->start(), "java/lang/RuntimeException", "start failed.");
}
@@ -294,54 +220,46 @@ static void
android_media_MediaRecorder_stop(JNIEnv *env, jobject thiz)
{
LOGV("stop");
- sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
+ MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
process_media_recorder_call(env, mr->stop(), "java/lang/RuntimeException", "stop failed.");
}
static void
-android_media_MediaRecorder_native_reset(JNIEnv *env, jobject thiz)
+android_media_MediaRecorder_reset(JNIEnv *env, jobject thiz)
{
- LOGV("native_reset");
- sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
- process_media_recorder_call(env, mr->reset(), "java/lang/RuntimeException", "native_reset failed.");
+ LOGV("reset");
+ MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
+ process_media_recorder_call(env, mr->reset(), "java/lang/RuntimeException", "reset failed.");
}
static void
android_media_MediaRecorder_release(JNIEnv *env, jobject thiz)
{
LOGV("release");
- sp<MediaRecorder> mr = setMediaRecorder(env, thiz, 0);
- if (mr != NULL) {
- mr->setListener(NULL);
- }
+ MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
+ env->SetIntField(thiz, fields.context, 0);
+ delete mr;
}
static void
-android_media_MediaRecorder_native_setup(JNIEnv *env, jobject thiz, jobject weak_this)
+android_media_MediaRecorder_native_setup(JNIEnv *env, jobject thiz)
{
LOGV("setup");
- sp<MediaRecorder> mr = new MediaRecorder();
- if (mr == NULL) {
- jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
- return;
- }
- if (mr->initCheck() != NO_ERROR) {
+ MediaRecorder *mr = new MediaRecorder();
+ if (mr->initCheck() == NO_ERROR) {
+ env->SetIntField(thiz, fields.context, (int)mr);
+ } else {
+ delete mr;
jniThrowException(env, "java/lang/IOException", "Unable to initialize camera");
- return;
}
-
- // create new listener and give it to MediaRecorder
- sp<JNIMediaRecorderListener> listener = new JNIMediaRecorderListener(env, thiz, weak_this);
- mr->setListener(listener);
-
- setMediaRecorder(env, thiz, mr);
}
static void
android_media_MediaRecorder_native_finalize(JNIEnv *env, jobject thiz)
{
LOGV("finalize");
- android_media_MediaRecorder_release(env, thiz);
+ MediaRecorder *mr = (MediaRecorder *)env->GetIntField(thiz, fields.context);
+ delete mr;
}
// ----------------------------------------------------------------------------
@@ -360,9 +278,9 @@ static JNINativeMethod gMethods[] = {
{"getMaxAmplitude", "()I", (void *)android_media_MediaRecorder_native_getMaxAmplitude},
{"start", "()V", (void *)android_media_MediaRecorder_start},
{"stop", "()V", (void *)android_media_MediaRecorder_stop},
- {"native_reset", "()V", (void *)android_media_MediaRecorder_native_reset},
+ {"reset", "()V", (void *)android_media_MediaRecorder_reset},
{"release", "()V", (void *)android_media_MediaRecorder_release},
- {"native_setup", "(Ljava/lang/Object;)V", (void *)android_media_MediaRecorder_native_setup},
+ {"native_setup", "()V", (void *)android_media_MediaRecorder_native_setup},
{"native_finalize", "()V", (void *)android_media_MediaRecorder_native_finalize},
};
@@ -402,13 +320,6 @@ int register_android_media_MediaRecorder(JNIEnv *env)
return -1;
}
- fields.post_event = env->GetStaticMethodID(clazz, "postEventFromNative",
- "(Ljava/lang/Object;IIILjava/lang/Object;)V");
- if (fields.post_event == NULL) {
- LOGE("Can't find MediaRecorder.postEventFromNative");
- return -1;
- }
-
return AndroidRuntime::registerNativeMethods(env,
"android/media/MediaRecorder", gMethods, NELEM(gMethods));
}
diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp
index 7594ff0..e833c85 100644
--- a/media/libmedia/AudioRecord.cpp
+++ b/media/libmedia/AudioRecord.cpp
@@ -128,23 +128,8 @@ status_t AudioRecord::set(
return BAD_VALUE;
}
- // validate framecount
- size_t inputBuffSizeInBytes = -1;
- if (AudioSystem::getInputBufferSize(sampleRate, format, channelCount, &inputBuffSizeInBytes)
- != NO_ERROR) {
- LOGE("AudioSystem could not query the input buffer size.");
- return NO_INIT;
- }
- if (inputBuffSizeInBytes == 0) {
- LOGE("Recording parameters are not supported: sampleRate %d, channelCount %d, format %d",
- sampleRate, channelCount, format);
- return BAD_VALUE;
- }
- int frameSizeInBytes = channelCount * (format == AudioSystem::PCM_16_BIT ? 2 : 1);
-
- // We use 2* size of input buffer for ping pong use of record buffer.
- int minFrameCount = 2 * inputBuffSizeInBytes / frameSizeInBytes;
- LOGV("AudioRecord::set() minFrameCount = %d", minFrameCount);
+ // TODO: Get input frame count from hardware.
+ int minFrameCount = 1024*2;
if (frameCount == 0) {
frameCount = minFrameCount;
@@ -159,11 +144,7 @@ status_t AudioRecord::set(
// open record channel
status_t status;
sp<IAudioRecord> record = audioFlinger->openRecord(getpid(), streamType,
- sampleRate, format,
- channelCount,
- frameCount,
- ((uint16_t)flags) << 16,
- &status);
+ sampleRate, format, channelCount, frameCount, flags, &status);
if (record == 0) {
LOGE("AudioFlinger could not create record track, status: %d", status);
return status;
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index 2274521..f8520a7 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -168,8 +168,6 @@ status_t AudioTrack::set(
// Ensure that buffer depth covers at least audio hardware latency
uint32_t minBufCount = afLatency / ((1000 * afFrameCount)/afSampleRate);
- if (minBufCount < 2) minBufCount = 2;
-
// When playing from shared buffer, playback will start even if last audioflinger
// block is partly filled.
if (sharedBuffer != 0 && minBufCount > 1) {
@@ -439,8 +437,8 @@ void AudioTrack::setSampleRate(int rate)
return;
}
// Resampler implementation limits input sampling rate to 2 x output sampling rate.
- if (rate <= 0) rate = 1;
if (rate > afSamplingRate*2) rate = afSamplingRate*2;
+
if (rate > MAX_SAMPLE_RATE) rate = MAX_SAMPLE_RATE;
mCblk->sampleRate = rate;
@@ -468,15 +466,10 @@ status_t AudioTrack::setLoop(uint32_t loopStart, uint32_t loopEnd, int loopCount
if (loopStart >= loopEnd ||
loopEnd - loopStart > mFrameCount) {
- LOGE("setLoop invalid value: loopStart %d, loopEnd %d, loopCount %d, framecount %d, user %d", loopStart, loopEnd, loopCount, mFrameCount, cblk->user);
+ LOGW("setLoop invalid value: loopStart %d, loopEnd %d, loopCount %d, framecount %d, user %d", loopStart, loopEnd, loopCount, mFrameCount, cblk->user);
return BAD_VALUE;
}
-
- if ((mSharedBuffer != 0) && (loopEnd > mFrameCount)) {
- LOGE("setLoop invalid value: loop markers beyond data: loopStart %d, loopEnd %d, framecount %d",
- loopStart, loopEnd, mFrameCount);
- return BAD_VALUE;
- }
+ // TODO handle shared buffer here: limit loop end to framecount
cblk->loopStart = loopStart;
cblk->loopEnd = loopEnd;
diff --git a/media/libmedia/IMediaRecorder.cpp b/media/libmedia/IMediaRecorder.cpp
index f187bf5..507d03e 100644
--- a/media/libmedia/IMediaRecorder.cpp
+++ b/media/libmedia/IMediaRecorder.cpp
@@ -21,7 +21,6 @@
#include <utils/Parcel.h>
#include <ui/ISurface.h>
#include <ui/ICamera.h>
-#include <media/IMediaPlayerClient.h>
#include <media/IMediaRecorder.h>
namespace android {
@@ -45,8 +44,7 @@ enum {
SET_VIDEO_SIZE,
SET_VIDEO_FRAMERATE,
SET_PREVIEW_SURFACE,
- SET_CAMERA,
- SET_LISTENER
+ SET_CAMERA
};
class BpMediaRecorder: public BpInterface<IMediaRecorder>
@@ -178,16 +176,6 @@ public:
return reply.readInt32();
}
- status_t setListener(const sp<IMediaPlayerClient>& listener)
- {
- LOGV("setListener(%p)", listener.get());
- Parcel data, reply;
- data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor());
- data.writeStrongBinder(listener->asBinder());
- remote()->transact(SET_LISTENER, data, &reply);
- return reply.readInt32();
- }
-
status_t prepare()
{
LOGV("prepare");
@@ -385,14 +373,6 @@ status_t BnMediaRecorder::onTransact(
reply->writeInt32(setVideoFrameRate(frames_per_second));
return NO_ERROR;
} break;
- case SET_LISTENER: {
- LOGV("SET_LISTENER");
- CHECK_INTERFACE(IMediaRecorder, data, reply);
- sp<IMediaPlayerClient> listener =
- interface_cast<IMediaPlayerClient>(data.readStrongBinder());
- reply->writeInt32(setListener(listener));
- return NO_ERROR;
- } break;
case SET_PREVIEW_SURFACE: {
LOGV("SET_PREVIEW_SURFACE");
CHECK_INTERFACE(IMediaRecorder, data, reply);
diff --git a/media/libmedia/mediarecorder.cpp b/media/libmedia/mediarecorder.cpp
index 98aac39..4ab26ac 100644
--- a/media/libmedia/mediarecorder.cpp
+++ b/media/libmedia/mediarecorder.cpp
@@ -58,10 +58,6 @@ status_t MediaRecorder::setPreviewSurface(const sp<Surface>& surface)
LOGE("setPreviewSurface called in an invalid state(%d)", mCurrentState);
return INVALID_OPERATION;
}
- if (!mIsVideoSourceSet) {
- LOGE("try to set preview surface without setting the video source first");
- return INVALID_OPERATION;
- }
status_t ret = mMediaRecorder->setPreviewSurface(surface->getISurface());
if (OK != ret) {
@@ -90,14 +86,6 @@ status_t MediaRecorder::init()
mCurrentState = MEDIA_RECORDER_ERROR;
return UNKNOWN_ERROR;
}
-
- ret = mMediaRecorder->setListener(this);
- if (OK != ret) {
- LOGV("setListener failed: %d", ret);
- mCurrentState = MEDIA_RECORDER_ERROR;
- return UNKNOWN_ERROR;
- }
-
mCurrentState = MEDIA_RECORDER_INITIALIZED;
return ret;
}
@@ -179,10 +167,6 @@ status_t MediaRecorder::setOutputFormat(int of)
LOGE("setOutputFormat called in an invalid state: %d", mCurrentState);
return INVALID_OPERATION;
}
- if (mIsVideoSourceSet && of >= OUTPUT_FORMAT_RAW_AMR) {
- LOGE("output format (%d) is meant for audio recording only and incompatible with video recording", of);
- return INVALID_OPERATION;
- }
status_t ret = mMediaRecorder->setOutputFormat(of);
if (OK != ret) {
@@ -201,10 +185,6 @@ status_t MediaRecorder::setVideoEncoder(int ve)
LOGE("media recorder is not initialized yet");
return INVALID_OPERATION;
}
- if (!mIsVideoSourceSet) {
- LOGE("try to set the video encoder without setting the video source first");
- return INVALID_OPERATION;
- }
if (mIsVideoEncoderSet) {
LOGE("video encoder has already been set");
return INVALID_OPERATION;
@@ -231,10 +211,6 @@ status_t MediaRecorder::setAudioEncoder(int ae)
LOGE("media recorder is not initialized yet");
return INVALID_OPERATION;
}
- if (!mIsAudioSourceSet) {
- LOGE("try to set the audio encoder without setting the audio source first");
- return INVALID_OPERATION;
- }
if (mIsAudioEncoderSet) {
LOGE("audio encoder has already been set");
return INVALID_OPERATION;
@@ -317,10 +293,6 @@ status_t MediaRecorder::setVideoSize(int width, int height)
LOGE("setVideoSize called in an invalid state: %d", mCurrentState);
return INVALID_OPERATION;
}
- if (!mIsVideoSourceSet) {
- LOGE("try to set video size without setting video source first");
- return INVALID_OPERATION;
- }
status_t ret = mMediaRecorder->setVideoSize(width, height);
if (OK != ret) {
@@ -342,10 +314,6 @@ status_t MediaRecorder::setVideoFrameRate(int frames_per_second)
LOGE("setVideoFrameRate called in an invalid state: %d", mCurrentState);
return INVALID_OPERATION;
}
- if (!mIsVideoSourceSet) {
- LOGE("try to set video frame rate without setting video source first");
- return INVALID_OPERATION;
- }
status_t ret = mMediaRecorder->setVideoFrameRate(frames_per_second);
if (OK != ret) {
@@ -367,23 +335,6 @@ status_t MediaRecorder::prepare()
LOGE("prepare called in an invalid state: %d", mCurrentState);
return INVALID_OPERATION;
}
- if (mIsAudioSourceSet != mIsAudioEncoderSet) {
- if (mIsAudioSourceSet) {
- LOGE("audio source is set, but audio encoder is not set");
- } else { // must not happen, since setAudioEncoder checks this already
- LOGE("audio encoder is set, but audio source is not set");
- }
- return INVALID_OPERATION;
- }
-
- if (mIsVideoSourceSet != mIsVideoEncoderSet) {
- if (mIsVideoSourceSet) {
- LOGE("video source is set, but video encoder is not set");
- } else { // must not happen, since setVideoEncoder checks this already
- LOGE("video encoder is set, but video source is not set");
- }
- return INVALID_OPERATION;
- }
status_t ret = mMediaRecorder->prepare();
if (OK != ret) {
@@ -587,31 +538,5 @@ MediaRecorder::~MediaRecorder()
}
}
-status_t MediaRecorder::setListener(const sp<MediaRecorderListener>& listener)
-{
- LOGV("setListener");
- Mutex::Autolock _l(mLock);
- mListener = listener;
-
- return NO_ERROR;
-}
-
-void MediaRecorder::notify(int msg, int ext1, int ext2)
-{
- LOGV("message received msg=%d, ext1=%d, ext2=%d", msg, ext1, ext2);
-
- sp<MediaRecorderListener> listener;
- mLock.lock();
- listener = mListener;
- mLock.unlock();
-
- if (listener != NULL) {
- Mutex::Autolock _l(mNotifyLock);
- LOGV("callback application");
- listener->notify(msg, ext1, ext2);
- LOGV("back from callback");
- }
-}
-
}; // namespace android
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index 40705c6..97e3536 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -218,104 +218,6 @@ static int myTid() {
#endif
}
-#if defined(__arm__)
-extern "C" void get_malloc_leak_info(uint8_t** info, size_t* overallSize,
- size_t* infoSize, size_t* totalMemory, size_t* backtraceSize);
-extern "C" void free_malloc_leak_info(uint8_t* info);
-
-void memStatus(int fd, const Vector<String16>& args)
-{
- const size_t SIZE = 256;
- char buffer[SIZE];
- String8 result;
-
- typedef struct {
- size_t size;
- size_t dups;
- intptr_t * backtrace;
- } AllocEntry;
-
- uint8_t *info = NULL;
- size_t overallSize = 0;
- size_t infoSize = 0;
- size_t totalMemory = 0;
- size_t backtraceSize = 0;
-
- get_malloc_leak_info(&info, &overallSize, &infoSize, &totalMemory, &backtraceSize);
- if (info) {
- uint8_t *ptr = info;
- size_t count = overallSize / infoSize;
-
- snprintf(buffer, SIZE, " Allocation count %i\n", count);
- result.append(buffer);
-
- AllocEntry * entries = new AllocEntry[count];
-
- for (size_t i = 0; i < count; i++) {
- // Each entry should be size_t, size_t, intptr_t[backtraceSize]
- AllocEntry *e = &entries[i];
-
- e->size = *reinterpret_cast<size_t *>(ptr);
- ptr += sizeof(size_t);
-
- e->dups = *reinterpret_cast<size_t *>(ptr);
- ptr += sizeof(size_t);
-
- e->backtrace = reinterpret_cast<intptr_t *>(ptr);
- ptr += sizeof(intptr_t) * backtraceSize;
- }
-
- // Now we need to sort the entries. They come sorted by size but
- // not by stack trace which causes problems using diff.
- bool moved;
- do {
- moved = false;
- for (size_t i = 0; i < (count - 1); i++) {
- AllocEntry *e1 = &entries[i];
- AllocEntry *e2 = &entries[i+1];
-
- bool swap = e1->size < e2->size;
- if (e1->size == e2->size) {
- for(size_t j = 0; j < backtraceSize; j++) {
- if (e1->backtrace[j] == e2->backtrace[j]) {
- continue;
- }
- swap = e1->backtrace[j] < e2->backtrace[j];
- break;
- }
- }
- if (swap) {
- AllocEntry t = entries[i];
- entries[i] = entries[i+1];
- entries[i+1] = t;
- moved = true;
- }
- }
- } while (moved);
-
- for (size_t i = 0; i < count; i++) {
- AllocEntry *e = &entries[i];
-
- snprintf(buffer, SIZE, "size %8i, dup %4i", e->size, e->dups);
- result.append(buffer);
- for (size_t ct = 0; (ct < backtraceSize) && e->backtrace[ct]; ct++) {
- if (ct) {
- result.append(", ");
- }
- snprintf(buffer, SIZE, "0x%08x", e->backtrace[ct]);
- result.append(buffer);
- }
- result.append("\n");
- }
-
- delete[] entries;
- free_malloc_leak_info(info);
- }
-
- write(fd, result.string(), result.size());
-}
-#endif
-
status_t MediaPlayerService::dump(int fd, const Vector<String16>& args)
{
const size_t SIZE = 256;
@@ -398,18 +300,6 @@ status_t MediaPlayerService::dump(int fd, const Vector<String16>& args)
result.append(buffer);
result.append("\n");
}
-
-#if defined(__arm__)
- bool dumpMem = false;
- for (size_t i = 0; i < args.size(); i++) {
- if (args[i] == String16("-m")) {
- dumpMem = true;
- }
- }
- if (dumpMem) {
- memStatus(fd, args);
- }
-#endif
}
write(fd, result.string(), result.size());
return NO_ERROR;
diff --git a/media/libmediaplayerservice/MediaRecorderClient.cpp b/media/libmediaplayerservice/MediaRecorderClient.cpp
index 4b45acb..e8ba17f 100644
--- a/media/libmediaplayerservice/MediaRecorderClient.cpp
+++ b/media/libmediaplayerservice/MediaRecorderClient.cpp
@@ -258,16 +258,5 @@ MediaRecorderClient::~MediaRecorderClient()
release();
}
-status_t MediaRecorderClient::setListener(const sp<IMediaPlayerClient>& listener)
-{
- LOGV("setListener");
- Mutex::Autolock lock(mLock);
- if (mRecorder == NULL) {
- LOGE("recorder is not initialized");
- return NO_INIT;
- }
- return mRecorder->setListener(listener);
-}
-
}; // namespace android
diff --git a/media/libmediaplayerservice/MediaRecorderClient.h b/media/libmediaplayerservice/MediaRecorderClient.h
index 93fd802..2b80c10 100644
--- a/media/libmediaplayerservice/MediaRecorderClient.h
+++ b/media/libmediaplayerservice/MediaRecorderClient.h
@@ -39,7 +39,6 @@ public:
virtual status_t setOutputFile(int fd, int64_t offset, int64_t length);
virtual status_t setVideoSize(int width, int height);
virtual status_t setVideoFrameRate(int frames_per_second);
- virtual status_t setListener(const sp<IMediaPlayerClient>& listener);
virtual status_t prepare();
virtual status_t getMaxAmplitude(int* max);
virtual status_t start();
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
index 73688cc..453a165 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
@@ -47,9 +47,9 @@ public class MediaFrameworkTestRunner extends InstrumentationTestRunner {
suite.addTestSuite(MediaPlayerApiTest.class);
suite.addTestSuite(SimTonesTest.class);
suite.addTestSuite(MediaMetadataTest.class);
- suite.addTestSuite(CameraTest.class);
+ // suite.addTestSuite(CameraTest.class);
suite.addTestSuite(MediaRecorderTest.class);
- //suite.addTestSuite(MediaAudioTrackTest.class);
+ suite.addTestSuite(MediaAudioTrackTest.class);
return suite;
}
@@ -59,4 +59,3 @@ public class MediaFrameworkTestRunner extends InstrumentationTestRunner {
}
}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java
index 59803f7..5981a13 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CameraTest.java
@@ -136,13 +136,11 @@ public class CameraTest extends ActivityInstrumentationTestCase<MediaFrameworkTe
//Implement the RawPictureCallback
private final class RawPictureCallback implements PictureCallback {
public void onPictureTaken(byte [] rawData, Camera camera) {
- // no support for raw data - success if we get the callback
- rawPictureCallbackResult = true;
- //if (rawData != null) {
- // rawPictureCallbackResult = true;
- //} else {
- // rawPictureCallbackResult = false;
- //}
+ if (rawData != null) {
+ rawPictureCallbackResult = true;
+ } else {
+ rawPictureCallbackResult = false;
+ }
Log.v(TAG, "RawPictureCallback callback");
}
};
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioTrackTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioTrackTest.java
index 24edb65..b6a0848 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioTrackTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioTrackTest.java
@@ -34,7 +34,7 @@ import android.test.suitebuilder.annotation.Suppress;
*/
public class MediaAudioTrackTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
- private String TAG = "MediaAudioTrackTest";
+ private String TAG = "MediaAudioTrack";
public MediaAudioTrackTest() {
super("com.android.mediaframeworktest", MediaFrameworkTest.class);
@@ -50,18 +50,6 @@ public class MediaAudioTrackTest extends ActivityInstrumentationTestCase2<MediaF
super.tearDown();
}
- private static void assumeTrue(String message, boolean cond) {
- assertTrue("(assume)"+message, cond);
- }
-
- private void log(String testName, String message) {
- Log.v(TAG, "["+testName+"] "+message);
- }
-
- private void loge(String testName, String message) {
- Log.e(TAG, "["+testName+"] "+message);
- }
-
//-----------------------------------------------------------------
// private class to hold test reslts
public class TestResults {
@@ -74,8 +62,7 @@ public class MediaAudioTrackTest extends ActivityInstrumentationTestCase2<MediaF
// generic test methods
public TestResults constructorTestMultiSampleRate(
// parameters tested by this method
- int _inTest_streamType, int _inTest_mode,
- int _inTest_config, int _inTest_format,
+ int _inTest_streamType, int _inTest_mode, int _inTest_config,
// parameter-dependent expected results
int _expected_stateForMode) {
@@ -83,7 +70,7 @@ public class MediaAudioTrackTest extends ActivityInstrumentationTestCase2<MediaF
String failedRates = "Failure for rate(s): ";
boolean localRes, finalRes = true;
- for (int i = 0 ; i < testSampleRates.length ; i++) {
+ for(int i = 0 ; i < testSampleRates.length ; i++) {
//Log.v("MediaAudioTrackTest", "[ constructorTestMultiSampleRate ] testing "+ testSampleRates[i]);
AudioTrack track = null;
try {
@@ -91,16 +78,15 @@ public class MediaAudioTrackTest extends ActivityInstrumentationTestCase2<MediaF
_inTest_streamType,
testSampleRates[i],
_inTest_config,
- _inTest_format,
+ AudioFormat.ENCODING_PCM_16BIT,
AudioTrack.getMinBufferSize(testSampleRates[i],
- _inTest_config, _inTest_format),
+ _inTest_config, AudioFormat.ENCODING_PCM_16BIT),//testSampleRates[i]*4
_inTest_mode);
} catch(IllegalArgumentException iae) {
Log.e("MediaAudioTrackTest", "[ constructorTestMultiSampleRate ] exception at SR "
+ testSampleRates[i]+": \n" + iae);
- localRes = false;
}
- if (track != null) {
+ if(track != null) {
localRes = (track.getState() == _expected_stateForMode);
track.release();
}
@@ -112,11 +98,11 @@ public class MediaAudioTrackTest extends ActivityInstrumentationTestCase2<MediaF
//log the error for the test runner
failedRates += Integer.toString(testSampleRates[i]) + "Hz ";
//log the error for logcat
- log("constructorTestMultiSampleRate", "failed to construct "
+ Log.e("MediaAudioTrackTest", "[ constructorTestMultiSampleRate ] failed to construct "
+"AudioTrack(streamType="+_inTest_streamType
+", sampleRateInHz=" + testSampleRates[i]
+", channelConfig=" + _inTest_config
- +", audioFormat=" + _inTest_format
+ +", audioFormat=AudioFormat.ENCODING_PCM_16BIT"
+", bufferSizeInBytes=" + AudioTrack.getMinBufferSize(testSampleRates[i],
_inTest_config, AudioFormat.ENCODING_PCM_16BIT)
+", mode="+ _inTest_mode );
@@ -132,16 +118,16 @@ public class MediaAudioTrackTest extends ActivityInstrumentationTestCase2<MediaF
//----------------------------------
//-----------------------------------------------------------------
- // AudioTrack constructor and AudioTrack.getMinBufferSize(...) for 16bit PCM
+ // AudioTrack constructor and AudioTrack.getMinBufferSize(...)
//----------------------------------
//Test case 1: constructor for streaming AudioTrack, mono, 16bit at misc valid sample rates
- @LargeTest
+ @MediumTest
public void testConstructorMono16MusicStream() throws Exception {
TestResults res = constructorTestMultiSampleRate(
AudioManager.STREAM_MUSIC, AudioTrack.MODE_STREAM,
- AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,
+ AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioTrack.STATE_INITIALIZED);
assertTrue("testConstructorMono16MusicStream: " + res.mResultLog, res.mResult);
@@ -149,12 +135,12 @@ public class MediaAudioTrackTest extends ActivityInstrumentationTestCase2<MediaF
//Test case 2: constructor for streaming AudioTrack, stereo, 16bit at misc valid sample rates
- @LargeTest
+ @MediumTest
public void testConstructorStereo16MusicStream() throws Exception {
TestResults res = constructorTestMultiSampleRate(
AudioManager.STREAM_MUSIC, AudioTrack.MODE_STREAM,
- AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT,
+ AudioFormat.CHANNEL_CONFIGURATION_STEREO,
AudioTrack.STATE_INITIALIZED);
assertTrue("testConstructorStereo16MusicStream: " + res.mResultLog, res.mResult);
@@ -162,12 +148,12 @@ public class MediaAudioTrackTest extends ActivityInstrumentationTestCase2<MediaF
//Test case 3: constructor for static AudioTrack, mono, 16bit at misc valid sample rates
- @LargeTest
+ @MediumTest
public void testConstructorMono16MusicStatic() throws Exception {
TestResults res = constructorTestMultiSampleRate(
AudioManager.STREAM_MUSIC, AudioTrack.MODE_STATIC,
- AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,
+ AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioTrack.STATE_NO_STATIC_DATA);
assertTrue("testConstructorMono16MusicStatic: " + res.mResultLog, res.mResult);
@@ -175,723 +161,16 @@ public class MediaAudioTrackTest extends ActivityInstrumentationTestCase2<MediaF
//Test case 4: constructor for static AudioTrack, stereo, 16bit at misc valid sample rates
- @LargeTest
+ @MediumTest
public void testConstructorStereo16MusicStatic() throws Exception {
TestResults res = constructorTestMultiSampleRate(
AudioManager.STREAM_MUSIC, AudioTrack.MODE_STATIC,
- AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT,
+ AudioFormat.CHANNEL_CONFIGURATION_STEREO,
AudioTrack.STATE_NO_STATIC_DATA);
assertTrue("testConstructorStereo16MusicStatic: " + res.mResultLog, res.mResult);
}
-
-
- //-----------------------------------------------------------------
- // AudioTrack constructor and AudioTrack.getMinBufferSize(...) for 8bit PCM
- //----------------------------------
-
- //Test case 1: constructor for streaming AudioTrack, mono, 8bit at misc valid sample rates
- @LargeTest
- public void testConstructorMono8MusicStream() throws Exception {
-
- TestResults res = constructorTestMultiSampleRate(
- AudioManager.STREAM_MUSIC, AudioTrack.MODE_STREAM,
- AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_8BIT,
- AudioTrack.STATE_INITIALIZED);
-
- assertTrue("testConstructorMono8MusicStream: " + res.mResultLog, res.mResult);
- }
-
- //Test case 2: constructor for streaming AudioTrack, stereo, 8bit at misc valid sample rates
- @LargeTest
- public void testConstructorStereo8MusicStream() throws Exception {
-
- TestResults res = constructorTestMultiSampleRate(
- AudioManager.STREAM_MUSIC, AudioTrack.MODE_STREAM,
- AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_8BIT,
- AudioTrack.STATE_INITIALIZED);
-
- assertTrue("testConstructorStereo8MusicStream: " + res.mResultLog, res.mResult);
- }
-
- //Test case 3: constructor for static AudioTrack, mono, 8bit at misc valid sample rates
- @LargeTest
- public void testConstructorMono8MusicStatic() throws Exception {
-
- TestResults res = constructorTestMultiSampleRate(
- AudioManager.STREAM_MUSIC, AudioTrack.MODE_STATIC,
- AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_8BIT,
- AudioTrack.STATE_NO_STATIC_DATA);
-
- assertTrue("testConstructorMono8MusicStatic: " + res.mResultLog, res.mResult);
- }
-
- //Test case 4: constructor for static AudioTrack, stereo, 8bit at misc valid sample rates
- @LargeTest
- public void testConstructorStereo8MusicStatic() throws Exception {
-
- TestResults res = constructorTestMultiSampleRate(
- AudioManager.STREAM_MUSIC, AudioTrack.MODE_STATIC,
- AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_8BIT,
- AudioTrack.STATE_NO_STATIC_DATA);
-
- assertTrue("testConstructorStereo8MusicStatic: " + res.mResultLog, res.mResult);
- }
-
-
- //-----------------------------------------------------------------
- // AudioTrack constructor for all stream types
- //----------------------------------
-
- //Test case 1: constructor for all stream types
- @LargeTest
- public void testConstructorStreamType() throws Exception {
- // constants for test
- final int TYPE_TEST_SR = 22050;
- final int TYPE_TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
- final int TYPE_TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TYPE_TEST_MODE = AudioTrack.MODE_STREAM;
- final int[] STREAM_TYPES = { AudioManager.STREAM_ALARM, AudioManager.STREAM_BLUETOOTH_SCO,
- AudioManager.STREAM_MUSIC, AudioManager.STREAM_NOTIFICATION,
- AudioManager.STREAM_RING, AudioManager.STREAM_SYSTEM,
- AudioManager.STREAM_VOICE_CALL };
- final String[] STREAM_NAMES = { "STREAM_ALARM", "STREAM_BLUETOOTH_SCO", "STREAM_MUSIC",
- "STREAM_NOTIFICATION", "STREAM_RING", "STREAM_SYSTEM", "STREAM_VOICE_CALL" };
-
- boolean localTestRes = true;
- AudioTrack track = null;
- // test: loop constructor on all stream types
- for (int i = 0 ; i < STREAM_TYPES.length ; i++)
- {
- try {
- //-------- initialization --------------
- track = new AudioTrack(STREAM_TYPES[i],
- TYPE_TEST_SR, TYPE_TEST_CONF, TYPE_TEST_FORMAT,
- AudioTrack.getMinBufferSize(TYPE_TEST_SR, TYPE_TEST_CONF, TYPE_TEST_FORMAT),
- TYPE_TEST_MODE);
- } catch (IllegalArgumentException iae) {
- loge("testConstructorStreamType", "exception for stream type "
- + STREAM_NAMES[i] + ": "+ iae);
- localTestRes = false;
- }
- //-------- test --------------
- if (track != null) {
- if (track.getState() != AudioTrack.STATE_INITIALIZED) {
- localTestRes = false;
- Log.e("MediaAudioTrackTest",
- "[ testConstructorStreamType ] failed for stream type "+STREAM_NAMES[i]);
- }
- //-------- tear down --------------
- track.release();
- }
- else {
- localTestRes = false;
- }
- }
- assertTrue("testConstructorStreamType", localTestRes);
- }
-
-
- //-----------------------------------------------------------------
- // Playback head position
- //----------------------------------
-
- //Test case 1: getPlaybackHeadPosition() at 0 after initialization
- @LargeTest
- public void testPlaybackHeadPositionAfterInit() throws Exception {
- // constants for test
- final String TEST_NAME = "testPlaybackHeadPositionAfterInit";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT), TEST_MODE);
- //-------- test --------------
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- assertTrue(TEST_NAME, track.getPlaybackHeadPosition() == 0);
- //-------- tear down --------------
- track.release();
- }
-
- //Test case 2: getPlaybackHeadPosition() increases after play()
- @LargeTest
- public void testPlaybackHeadPositionIncrease() throws Exception {
- // constants for test
- final String TEST_NAME = "testPlaybackHeadPositionIncrease";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize/2];
- //-------- test --------------
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- track.write(data, 0, data.length);
- track.write(data, 0, data.length);
- track.play();
- Thread.sleep(100);
- log(TEST_NAME, "position ="+ track.getPlaybackHeadPosition());
- assertTrue(TEST_NAME, track.getPlaybackHeadPosition() > 0);
- //-------- tear down --------------
- track.release();
- }
-
- //Test case 3: getPlaybackHeadPosition() is 0 after flush();
- @LargeTest
- public void testPlaybackHeadPositionAfterFlush() throws Exception {
- // constants for test
- final String TEST_NAME = "testPlaybackHeadPositionAfterFlush";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize/2];
- //-------- test --------------
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- track.write(data, 0, data.length);
- track.write(data, 0, data.length);
- track.play();
- Thread.sleep(100);
- track.stop();
- track.flush();
- log(TEST_NAME, "position ="+ track.getPlaybackHeadPosition());
- assertTrue(TEST_NAME, track.getPlaybackHeadPosition() == 0);
- //-------- tear down --------------
- track.release();
- }
-
- //Test case 3: getPlaybackHeadPosition() is 0 after stop();
- @LargeTest
- public void testPlaybackHeadPositionAfterStop() throws Exception {
- // constants for test
- final String TEST_NAME = "testPlaybackHeadPositionAfterStop";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize/2];
- //-------- test --------------
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- track.write(data, 0, data.length);
- track.write(data, 0, data.length);
- track.play();
- Thread.sleep(100);
- track.stop();
- Thread.sleep(100); // TODO: what is a sensible value?
- int pos = track.getPlaybackHeadPosition();
- log(TEST_NAME, "position ="+ pos);
- assertTrue(TEST_NAME, pos == 0);
- //-------- tear down --------------
- track.release();
- }
-
- //Test case 4: getPlaybackHeadPosition() is > 0 after play(); pause();
- @LargeTest
- public void testPlaybackHeadPositionAfterPause() throws Exception {
- // constants for test
- final String TEST_NAME = "testPlaybackHeadPositionAfterPause";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize/2];
- //-------- test --------------
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- track.write(data, 0, data.length);
- track.write(data, 0, data.length);
- track.play();
- Thread.sleep(100);
- track.pause();
- int pos = track.getPlaybackHeadPosition();
- log(TEST_NAME, "position ="+ pos);
- assertTrue(TEST_NAME, pos > 0);
- //-------- tear down --------------
- track.release();
- }
-
-
- //-----------------------------------------------------------------
- // Playback properties
- //----------------------------------
-
- //Test case 1: setStereoVolume() with max volume returns SUCCESS
- @LargeTest
- public void testSetStereoVolumeMax() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetStereoVolumeMax";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize/2];
- //-------- test --------------
- track.write(data, 0, data.length);
- track.write(data, 0, data.length);
- track.play();
- float maxVol = AudioTrack.getMaxVolume();
- assertTrue(TEST_NAME, track.setStereoVolume(maxVol, maxVol) == AudioTrack.SUCCESS);
- //-------- tear down --------------
- track.release();
- }
-
- //Test case 2: setStereoVolume() with min volume returns SUCCESS
- @LargeTest
- public void testSetStereoVolumeMin() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetStereoVolumeMin";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize/2];
- //-------- test --------------
- track.write(data, 0, data.length);
- track.write(data, 0, data.length);
- track.play();
- float minVol = AudioTrack.getMinVolume();
- assertTrue(TEST_NAME, track.setStereoVolume(minVol, minVol) == AudioTrack.SUCCESS);
- //-------- tear down --------------
- track.release();
- }
-
- //Test case 3: setStereoVolume() with mid volume returns SUCCESS
- @LargeTest
- public void testSetStereoVolumeMid() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetStereoVolumeMid";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize/2];
- //-------- test --------------
- track.write(data, 0, data.length);
- track.write(data, 0, data.length);
- track.play();
- float midVol = (AudioTrack.getMaxVolume() - AudioTrack.getMinVolume()) / 2;
- assertTrue(TEST_NAME, track.setStereoVolume(midVol, midVol) == AudioTrack.SUCCESS);
- //-------- tear down --------------
- track.release();
- }
-
- //Test case 4: setPlaybackRate() with half the content rate returns SUCCESS
- @LargeTest
- public void testSetPlaybackRate() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetPlaybackRate";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize/2];
- //-------- test --------------
- track.write(data, 0, data.length);
- track.write(data, 0, data.length);
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- track.play();
- assertTrue(TEST_NAME, track.setPlaybackRate((int)(TEST_SR/2)) == AudioTrack.SUCCESS);
- //-------- tear down --------------
- track.release();
- }
-
- //Test case 5: setPlaybackRate(0) returns bad value error
- @LargeTest
- public void testSetPlaybackRateZero() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetPlaybackRateZero";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- minBuffSize, TEST_MODE);
- //-------- test --------------
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- assertTrue(TEST_NAME, track.setPlaybackRate(0) == AudioTrack.ERROR_BAD_VALUE);
- //-------- tear down --------------
- track.release();
- }
-
- //Test case 6: setPlaybackRate() accepts values twice the output sample rate
- @LargeTest
- public void testSetPlaybackRateTwiceOutputSR() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetPlaybackRateTwiceOutputSR";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize/2];
- int outputSR = AudioTrack.getNativeOutputSampleRate(TEST_STREAM_TYPE);
- //-------- test --------------
- track.write(data, 0, data.length);
- track.write(data, 0, data.length);
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- track.play();
- assertTrue(TEST_NAME, track.setPlaybackRate(2*outputSR) == AudioTrack.SUCCESS);
- //-------- tear down --------------
- track.release();
- }
-/*
- //Test case 7: setPlaybackRate() clips values over twice the output sample rate
- @LargeTest
- public void testSetPlaybackRateClip() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetPlaybackRateClip";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_STEREO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize/2];
- int outputSR = AudioTrack.getNativeOutputSampleRate(TEST_STREAM_TYPE);
- //-------- test --------------
- track.write(data, 0, data.length);
- track.write(data, 0, data.length);
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- track.play();
- track.setPlaybackRate(3*outputSR);
- assertTrue(TEST_NAME, track.getSampleRate() == 2*outputSR);
- //-------- tear down --------------
- track.release();
- }
-*/
- //Test case 8: setPlaybackRate() invalid operation if track not initialized
- @LargeTest
- public void testSetPlaybackRateUninit() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetPlaybackRateUninit";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STATIC;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- minBuffSize, TEST_MODE);
- //-------- test --------------
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_NO_STATIC_DATA);
- assertTrue(TEST_NAME, track.setPlaybackRate(TEST_SR/2) == AudioTrack.ERROR_INVALID_OPERATION);
- //-------- tear down --------------
- track.release();
- }
-
- //-----------------------------------------------------------------
- // Playback progress
- //----------------------------------
-
- //Test case 1: setPlaybackHeadPosition() on playing track
- @LargeTest
- public void testSetPlaybackHeadPositionPlaying() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetPlaybackHeadPositionPlaying";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- 2*minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize];
- //-------- test --------------
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- track.write(data, 0, data.length);
- track.write(data, 0, data.length);
- track.play();
- assertTrue(TEST_NAME,
- track.setPlaybackHeadPosition(10) == AudioTrack.ERROR_INVALID_OPERATION);
- //-------- tear down --------------
- track.release();
- }
-
- //Test case 2: setPlaybackHeadPosition() on stopped track
- @LargeTest
- public void testSetPlaybackHeadPositionStopped() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetPlaybackHeadPositionStopped";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- 2*minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize];
- //-------- test --------------
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- track.write(data, 0, data.length);
- track.write(data, 0, data.length);
- track.play();
- track.stop();
- assumeTrue(TEST_NAME, track.getPlayState() == AudioTrack.PLAYSTATE_STOPPED);
- assertTrue(TEST_NAME, track.setPlaybackHeadPosition(10) == AudioTrack.SUCCESS);
- //-------- tear down --------------
- track.release();
- }
-
- //Test case 3: setPlaybackHeadPosition() on paused track
- @LargeTest
- public void testSetPlaybackHeadPositionPaused() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetPlaybackHeadPositionPaused";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- 2*minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize];
- //-------- test --------------
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- track.write(data, 0, data.length);
- track.write(data, 0, data.length);
- track.play();
- track.pause();
- assumeTrue(TEST_NAME, track.getPlayState() == AudioTrack.PLAYSTATE_PAUSED);
- assertTrue(TEST_NAME, track.setPlaybackHeadPosition(10) == AudioTrack.SUCCESS);
- //-------- tear down --------------
- track.release();
- }
-
- //Test case 4: setPlaybackHeadPosition() beyond what has been written
- @LargeTest
- public void testSetPlaybackHeadPositionTooFar() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetPlaybackHeadPositionTooFar";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- 2*minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize];
- // make up a frame index that's beyond what has been written: go from buffer size to frame
- // count (given the audio track properties), and add 77.
- int frameIndexTooFar = (2*minBuffSize/2) + 77;
- //-------- test --------------
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- track.write(data, 0, data.length);
- track.write(data, 0, data.length);
- track.play();
- track.stop();
- assumeTrue(TEST_NAME, track.getPlayState() == AudioTrack.PLAYSTATE_STOPPED);
- assertTrue(TEST_NAME, track.setPlaybackHeadPosition(frameIndexTooFar) == AudioTrack.ERROR_BAD_VALUE);
- //-------- tear down --------------
- track.release();
- }
-
-
- //Test case 5: setLoopPoints() fails for MODE_STREAM
- @LargeTest
- public void testSetLoopPointsStream() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetLoopPointsStream";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STREAM;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- 2*minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize];
- //-------- test --------------
- track.write(data, 0, data.length);
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- assertTrue(TEST_NAME, track.setLoopPoints(2, 50, 2) == AudioTrack.ERROR_INVALID_OPERATION);
- //-------- tear down --------------
- track.release();
- }
-
- //Test case 6: setLoopPoints() fails start > end
- @LargeTest
- public void testSetLoopPointsStartAfterEnd() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetLoopPointsStartAfterEnd";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STATIC;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize];
- //-------- test --------------
- track.write(data, 0, data.length);
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- assertTrue(TEST_NAME, track.setLoopPoints(50, 0, 2) == AudioTrack.ERROR_BAD_VALUE);
- //-------- tear down --------------
- track.release();
- }
-
- //Test case 6: setLoopPoints() success
- @LargeTest
- public void testSetLoopPointsSuccess() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetLoopPointsSuccess";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STATIC;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize];
- //-------- test --------------
- track.write(data, 0, data.length);
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- assertTrue(TEST_NAME, track.setLoopPoints(0, 50, 2) == AudioTrack.SUCCESS);
- //-------- tear down --------------
- track.release();
- }
-
- //Test case 7: setLoopPoints() fails with loop length bigger than content
- @LargeTest
- public void testSetLoopPointsLoopTooLong() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetLoopPointsLoopTooLong";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STATIC;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize];
- int dataSizeInFrames = minBuffSize/2;
- //-------- test --------------
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_NO_STATIC_DATA);
- track.write(data, 0, data.length);
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- assertTrue(TEST_NAME,
- track.setLoopPoints(10, dataSizeInFrames+20, 2) == AudioTrack.ERROR_BAD_VALUE);
- //-------- tear down --------------
- track.release();
- }
-/*
- //Test case 7: setLoopPoints() fails with start beyond what can be written for the track
- @LargeTest
- public void testSetLoopPointsStartTooFar() throws Exception {
- // constants for test
- final String TEST_NAME = "testSetLoopPointsStartTooFar";
- final int TEST_SR = 22050;
- final int TEST_CONF = AudioFormat.CHANNEL_CONFIGURATION_MONO;
- final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
- final int TEST_MODE = AudioTrack.MODE_STATIC;
- final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
-
- //-------- initialization --------------
- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT,
- minBuffSize, TEST_MODE);
- byte data[] = new byte[minBuffSize];
- int dataSizeInFrames = minBuffSize/2;//16bit data
- //-------- test --------------
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_NO_STATIC_DATA);
- track.write(data, 0, data.length);
- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED);
- assertTrue(TEST_NAME,
- track.setLoopPoints(dataSizeInFrames+20, dataSizeInFrames+50, 2)
- == AudioTrack.ERROR_BAD_VALUE);
- //-------- tear down --------------
- track.release();
- }
-*/
-
}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
index 2f0173d..b606f25 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java
@@ -1,17 +1,17 @@
/*
* Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
* Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*/
package com.android.mediaframeworktest.performance;
@@ -19,358 +19,141 @@ package com.android.mediaframeworktest.performance;
import com.android.mediaframeworktest.MediaFrameworkTest;
import com.android.mediaframeworktest.MediaNames;
+import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.media.MediaPlayer;
-import android.media.MediaRecorder;
import android.os.SystemClock;
import android.test.ActivityInstrumentationTestCase;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.Suppress;
import android.util.Log;
-import android.view.SurfaceHolder;
import java.io.FileDescriptor;
import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Writer;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.BufferedWriter;
-
import android.media.MediaMetadataRetriever;
/**
- * Junit / Instrumentation - performance measurement for media player and
- * recorder
- */
-public class MediaPlayerPerformance extends ActivityInstrumentationTestCase<MediaFrameworkTest> {
-
- private String TAG = "MediaFrameworkPerformance";
-
- private SQLiteDatabase mDB;
- private SurfaceHolder mSurfaceHolder = null;
- private static final int NUM_STRESS_LOOP = 10;
- private static final int NUM_PLAYBACk_IN_EACH_LOOP = 20;
- private static final long MEDIA_STRESS_WAIT_TIME = 5000; //5 seconds
- private static final String H263_VIDEO_PLAYBACK_MEMOUT =
- "/sdcard/h263VideoPlaybackMemOut.txt";
- private static final String H264_VIDEO_PLAYBACK_MEMOUT =
- "/sdcard/h264VideoPlaybackMemOut.txt";
- private static final String WMV_VIDEO_PLAYBACK_MEMOUT =
- "/sdcard/WmvVideoPlaybackMemOut.txt";
- private static final String H263_VIDEO_ONLY_RECORD_MEMOUT =
- "/sdcard/recordH263VideoOnlyMemOut.txt";
- private static final String MP4_VIDEO_ONLY_RECORD_MEMOUT =
- "/sdcard/recordMPEG4VideoOnlyMemOut.txt";
- private static final String H263_VIDEO_AUDIO_RECORD_MEMOUT =
- "/sdcard/recordVideoH263AudioMemOut.txt";
- private static final String AUDIO_ONLY_RECORD_MEMOUT =
- "/sdcard/recordAudioOnlyMemOut.txt";
-
-
- public MediaPlayerPerformance() {
- super("com.android.mediaframeworktest", MediaFrameworkTest.class);
- }
+ * Junit / Instrumentation test case for the media player api
+
+ */
+public class MediaPlayerPerformance extends ActivityInstrumentationTestCase<MediaFrameworkTest> {
+
+
+ private boolean mIsPlaying = true;
+ private String TAG = "MediaPlayerApiTest";
+ Context mContext;
+ private SQLiteDatabase mDB;
+
+
+ public MediaPlayerPerformance() {
+ super("com.android.mediaframeworktest", MediaFrameworkTest.class);
+ }
protected void setUp() throws Exception {
- super.setUp();
- }
-
- public void createDB() {
- mDB = SQLiteDatabase.openOrCreateDatabase("/sdcard/perf.db", null);
- mDB.execSQL("CREATE TABLE perfdata (_id INTEGER PRIMARY KEY," +
- "file TEXT," + "setdatatime LONG," + "preparetime LONG," +
- "playtime LONG" + ");");
- }
-
- public void audioPlaybackStartupTime(String[] testFile) {
- long t1 = 0;
- long t2 = 0;
- long t3 = 0;
- long t4 = 0;
- long setDataSourceDuration = 0;
- long prepareDuration = 0;
- long startDuration = 0;
- long totalSetDataTime = 0;
- long totalPrepareTime = 0;
- long totalStartDuration = 0;
-
- int numberOfFiles = testFile.length;
- Log.v(TAG, "File length " + numberOfFiles);
- for (int k = 0; k < numberOfFiles; k++) {
- MediaPlayer mp = new MediaPlayer();
- try {
- t1 = SystemClock.uptimeMillis();
- FileInputStream fis = new FileInputStream(testFile[k]);
- FileDescriptor fd = fis.getFD();
- mp.setDataSource(fd);
- fis.close();
- t2 = SystemClock.uptimeMillis();
- mp.prepare();
- t3 = SystemClock.uptimeMillis();
- mp.start();
- t4 = SystemClock.uptimeMillis();
- } catch (Exception e) {
- Log.v(TAG, e.toString());
- }
- setDataSourceDuration = t2 - t1;
- prepareDuration = t3 - t2;
- startDuration = t4 - t3;
- totalSetDataTime = totalSetDataTime + setDataSourceDuration;
- totalPrepareTime = totalPrepareTime + prepareDuration;
- totalStartDuration = totalStartDuration + startDuration;
- mDB.execSQL("INSERT INTO perfdata (file, setdatatime, preparetime," +
- " playtime) VALUES (" + '"' + testFile[k] + '"' + ',' +
- setDataSourceDuration + ',' + prepareDuration +
- ',' + startDuration + ");");
- Log.v(TAG, "File name " + testFile[k]);
- mp.stop();
- mp.release();
- }
- Log.v(TAG, "setDataSource average " + totalSetDataTime / numberOfFiles);
- Log.v(TAG, "prepare average " + totalPrepareTime / numberOfFiles);
- Log.v(TAG, "start average " + totalStartDuration / numberOfFiles);
-
- }
-
- @Suppress
+
+ super.setUp();
+ }
+
+ public void createDB(){
+ mDB = SQLiteDatabase.openOrCreateDatabase("/sdcard/perf.db",null);
+ mDB.execSQL("CREATE TABLE perfdata (_id INTEGER PRIMARY KEY,"
+ + "file TEXT," + "setdatatime LONG," +"preparetime LONG," +"playtime LONG" + ");");
+ }
+
+ public void audioPlaybackStartupTime(String[] testFile){
+ long t1 = 0;
+ long t2 = 0;
+ long t3 = 0;
+ long t4 =0;
+
+ long setDataSourceDuration = 0;
+ long prepareDuration = 0;
+ long startDuration=0;
+
+ long totalSetDataTime=0;
+ long totalPrepareTime=0;
+ long totalStartDuration=0;
+
+ int numberOfFiles = testFile.length;
+ Log.v(TAG, "File lenght " + numberOfFiles);
+ for (int k=0; k<numberOfFiles; k++){
+ MediaPlayer mp = new MediaPlayer();
+ try{
+ t1 = SystemClock.uptimeMillis();
+ FileInputStream fis = new FileInputStream(testFile[k]);
+ FileDescriptor fd = fis.getFD();
+ mp.setDataSource(fd);
+ fis.close();
+ t2 = SystemClock.uptimeMillis();
+ mp.prepare();
+ t3 = SystemClock.uptimeMillis();
+ mp.start();
+ t4 = SystemClock.uptimeMillis();
+ Thread.sleep(10000);
+ mp.pause();
+ }catch (Exception e){}
+ setDataSourceDuration = t2 -t1;
+ prepareDuration = t3 - t2;
+ startDuration = t4 - t3;
+ totalSetDataTime = totalSetDataTime + setDataSourceDuration;
+ totalPrepareTime = totalPrepareTime + prepareDuration;
+ totalStartDuration = totalStartDuration + startDuration;
+ mDB.execSQL("INSERT INTO perfdata (file, setdatatime, preparetime, playtime) VALUES (" + '"' + testFile[k] + '"' +','
+ +setDataSourceDuration+ ',' + prepareDuration + ',' + startDuration +");");
+ Log.v(TAG,"File name " + testFile[k]);
+ mp.stop();
+ mp.release();
+ }
+ Log.v (TAG, "setDataSource average " + totalSetDataTime/numberOfFiles);
+ Log.v (TAG, "prepare average " + totalPrepareTime/numberOfFiles);
+ Log.v (TAG, "start average " + totalStartDuration/numberOfFiles);
+
+ }
+
+ //Test cases for GetCurrentPosition
+ @LargeTest
public void testStartUpTime() throws Exception {
- createDB();
- audioPlaybackStartupTime(MediaNames.MP3FILES);
- audioPlaybackStartupTime(MediaNames.AACFILES);
-
- }
-
- public void wmametadatautility(String[] testFile) {
- long t1 = 0;
- long t2 = 0;
- long sum = 0;
- long duration = 0;
- MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- String value;
- for (int i = 0, n = testFile.length; i < n; ++i) {
- try {
- t1 = SystemClock.uptimeMillis();
- retriever.setDataSource(testFile[i]);
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER);
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
- value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR);
- value =
- retriever
- .extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER);
- t2 = SystemClock.uptimeMillis();
- duration = t2 - t1;
- Log.v(TAG, "Time taken = " + duration);
- sum = sum + duration;
- } catch (Exception e) {
- Log.v(TAG, e.getMessage());
- }
-
- }
- Log.v(TAG, "Average duration = " + sum / testFile.length);
- }
-
-
- // Note: This test is to assume the mediaserver's pid is 34
- public void mediaStressPlayback(String testFilePath) {
- for (int i = 0; i < NUM_PLAYBACk_IN_EACH_LOOP; i++) {
- MediaPlayer mp = new MediaPlayer();
- try {
- mp.setDataSource(testFilePath);
- mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
- mp.prepare();
- mp.start();
- Thread.sleep(MEDIA_STRESS_WAIT_TIME);
- mp.release();
- } catch (Exception e) {
- mp.release();
- Log.v(TAG, e.toString());
- }
- }
- }
-
- // Note: This test is to assume the mediaserver's pid is 34
- private void stressVideoRecord(int frameRate, int width, int height, int videoFormat,
- int outFormat, String outFile, boolean videoOnly) {
- // Video recording
- for (int i = 0; i < NUM_PLAYBACk_IN_EACH_LOOP; i++) {
- MediaRecorder mRecorder = new MediaRecorder();
- try {
- if (!videoOnly) {
- Log.v(TAG, "setAudioSource");
- mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
- }
- mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
- mRecorder.setOutputFormat(outFormat);
- Log.v(TAG, "output format " + outFormat);
- mRecorder.setOutputFile(outFile);
- mRecorder.setVideoFrameRate(frameRate);
- mRecorder.setVideoSize(width, height);
- Log.v(TAG, "setEncoder");
- mRecorder.setVideoEncoder(videoFormat);
- if (!videoOnly) {
- mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
- }
- mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
- mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
- mRecorder.prepare();
- mRecorder.start();
- Thread.sleep(MEDIA_STRESS_WAIT_TIME);
- mRecorder.stop();
- mRecorder.release();
- } catch (Exception e) {
- Log.v("record video failed ", e.toString());
- mRecorder.release();
- }
- }
- }
-
- public void stressAudioRecord(String filePath) {
- // This test is only for the short media file
- for (int i = 0; i < NUM_PLAYBACk_IN_EACH_LOOP; i++) {
- MediaRecorder mRecorder = new MediaRecorder();
- try {
- mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
- mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
- mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
- mRecorder.setOutputFile(filePath);
- mRecorder.prepare();
- mRecorder.start();
- Thread.sleep(MEDIA_STRESS_WAIT_TIME);
- mRecorder.stop();
- mRecorder.release();
- } catch (Exception e) {
- Log.v(TAG, e.toString());
- mRecorder.release();
- }
- }
- }
-
- //Write the ps output to the file
- public void getMemoryWriteToLog(Writer output) {
- String cm = "ps mediaserver";
- String memoryUsage = null;
- int ch;
- try {
- Process p = Runtime.getRuntime().exec(cm);
- InputStream in = p.getInputStream();
- StringBuffer sb = new StringBuffer(512);
- while ((ch = in.read()) != -1) {
- sb.append((char) ch);
- }
- memoryUsage = sb.toString();
- } catch (IOException e) {
- Log.v(TAG, e.toString());
- }
-
- String[] poList = memoryUsage.split("\r|\n|\r\n");
- String memusage = poList[1].concat("\n");
- Log.v(TAG, memusage);
- try {
- //Write to file output
- output.write(memusage);
- } catch (Exception e) {
- e.toString();
- }
- }
-
-
+ createDB();
+ audioPlaybackStartupTime(MediaNames.MP3FILES);
+ audioPlaybackStartupTime(MediaNames.AACFILES);
+
+ }
+
+ public void wmametadatautility(String[] testFile){
+ long t1 = 0;
+ long t2 = 0;
+ long sum = 0;
+ long duration = 0;
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ String value;
+ for(int i = 0, n = testFile.length; i < n; ++i) {
+ try {
+ t1 = SystemClock.uptimeMillis();
+ retriever.setDataSource(testFile[i]);
+ value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
+ value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
+ value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPOSER);
+ value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
+ value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
+ value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR);
+ value = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER);
+ t2 = SystemClock.uptimeMillis();
+ duration = t2 - t1;
+ Log.v(TAG, "Time taken = " + duration);
+ sum=sum+duration;
+ }
+ catch (Exception e){Log.v(TAG, e.getMessage());}
+
+ }
+ Log.v(TAG, "Average duration = " + sum/testFile.length);
+ }
+
@Suppress
public void testWmaParseTime() throws Exception {
- // createDB();
- wmametadatautility(MediaNames.WMASUPPORTED);
- }
-
-
- // Test case 1: Capture the memory usage after every 20 h263 playback
- @LargeTest
- public void testH263VideoPlaybackMemoryUsage() throws Exception {
- File h263MemoryOut = new File(H263_VIDEO_PLAYBACK_MEMOUT);
- Writer output = new BufferedWriter(new FileWriter(h263MemoryOut));
- for (int i = 0; i < NUM_STRESS_LOOP; i++) {
- mediaStressPlayback(MediaNames.VIDEO_HIGHRES_H263);
- getMemoryWriteToLog(output);
- }
- output.close();
- }
-
- // Test case 2: Capture the memory usage after every 20 h264 playback
- @LargeTest
- public void testH264VideoPlaybackMemoryUsage() throws Exception {
- File h264MemoryOut = new File(H264_VIDEO_PLAYBACK_MEMOUT);
- Writer output = new BufferedWriter(new FileWriter(h264MemoryOut));
- for (int i = 0; i < NUM_STRESS_LOOP; i++) {
- mediaStressPlayback(MediaNames.VIDEO_H264_AMR);
- getMemoryWriteToLog(output);
- }
- output.close();
- }
-
- // Test case 3: Capture the memory usage after each 20 WMV playback
- @LargeTest
- public void testWMVVideoPlaybackMemoryUsage() throws Exception {
- File wmvMemoryOut = new File(WMV_VIDEO_PLAYBACK_MEMOUT);
- Writer output = new BufferedWriter(new FileWriter(wmvMemoryOut));
- for (int i = 0; i < NUM_STRESS_LOOP; i++) {
- mediaStressPlayback(MediaNames.VIDEO_WMV);
- getMemoryWriteToLog(output);
- }
- output.close();
- }
-
- // Test case 4: Capture the memory usage after every 20 video only recorded
- @LargeTest
- public void testH263RecordVideoOnlyMemoryUsage() throws Exception {
- File videoH263RecordOnlyMemoryOut = new File(H263_VIDEO_ONLY_RECORD_MEMOUT);
- Writer output = new BufferedWriter(new FileWriter(videoH263RecordOnlyMemoryOut));
- for (int i = 0; i < NUM_STRESS_LOOP; i++) {
- stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.H263,
- MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true);
- getMemoryWriteToLog(output);
- }
- output.close();
- }
-
- // Test case 5: Capture the memory usage after every 20 video only recorded
- @LargeTest
- public void testMpeg4RecordVideoOnlyMemoryUsage() throws Exception {
- File videoMp4RecordOnlyMemoryOut = new File(MP4_VIDEO_ONLY_RECORD_MEMOUT);
- Writer output = new BufferedWriter(new FileWriter(videoMp4RecordOnlyMemoryOut));
- for (int i = 0; i < NUM_STRESS_LOOP; i++) {
- stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.MPEG_4_SP,
- MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true);
- getMemoryWriteToLog(output);
- }
- output.close();
- }
-
- // Test case 6: Capture the memory usage after every 20 video and audio recorded
- @LargeTest
- public void testRecordVidedAudioMemoryUsage() throws Exception {
- File videoRecordAudioMemoryOut = new File(H263_VIDEO_AUDIO_RECORD_MEMOUT);
- Writer output = new BufferedWriter(new FileWriter(videoRecordAudioMemoryOut));
- for (int i = 0; i < NUM_STRESS_LOOP; i++) {
- stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.H263,
- MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, false);
- getMemoryWriteToLog(output);
- }
- output.close();
- }
-
- // Test case 7: Capture the memory usage after every 20 audio only recorded
- @LargeTest
- public void testRecordAudioOnlyMemoryUsage() throws Exception {
- File audioOnlyMemoryOut = new File(AUDIO_ONLY_RECORD_MEMOUT);
- Writer output = new BufferedWriter(new FileWriter(audioOnlyMemoryOut));
- for (int i = 0; i < NUM_STRESS_LOOP; i++) {
- stressAudioRecord(MediaNames.RECORDER_OUTPUT);
- getMemoryWriteToLog(output);
- }
- output.close();
+ // createDB();
+ wmametadatautility(MediaNames.WMASUPPORTED);
}
+
+
}
+
diff --git a/opengl/java/android/opengl/Matrix.java b/opengl/java/android/opengl/Matrix.java
index 13ba36e..38be6be 100644
--- a/opengl/java/android/opengl/Matrix.java
+++ b/opengl/java/android/opengl/Matrix.java
@@ -19,7 +19,7 @@ package android.opengl;
/**
* Matrix math utilities. These methods operate on OpenGL ES format
* matrices and vectors stored in float arrays.
- *
+ *
* Matrices are 4 x 4 column-vector matrices stored in column-major
* order:
* <pre>
@@ -28,7 +28,7 @@ package android.opengl;
* m[offset + 2] m[offset + 6] m[offset + 10] m[offset + 14]
* m[offset + 3] m[offset + 7] m[offset + 11] m[offset + 15]
* </pre>
- *
+ *
* Vectors are 4 row x 1 column column-vectors stored in order:
* <pre>
* v[offset + 0]
@@ -45,11 +45,11 @@ public class Matrix {
* matrix multiplication works, the result matrix will have the same
* effect as first multiplying by the rhs matrix, then multiplying by
* the lhs matrix. This is the opposite of what you might expect.
- *
+ *
* The same float array may be passed for result, lhs, and/or rhs. However,
* the result element values are undefined if the result elements overlap
* either the lhs or rhs elements.
- *
+ *
* @param result The float array that holds the result.
* @param resultOffset The offset into the result array where the result is
* stored.
@@ -57,7 +57,7 @@ public class Matrix {
* @param lhsOffset The offset into the lhs array where the lhs is stored
* @param rhs The float array that holds the right-hand-side matrix.
* @param rhsOffset The offset into the rhs array where the rhs is stored.
- *
+ *
* @throws IllegalArgumentException if result, lhs, or rhs are null, or if
* resultOffset + 16 > result.length or lhsOffset + 16 > lhs.length or
* rhsOffset + 16 > rhs.length.
@@ -68,11 +68,11 @@ public class Matrix {
/**
* Multiply a 4 element vector by a 4x4 matrix and store the result in a 4
* element column vector. In matrix notation: result = lhs x rhs
- *
+ *
* The same float array may be passed for resultVec, lhsMat, and/or rhsVec.
* However, the resultVec element values are undefined if the resultVec
* elements overlap either the lhsMat or rhsVec elements.
- *
+ *
* @param resultVec The float array that holds the result vector.
* @param resultVecOffset The offset into the result array where the result
* vector is stored.
@@ -90,10 +90,10 @@ public class Matrix {
public static native void multiplyMV(float[] resultVec,
int resultVecOffset, float[] lhsMat, int lhsMatOffset,
float[] rhsVec, int rhsVecOffset);
-
+
/**
* Transposes a 4 x 4 matrix.
- *
+ *
* @param mTrans the array that holds the output inverted matrix
* @param mTransOffset an offset into mInv where the inverted matrix is
* stored.
@@ -113,7 +113,7 @@ public class Matrix {
/**
* Inverts a 4 x 4 matrix.
- *
+ *
* @param mInv the array that holds the output inverted matrix
* @param mInvOffset an offset into mInv where the inverted matrix is
* stored.
@@ -220,7 +220,7 @@ public class Matrix {
/**
* Computes an orthographic projection matrix.
- *
+ *
* @param m returns the result
* @param mOffset
* @param left
@@ -269,8 +269,8 @@ public class Matrix {
m[mOffset + 9] = 0.0f;
m[mOffset + 11] = 0.0f;
}
-
-
+
+
/**
* Define a projection matrix in terms of six clip planes
* @param m the float array that holds the perspective matrix
@@ -283,7 +283,7 @@ public class Matrix {
* @param near
* @param far
*/
-
+
public static void frustumM(float[] m, int offset,
float left, float right, float bottom, float top,
float near, float far) {
@@ -331,7 +331,7 @@ public class Matrix {
/**
* Computes the length of a vector
- *
+ *
* @param x x coordinate of a vector
* @param y y coordinate of a vector
* @param z z coordinate of a vector
@@ -340,7 +340,7 @@ public class Matrix {
public static float length(float x, float y, float z) {
return (float) Math.sqrt(x * x + y * y + z * z);
}
-
+
/**
* Sets matrix m to the identity matrix.
* @param sm returns the result
@@ -356,7 +356,7 @@ public class Matrix {
}
/**
- * Scales matrix m by x, y, and z, putting the result in sm
+ * Scales matrix m by sx, sy, and sz, putting the result in sm
* @param sm returns the result
* @param smOffset index into sm where the result matrix starts
* @param m source matrix
@@ -395,9 +395,9 @@ public class Matrix {
m[ 8 + mi] *= z;
}
}
-
+
/**
- * Translates matrix m by x, y, and z, putting the result in tm
+ * Translates matrix m by sx, sy, and sz, putting the result in tm
* @param tm returns the result
* @param tmOffset index into sm where the result matrix starts
* @param m source matrix
@@ -409,9 +409,6 @@ public class Matrix {
public static void translateM(float[] tm, int tmOffset,
float[] m, int mOffset,
float x, float y, float z) {
- for (int i=0 ; i<12 ; i++) {
- tm[tmOffset + i] = m[mOffset + i];
- }
for (int i=0 ; i<4 ; i++) {
int tmi = tmOffset + i;
int mi = mOffset + i;
@@ -419,9 +416,9 @@ public class Matrix {
m[12 + mi];
}
}
-
+
/**
- * Translates matrix m by x, y, and z in place.
+ * Translates matrix m by sx, sy, and sz in place.
* @param m matrix
* @param mOffset index into m where the matrix starts
* @param x translation factor x
@@ -436,7 +433,7 @@ public class Matrix {
m[12 + mi] += m[mi] * x + m[4 + mi] * y + m[8 + mi] * z;
}
}
-
+
/**
* Rotates matrix m by angle a (in degrees) around the axis (x, y, z)
* @param rm returns the result
@@ -455,7 +452,7 @@ public class Matrix {
setRotateM(r, 0, a, x, y, z);
multiplyMM(rm, rmOffset, m, mOffset, r, 0);
}
-
+
/**
* Rotates matrix m in place by angle a (in degrees)
* around the axis (x, y, z)
@@ -473,7 +470,7 @@ public class Matrix {
multiplyMM(temp, 16, m, mOffset, temp, 0);
System.arraycopy(temp, 16, m, mOffset, 16);
}
-
+
/**
* Rotates matrix m by angle a (in degrees) around the axis (x, y, z)
* @param rm returns the result
@@ -527,7 +524,7 @@ public class Matrix {
float zx = z * x;
float xs = x * s;
float ys = y * s;
- float zs = z * s;
+ float zs = z * s;
rm[rmOffset + 0] = x*x*nc + c;
rm[rmOffset + 4] = xy*nc - zs;
rm[rmOffset + 8] = zx*nc + ys;
@@ -539,7 +536,7 @@ public class Matrix {
rm[rmOffset + 10] = z*z*nc + c;
}
}
-
+
/**
* Converts Euler angles to a rotation matrix
* @param rm returns the result
@@ -561,7 +558,7 @@ public class Matrix {
float sz = (float) Math.sin(z);
float cxsy = cx * sy;
float sxsy = sx * sy;
-
+
rm[rmOffset + 0] = cy * cz;
rm[rmOffset + 1] = -cy * sz;
rm[rmOffset + 2] = sy;
diff --git a/opengl/java/android/opengl/Visibility.java b/opengl/java/android/opengl/Visibility.java
index 40e446f..b802160 100644
--- a/opengl/java/android/opengl/Visibility.java
+++ b/opengl/java/android/opengl/Visibility.java
@@ -17,6 +17,7 @@
package android.opengl;
/**
+ * {@hide}
* A collection of utility methods for computing the visibility of triangle
* meshes.
*
diff --git a/opengl/libagl/egl.cpp b/opengl/libagl/egl.cpp
index 5b90bf0..1446fb2 100644
--- a/opengl/libagl/egl.cpp
+++ b/opengl/libagl/egl.cpp
@@ -463,8 +463,6 @@ struct config_management_t {
// ----------------------------------------------------------------------------
-#define VERSION_MAJOR 1
-#define VERSION_MINOR 2
static char const * const gVendorString = "Google Inc.";
static char const * const gVersionString = "1.2 Android Driver";
static char const * const gClientApiString = "OpenGL ES";
@@ -1004,8 +1002,8 @@ EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
}
if (res == EGL_TRUE) {
- if (major != NULL) *major = VERSION_MAJOR;
- if (minor != NULL) *minor = VERSION_MINOR;
+ if (major != NULL) *major = 1;
+ if (minor != NULL) *minor = 2;
}
return res;
}
diff --git a/opengl/libs/EGL/egl.cpp b/opengl/libs/EGL/egl.cpp
index 687c8bc..e35773e 100644
--- a/opengl/libs/EGL/egl.cpp
+++ b/opengl/libs/EGL/egl.cpp
@@ -50,8 +50,8 @@
namespace android {
// ----------------------------------------------------------------------------
-#define VERSION_MAJOR 1
-#define VERSION_MINOR 4
+#define VERSION_MINOR 1
+#define VERSION_MAJOR 4
static char const * const gVendorString = "Android";
static char const * const gVersionString = "1.31 Android META-EGL";
static char const * const gClientApiString = "OpenGL ES";
@@ -648,8 +648,8 @@ EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
}
if (res == EGL_TRUE) {
- if (major != NULL) *major = VERSION_MAJOR;
- if (minor != NULL) *minor = VERSION_MINOR;
+ if (major != NULL) *major = 1;
+ if (minor != NULL) *minor = 2;
return EGL_TRUE;
}
return setError(EGL_NOT_INITIALIZED, EGL_FALSE);
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index f8b5700..90acd41 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -27,6 +27,7 @@ import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;
+import android.location.LocationManager;
import android.media.AudioManager;
import android.media.AudioService;
import android.net.ConnectivityManager;
@@ -63,7 +64,7 @@ class DatabaseHelper extends SQLiteOpenHelper {
private static final String TAG = "SettingsProvider";
private static final String DATABASE_NAME = "settings.db";
- private static final int DATABASE_VERSION = 33;
+ private static final int DATABASE_VERSION = 32;
private Context mContext;
@@ -353,24 +354,6 @@ class DatabaseHelper extends SQLiteOpenHelper {
upgradeVersion = 32;
}
- if (upgradeVersion == 32) {
- // The Wi-Fi watchdog SSID list is now seeded with the value of
- // the property ro.com.android.wifi-watchlist
- String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
- if (!TextUtils.isEmpty(wifiWatchList)) {
- db.beginTransaction();
- try {
- db.execSQL("INSERT OR IGNORE INTO secure(name,value) values('" +
- Settings.Secure.WIFI_WATCHDOG_WATCH_LIST + "','" +
- wifiWatchList + "');");
- db.setTransactionSuccessful();
- } finally {
- db.endTransaction();
- }
- }
- upgradeVersion = 33;
- }
-
if (upgradeVersion != currentVersion) {
Log.w(TAG, "Got stuck trying to upgrade from version " + upgradeVersion
+ ", must wipe the settings provider");
@@ -636,20 +619,11 @@ class DatabaseHelper extends SQLiteOpenHelper {
R.bool.def_wifi_on);
loadBooleanSetting(stmt, Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
R.bool.def_networks_available_notification_on);
-
- String wifiWatchList = SystemProperties.get("ro.com.android.wifi-watchlist");
- if (!TextUtils.isEmpty(wifiWatchList)) {
- loadSetting(stmt, Settings.Secure.WIFI_WATCHDOG_WATCH_LIST, wifiWatchList);
- }
-
+
// Don't do this. The SystemServer will initialize ADB_ENABLED from a
// persistent system property instead.
//loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);
- // Allow mock locations default, based on build
- loadSetting(stmt, Settings.Secure.ALLOW_MOCK_LOCATION,
- "1".equals(SystemProperties.get("ro.allow.mock.location")) ? 1 : 0);
-
stmt.close();
}
diff --git a/packages/SubscribedFeedsProvider/AndroidManifest.xml b/packages/SubscribedFeedsProvider/AndroidManifest.xml
index 6ecda48..94c4be5 100644
--- a/packages/SubscribedFeedsProvider/AndroidManifest.xml
+++ b/packages/SubscribedFeedsProvider/AndroidManifest.xml
@@ -6,7 +6,7 @@
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.SUBSCRIBED_FEEDS_READ" />
<uses-permission android:name="android.permission.SUBSCRIBED_FEEDS_WRITE" />
-
+
<application android:process="system"
android:allowClearUserData="false"
android:icon="@drawable/app_icon"
@@ -17,7 +17,7 @@
android:multiprocess="false"
android:readPermission="android.permission.SUBSCRIBED_FEEDS_READ"
android:writePermission="android.permission.SUBSCRIBED_FEEDS_WRITE" />
- <receiver android:name="SubscribedFeedsBroadcastReceiver">
+ <receiver android:name="SubscribedFeedsService">
<intent-filter>
<action android:name="android.intent.action.GTALK_DATA_MESSAGE_RECEIVED" />
<category android:name="GSYNC_TICKLE"/>
@@ -29,6 +29,5 @@
<action android:name="com.android.subscribedfeeds.action.REFRESH" />
</intent-filter>
</receiver>
- <service android:name="SubscribedFeedsIntentService"/>
</application>
</manifest>
diff --git a/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsBroadcastReceiver.java b/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsBroadcastReceiver.java
deleted file mode 100644
index 3513215..0000000
--- a/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsBroadcastReceiver.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-** Copyright 2006, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-package com.android.providers.subscribedfeeds;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.util.Log;
-
-/**
- * Handles the XMPP_CONNECTED_ACTION intent by updating all the
- * subscribed feeds with the new jabber id and initiating a sync
- * for all subscriptions.
- *
- * Handles the TICKLE_ACTION intent by finding the matching
- * subscribed feed and intiating a sync for it.
- */
-public class SubscribedFeedsBroadcastReceiver extends BroadcastReceiver {
-
- private static final String TAG = "Sync";
-
- public void onReceive(Context context, Intent intent) {
- if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "Received intent " + intent);
- intent.setClass(context, SubscribedFeedsIntentService.class);
- context.startService(intent);
- }
-}
diff --git a/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsIntentService.java b/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsService.java
index df599c7..8d6e272 100644
--- a/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsIntentService.java
+++ b/packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsService.java
@@ -1,35 +1,62 @@
+/*
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
package com.android.providers.subscribedfeeds;
-import android.content.Intent;
-import android.content.Context;
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.ContentValues;
+import android.content.Context;
+import android.content.Intent;
import android.content.SharedPreferences;
-import android.util.Log;
-import android.util.Config;
-import android.util.EventLog;
-import android.app.IntentService;
-import android.provider.Sync;
-import android.provider.SubscribedFeeds;
-import android.provider.SyncConstValue;
import android.database.Cursor;
import android.database.sqlite.SQLiteFullException;
-import android.app.AlarmManager;
-import android.app.PendingIntent;
+import android.net.Uri;
import android.os.Bundle;
-import android.os.Debug;
+import android.provider.SubscribedFeeds;
+import android.provider.Sync;
+import android.provider.SyncConstValue;
import android.text.TextUtils;
-import android.net.Uri;
+import android.util.Config;
+import android.util.EventLog;
+import android.util.Log;
import java.util.ArrayList;
import java.util.Calendar;
/**
- * A service to handle various intents asynchronously.
+ * Handles the XMPP_CONNECTED_ACTION intent by updating all the
+ * subscribed feeds with the new jabber id and initiating a sync
+ * for all subscriptions.
+ *
+ * Handles the TICKLE_ACTION intent by finding the matching
+ * subscribed feed and intiating a sync for it.
*/
-public class SubscribedFeedsIntentService extends IntentService {
+public class SubscribedFeedsService extends BroadcastReceiver {
+
private static final String TAG = "Sync";
+ private static final String SUBSCRIBED_FEEDS_REFRESH_ACTION =
+ "com.android.subscribedfeeds.action.REFRESH";
+
+ private static final Intent sSubscribedFeedsRefreshIntent =
+ new Intent(SUBSCRIBED_FEEDS_REFRESH_ACTION);
+
private static final String[] sAccountProjection =
new String[] {SubscribedFeeds.Accounts._SYNC_ACCOUNT};
@@ -40,20 +67,11 @@ public class SubscribedFeedsIntentService extends IntentService {
private static final String sSubscribedFeedsPrefs = "subscribedFeeds";
- private static final String GTALK_DATA_MESSAGE_RECEIVED =
- "android.intent.action.GTALK_DATA_MESSAGE_RECEIVED";
+ static final int LOG_TICKLE = 2742;
- private static final String SUBSCRIBED_FEEDS_REFRESH_ACTION =
- "com.android.subscribedfeeds.action.REFRESH";
-
- private static final int LOG_TICKLE = 2742;
-
- public SubscribedFeedsIntentService() {
- super("SubscribedFeedsIntentService");
- }
-
- protected void onHandleIntent(Intent intent) {
- if (GTALK_DATA_MESSAGE_RECEIVED.equals(intent.getAction())) {
+ public void onReceive(Context context, Intent intent) {
+ if ("android.intent.action.GTALK_DATA_MESSAGE_RECEIVED".equals(
+ intent.getAction())) {
boolean fromTrustedServer = intent.getBooleanExtra("from_trusted_server", false);
if (fromTrustedServer) {
String account = intent.getStringExtra("account");
@@ -71,7 +89,7 @@ public class SubscribedFeedsIntentService extends IntentService {
+ account + " - " + token);
}
- handleTickle(this, account, token);
+ handleTickle(context, account, token);
} else {
if (Log.isLoggable(TAG, Log.VERBOSE)) {
Log.v(TAG, "Ignoring tickle -- not from trusted server.");
@@ -84,23 +102,25 @@ public class SubscribedFeedsIntentService extends IntentService {
Log.d(TAG, "Received boot completed action");
}
// load the time from the shared preferences and schedule an alarm
- long refreshTime = getSharedPreferences(
+ long refreshTime = context.getSharedPreferences(
sSubscribedFeedsPrefs,
Context.MODE_WORLD_READABLE).getLong(sRefreshTime, 0);
- scheduleRefresh(this, refreshTime);
- } else if (SUBSCRIBED_FEEDS_REFRESH_ACTION.equals(intent.getAction())) {
+ scheduleRefresh(context, refreshTime);
+ } else if (sSubscribedFeedsRefreshIntent.getAction().equals(
+ intent.getAction())) {
if (Config.LOGD) {
Log.d(TAG, "Received sSubscribedFeedsRefreshIntent");
}
- handleRefreshAlarm(this);
+ handleRefreshAlarm(context);
}
}
+
private void scheduleRefresh(Context context, long when) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(
Context.ALARM_SERVICE);
- PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
- 0, new Intent(SUBSCRIBED_FEEDS_REFRESH_ACTION), 0);
- alarmManager.set(AlarmManager.RTC, when, pendingIntent);
+ PendingIntent sender = PendingIntent.getBroadcast(context,
+ 0, sSubscribedFeedsRefreshIntent, 0);
+ alarmManager.set(AlarmManager.RTC, when, sender);
}
private void handleTickle(Context context, String account, String feed) {
@@ -184,8 +204,10 @@ public class SubscribedFeedsIntentService extends IntentService {
// Schedule a refresh.
long refreshTime = Calendar.getInstance().getTimeInMillis() + SUBSCRIPTION_REFRESH_INTERVAL;
scheduleRefresh(context, refreshTime);
- SharedPreferences.Editor editor = context.getSharedPreferences(sSubscribedFeedsPrefs,
- Context.MODE_WORLD_READABLE).edit();
+ SharedPreferences preferences = context
+ .getSharedPreferences(sSubscribedFeedsPrefs,
+ Context.MODE_WORLD_READABLE);
+ SharedPreferences.Editor editor = preferences.edit();
editor.putLong(sRefreshTime, refreshTime);
editor.commit();
}
diff --git a/preloaded-classes b/preloaded-classes
index b91f41b..a90579f 100644
--- a/preloaded-classes
+++ b/preloaded-classes
@@ -783,7 +783,7 @@ org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl
org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream
org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLOutputStream
org.apache.harmony.xnet.provider.jsse.SSLParameters
-org.apache.harmony.xnet.provider.jsse.ClientSessionContext
+org.apache.harmony.xnet.provider.jsse.SSLSessionContextImpl$1
org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl
org.apache.harmony.xnet.provider.jsse.TrustManagerImpl
org.apache.http.HttpHost
diff --git a/services/java/com/android/server/AlarmManagerService.java b/services/java/com/android/server/AlarmManagerService.java
index 07c7299..d8012b2 100644
--- a/services/java/com/android/server/AlarmManagerService.java
+++ b/services/java/com/android/server/AlarmManagerService.java
@@ -34,26 +34,21 @@ import android.os.PowerManager;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.text.TextUtils;
-import android.text.format.Time;
-import android.util.EventLog;
+import android.util.Config;
import android.util.Log;
import java.io.FileDescriptor;
+import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
-import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TimeZone;
class AlarmManagerService extends IAlarmManager.Stub {
- // The threshold for how long an alarm can be late before we print a
- // warning message. The time duration is in milliseconds.
- private static final long LATE_ALARM_THRESHOLD = 10 * 1000;
-
private static final int RTC_WAKEUP_MASK = 1 << AlarmManager.RTC_WAKEUP;
private static final int RTC_MASK = 1 << AlarmManager.RTC;
private static final int ELAPSED_REALTIME_WAKEUP_MASK = 1 << AlarmManager.ELAPSED_REALTIME_WAKEUP;
@@ -77,7 +72,6 @@ class AlarmManagerService extends IAlarmManager.Stub {
private final ArrayList<Alarm> mRtcAlarms = new ArrayList<Alarm>();
private final ArrayList<Alarm> mElapsedRealtimeWakeupAlarms = new ArrayList<Alarm>();
private final ArrayList<Alarm> mElapsedRealtimeAlarms = new ArrayList<Alarm>();
- private final IncreasingTimeOrder mIncreasingTimeOrder = new IncreasingTimeOrder();
// slots corresponding with the inexact-repeat interval buckets,
// ordered from shortest to longest
@@ -344,26 +338,11 @@ class AlarmManagerService extends IAlarmManager.Stub {
private int addAlarmLocked(Alarm alarm) {
ArrayList<Alarm> alarmList = getAlarmList(alarm.type);
- int index = Collections.binarySearch(alarmList, alarm, mIncreasingTimeOrder);
- if (index < 0) {
- index = 0 - index - 1;
- }
- if (localLOGV) Log.v(TAG, "Adding alarm " + alarm + " at " + index);
+ int index = Collections.binarySearch(alarmList, alarm);
+ index = (index < 0) ? ((index + 1) * -1) : index;
+ if (localLOGV) Log.v(
+ TAG, "Adding alarm " + alarm + " at " + index);
alarmList.add(index, alarm);
-
- if (localLOGV) {
- // Display the list of alarms for this alarm type
- Log.v(TAG, "alarms: " + alarmList.size() + " type: " + alarm.type);
- int position = 0;
- for (Alarm a : alarmList) {
- Time time = new Time();
- time.set(a.when);
- String timeStr = time.format("%b %d %I:%M:%S %p");
- Log.v(TAG, position + ": " + timeStr
- + " " + a.operation.getTargetPackage());
- position += 1;
- }
- }
return index;
}
@@ -480,22 +459,14 @@ class AlarmManagerService extends IAlarmManager.Stub {
if (localLOGV) Log.v(TAG, "Checking active alarm when=" + alarm.when + " " + alarm);
- if (alarm.when > now) {
+ if (alarm.when > now)
+ {
// don't fire alarms in the future
break;
}
-
- // If the alarm is late, then print a warning message.
- // Note that this can happen if the user creates a new event on
- // the Calendar app with a reminder that is in the past. In that
- // case, the reminder alarm will fire immediately.
- if (localLOGV && now - alarm.when > LATE_ALARM_THRESHOLD) {
- Log.v(TAG, "alarm is late! alarm time: " + alarm.when
- + " now: " + now + " delay (in seconds): "
- + (now - alarm.when) / 1000);
- }
- // Recurring alarms may have passed several alarm intervals while the
+ // add it to the trigger list so we can trigger it without the lock held.
+ // recurring alarms may have passed several alarm intervals while the
// phone was asleep or off, so pass a trigger count when sending them.
if (localLOGV) Log.v(TAG, "Alarm triggering: " + alarm);
alarm.count = 1;
@@ -510,42 +481,28 @@ class AlarmManagerService extends IAlarmManager.Stub {
it.remove();
// if it repeats queue it up to be read-added to the list
- if (alarm.repeatInterval > 0) {
+ if (alarm.repeatInterval > 0)
+ {
repeats.add(alarm);
}
}
// reset any repeating alarms.
it = repeats.iterator();
- while (it.hasNext()) {
+ while (it.hasNext())
+ {
Alarm alarm = it.next();
alarm.when += alarm.count * alarm.repeatInterval;
addAlarmLocked(alarm);
}
- if (alarmList.size() > 0) {
+ if (alarmList.size() > 0)
+ {
setLocked(alarmList.get(0));
}
}
- /**
- * This Comparator sorts Alarms into increasing time order.
- */
- public static class IncreasingTimeOrder implements Comparator<Alarm> {
- public int compare(Alarm a1, Alarm a2) {
- long when1 = a1.when;
- long when2 = a2.when;
- if (when1 - when2 > 0) {
- return 1;
- }
- if (when1 - when2 < 0) {
- return -1;
- }
- return 0;
- }
- }
-
- private static class Alarm {
+ private class Alarm implements Comparable<Alarm> {
public int type;
public int count;
public long when;
@@ -558,7 +515,15 @@ class AlarmManagerService extends IAlarmManager.Stub {
operation = null;
}
- @Override
+ public int compareTo(Alarm obj)
+ {
+ if (obj.when > this.when) return -1;
+ if (obj.when < this.when) return 1;
+ if (obj.operation.equals(this.operation)
+ && obj.repeatInterval == this.repeatInterval) return 0;
+ return -1;
+ }
+
public String toString()
{
return "Alarm{"
@@ -736,11 +701,11 @@ class AlarmManagerService extends IAlarmManager.Stub {
public void scheduleDateChangedEvent() {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
+ calendar.add(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
- calendar.add(Calendar.DAY_OF_MONTH, 1);
set(AlarmManager.RTC, calendar.getTimeInMillis(), mDateChangeSender);
}
diff --git a/services/java/com/android/server/BatteryService.java b/services/java/com/android/server/BatteryService.java
index 3a9a59f..9c9a580 100644
--- a/services/java/com/android/server/BatteryService.java
+++ b/services/java/com/android/server/BatteryService.java
@@ -20,31 +20,20 @@ import com.android.internal.app.IBatteryStats;
import com.android.server.am.BatteryStatsService;
import android.app.ActivityManagerNative;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.BatteryManager;
import android.os.Binder;
-import android.os.Debug;
-import android.os.IBinder;
import android.os.RemoteException;
-import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.UEventObserver;
-import android.provider.Checkin;
-import android.provider.Settings;
import android.util.EventLog;
import android.util.Log;
-import java.io.File;
import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
import java.io.PrintWriter;
-
-
+import java.lang.String;
/**
* <p>BatteryService monitors the charging status, and charge level of the device
@@ -71,24 +60,12 @@ import java.io.PrintWriter;
class BatteryService extends Binder {
private static final String TAG = BatteryService.class.getSimpleName();
- private static final boolean LOCAL_LOGV = false;
-
static final int LOG_BATTERY_LEVEL = 2722;
static final int LOG_BATTERY_STATUS = 2723;
static final int LOG_BATTERY_DISCHARGE_STATUS = 2730;
static final int BATTERY_SCALE = 100; // battery capacity is a percentage
- // Used locally for determining when to make a last ditch effort to log
- // discharge stats before the device dies.
- private static final int CRITICAL_BATTERY_LEVEL = 4;
-
- private static final int DUMP_MAX_LENGTH = 24 * 1024;
- private static final String[] DUMPSYS_ARGS = new String[] { "-c", "-u" };
- private static final String BATTERY_STATS_SERVICE_NAME = "batteryinfo";
-
- private static final String DUMPSYS_DATA_PATH = "/data/system/";
-
// This should probably be exposed in the API, though it's not critical
private static final int BATTERY_PLUGGED_NONE = 0;
@@ -104,7 +81,6 @@ class BatteryService extends Binder {
private int mBatteryVoltage;
private int mBatteryTemperature;
private String mBatteryTechnology;
- private boolean mBatteryLevelCritical;
private int mLastBatteryStatus;
private int mLastBatteryHealth;
@@ -112,7 +88,6 @@ class BatteryService extends Binder {
private int mLastBatteryLevel;
private int mLastBatteryVoltage;
private int mLastBatteryTemperature;
- private boolean mLastBatteryLevelCritical;
private int mPlugType;
private int mLastPlugType = -1; // Extra state so we can detect first run
@@ -120,7 +95,6 @@ class BatteryService extends Binder {
private long mDischargeStartTime;
private int mDischargeStartLevel;
-
public BatteryService(Context context) {
mContext = context;
mBatteryStats = BatteryStatsService.getService();
@@ -175,8 +149,6 @@ class BatteryService extends Binder {
private synchronized final void update() {
native_update();
-
- mBatteryLevelCritical = mBatteryLevel <= CRITICAL_BATTERY_LEVEL;
if (mAcOnline) {
mPlugType = BatteryManager.BATTERY_PLUGGED_AC;
} else if (mUsbOnline) {
@@ -204,8 +176,6 @@ class BatteryService extends Binder {
mDischargeStartLevel, mBatteryLevel);
// make sure we see a discharge event before logging again
mDischargeStartTime = 0;
-
- logOutlier(duration);
}
} else if (mPlugType == BATTERY_PLUGGED_NONE) {
// charging -> discharging or we just powered up
@@ -227,12 +197,6 @@ class BatteryService extends Binder {
EventLog.writeEvent(LOG_BATTERY_LEVEL,
mBatteryLevel, mBatteryVoltage, mBatteryTemperature);
}
- if (mBatteryLevelCritical && !mLastBatteryLevelCritical &&
- mPlugType == BATTERY_PLUGGED_NONE) {
- // We want to make sure we log discharge cycle outliers
- // if the battery is about to die.
- logOutlier(SystemClock.elapsedRealtime() - mDischargeStartTime);
- }
mLastBatteryStatus = mBatteryStatus;
mLastBatteryHealth = mBatteryHealth;
@@ -241,7 +205,6 @@ class BatteryService extends Binder {
mLastPlugType = mPlugType;
mLastBatteryVoltage = mBatteryVoltage;
mLastBatteryTemperature = mBatteryTemperature;
- mLastBatteryLevelCritical = mBatteryLevelCritical;
sendIntent();
}
@@ -284,83 +247,6 @@ class BatteryService extends Binder {
ActivityManagerNative.broadcastStickyIntent(intent, null);
}
- private final void logBatteryStats() {
-
- IBinder batteryInfoService = ServiceManager.getService(BATTERY_STATS_SERVICE_NAME);
- if (batteryInfoService != null) {
- byte[] buffer = new byte[DUMP_MAX_LENGTH];
- File dumpFile = null;
- FileOutputStream dumpStream = null;
- try {
- // dump the service to a file
- dumpFile = new File(DUMPSYS_DATA_PATH + BATTERY_STATS_SERVICE_NAME + ".dump");
- dumpStream = new FileOutputStream(dumpFile);
- batteryInfoService.dump(dumpStream.getFD(), DUMPSYS_ARGS);
- dumpStream.getFD().sync();
-
- // read dumped file above into buffer truncated to DUMP_MAX_LENGTH
- // and insert into events table.
- int length = (int) Math.min(dumpFile.length(), DUMP_MAX_LENGTH);
- FileInputStream fileInputStream = new FileInputStream(dumpFile);
- int nread = fileInputStream.read(buffer, 0, length);
- if (nread > 0) {
- Checkin.logEvent(mContext.getContentResolver(),
- Checkin.Events.Tag.BATTERY_DISCHARGE_INFO,
- new String(buffer, 0, nread));
- if (LOCAL_LOGV) Log.v(TAG, "dumped " + nread + "b from " +
- batteryInfoService + "to log");
- if (LOCAL_LOGV) Log.v(TAG, "actual dump:" + new String(buffer, 0, nread));
- }
- } catch (RemoteException e) {
- Log.e(TAG, "failed to dump service '" + BATTERY_STATS_SERVICE_NAME +
- "':" + e);
- } catch (IOException e) {
- Log.e(TAG, "failed to write dumpsys file: " + e);
- } finally {
- // make sure we clean up
- if (dumpStream != null) {
- try {
- dumpStream.close();
- } catch (IOException e) {
- Log.e(TAG, "failed to close dumpsys output stream");
- }
- }
- if (dumpFile != null && !dumpFile.delete()) {
- Log.e(TAG, "failed to delete temporary dumpsys file: "
- + dumpFile.getAbsolutePath());
- }
- }
- }
- }
-
- private final void logOutlier(long duration) {
- ContentResolver cr = mContext.getContentResolver();
- String dischargeThresholdString = Settings.Gservices.getString(cr,
- Settings.Gservices.BATTERY_DISCHARGE_THRESHOLD);
- String durationThresholdString = Settings.Gservices.getString(cr,
- Settings.Gservices.BATTERY_DISCHARGE_DURATION_THRESHOLD);
-
- if (dischargeThresholdString != null && durationThresholdString != null) {
- try {
- long durationThreshold = Long.parseLong(durationThresholdString);
- int dischargeThreshold = Integer.parseInt(dischargeThresholdString);
- if (duration <= durationThreshold &&
- mDischargeStartLevel - mBatteryLevel >= dischargeThreshold) {
- // If the discharge cycle is bad enough we want to know about it.
- logBatteryStats();
- }
- if (LOCAL_LOGV) Log.v(TAG, "duration threshold: " + durationThreshold +
- " discharge threshold: " + dischargeThreshold);
- if (LOCAL_LOGV) Log.v(TAG, "duration: " + duration + " discharge: " +
- (mDischargeStartLevel - mBatteryLevel));
- } catch (NumberFormatException e) {
- Log.e(TAG, "Invalid DischargeThresholds GService string: " +
- durationThresholdString + " or " + dischargeThresholdString);
- return;
- }
- }
- }
-
private final int getIcon(int level) {
if (mBatteryStatus == BatteryManager.BATTERY_STATUS_CHARGING) {
return com.android.internal.R.drawable.stat_sys_battery_charge;
diff --git a/services/java/com/android/server/GadgetService.java b/services/java/com/android/server/GadgetService.java
index 0943778..4a430e0 100644
--- a/services/java/com/android/server/GadgetService.java
+++ b/services/java/com/android/server/GadgetService.java
@@ -229,7 +229,7 @@ class GadgetService extends IGadgetService.Stub
int callingUid = getCallingUid();
final int N = mHosts.size();
boolean changed = false;
- for (int i=N-1; i>=0; i--) {
+ for (int i=0; i<N; i++) {
Host host = mHosts.get(i);
if (host.uid == callingUid) {
deleteHostLocked(host);
@@ -244,7 +244,7 @@ class GadgetService extends IGadgetService.Stub
void deleteHostLocked(Host host) {
final int N = host.instances.size();
- for (int i=N-1; i>=0; i--) {
+ for (int i=0; i<N; i++) {
GadgetId id = host.instances.get(i);
deleteGadgetLocked(id);
}
@@ -622,17 +622,6 @@ class GadgetService extends IGadgetService.Stub
}
return gadgetIds;
}
-
- public int[] getGadgetIds(ComponentName provider) {
- synchronized (mGadgetIds) {
- Provider p = lookupProviderLocked(provider);
- if (p != null && getCallingUid() == p.uid) {
- return getGadgetIds(p);
- } else {
- return new int[0];
- }
- }
- }
private Provider parseProviderInfoXml(ComponentName component, ResolveInfo ri) {
Provider p = null;
diff --git a/services/java/com/android/server/HardwareService.java b/services/java/com/android/server/HardwareService.java
index 2131ffd..40456ff 100755
--- a/services/java/com/android/server/HardwareService.java
+++ b/services/java/com/android/server/HardwareService.java
@@ -25,7 +25,6 @@ import android.os.Hardware;
import android.os.IHardwareService;
import android.os.Power;
import android.os.PowerManager;
-import android.os.Process;
import android.os.RemoteException;
import android.os.IBinder;
import android.os.Binder;
@@ -241,7 +240,6 @@ public class HardwareService extends IHardwareService.Stub {
}
public void run() {
- Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_DISPLAY);
synchronized (this) {
int index = 0;
long[] pattern = mPattern;
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java
index 9d69114..bc8da93 100644
--- a/services/java/com/android/server/LocationManagerService.java
+++ b/services/java/com/android/server/LocationManagerService.java
@@ -214,6 +214,7 @@ public class LocationManagerService extends ILocationManager.Stub
// Last known cell service state
private TelephonyManager mTelephonyManager;
+ private int mSignalStrength = -1;
// Location collector
private ILocationCollector mCollector;
@@ -1763,7 +1764,7 @@ public class LocationManagerService extends ILocationManager.Stub
Log.d(TAG, "installing network location provider");
INetworkLocationManager.InstallCallback callback =
(INetworkLocationManager.InstallCallback)msg.obj;
- callback.installNetworkLocationProvider(LocationManagerService.this);
+ callback.installNetworkLocationProvider(mContext, LocationManagerService.this);
}
}
} catch (Exception e) {
@@ -1773,90 +1774,40 @@ public class LocationManagerService extends ILocationManager.Stub
}
}
- class CellLocationUpdater extends Thread {
- CellLocation mNextLocation;
-
- CellLocationUpdater() {
- super("CellLocationUpdater");
- }
-
+ PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
+
+ private CellState mLastCellState = null;
@Override
- public void run() {
- int curAsu = -1;
- CellLocation curLocation = null;
-
- while (true) {
- // See if there is more work to do...
+ public void onCellLocationChanged(CellLocation cellLocation) {
+ try {
synchronized (mLocationListeners) {
- if (curLocation == mNextLocation) {
- mCellLocationUpdater = null;
- break;
- }
-
- curLocation = mNextLocation;
- if (curLocation == null) {
- mCellLocationUpdater = null;
- break;
+ int asu = mSignalStrength;
+
+ // Gets cell state
+ mLastCellState = new CellState(mTelephonyManager, cellLocation, asu);
+
+ // Notify collector
+ if (mCollector != null) {
+ mCollector.updateCellState(mLastCellState);
}
-
- curAsu = mLastSignalStrength;
-
- mNextLocation = null;
- }
-
- try {
- // Gets cell state. This can block so must be done without
- // locks held.
- CellState cs = new CellState(mTelephonyManager, curLocation, curAsu);
-
- synchronized (mLocationListeners) {
- mLastCellState = cs;
-
- cs.updateSignalStrength(mLastSignalStrength);
- cs.updateRadioType(mLastRadioType);
-
- // Notify collector
- if (mCollector != null) {
- mCollector.updateCellState(cs);
- }
- // Updates providers
- List<LocationProviderImpl> providers = LocationProviderImpl.getProviders();
- for (LocationProviderImpl provider : providers) {
- if (provider.requiresCell()) {
- provider.updateCellState(cs);
- }
+ // Updates providers
+ List<LocationProviderImpl> providers = LocationProviderImpl.getProviders();
+ for (LocationProviderImpl provider : providers) {
+ if (provider.requiresCell()) {
+ provider.updateCellState(mLastCellState);
}
}
- } catch (RuntimeException e) {
- Log.e(TAG, "Exception in PhoneStateListener.onCellLocationChanged:", e);
}
- }
- }
- }
-
- CellLocationUpdater mCellLocationUpdater = null;
- CellState mLastCellState = null;
- int mLastSignalStrength = -1;
- int mLastRadioType = -1;
-
- PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
-
- @Override
- public void onCellLocationChanged(CellLocation cellLocation) {
- synchronized (mLocationListeners) {
- if (mCellLocationUpdater == null) {
- mCellLocationUpdater = new CellLocationUpdater();
- mCellLocationUpdater.start();
- }
- mCellLocationUpdater.mNextLocation = cellLocation;
+ } catch (Exception e) {
+ Log.e(TAG, "Exception in PhoneStateListener.onCellLocationCahnged:", e);
}
}
@Override
public void onSignalStrengthChanged(int asu) {
synchronized (mLocationListeners) {
- mLastSignalStrength = asu;
+ mSignalStrength = asu;
if (mLastCellState != null) {
mLastCellState.updateSignalStrength(asu);
@@ -1867,18 +1818,8 @@ public class LocationManagerService extends ILocationManager.Stub
@Override
public void onDataConnectionStateChanged(int state) {
synchronized (mLocationListeners) {
- // Get radio type
- int radioType = mTelephonyManager.getNetworkType();
- if (radioType == TelephonyManager.NETWORK_TYPE_GPRS ||
- radioType == TelephonyManager.NETWORK_TYPE_EDGE) {
- radioType = CellState.RADIO_TYPE_GPRS;
- } else if (radioType == TelephonyManager.NETWORK_TYPE_UMTS) {
- radioType = CellState.RADIO_TYPE_WCDMA;
- }
- mLastRadioType = radioType;
-
if (mLastCellState != null) {
- mLastCellState.updateRadioType(radioType);
+ mLastCellState.updateRadioType(mTelephonyManager);
}
}
}
@@ -2614,11 +2555,8 @@ public class LocationManagerService extends ILocationManager.Stub
pw.println(" mGpsNavigating=" + mGpsNavigating);
pw.println(" mNetworkLocationProvider=" + mNetworkLocationProvider);
pw.println(" mNetworkLocationInterface=" + mNetworkLocationInterface);
- pw.println(" mLastSignalStrength=" + mLastSignalStrength
- + " mLastRadioType=" + mLastRadioType);
- pw.println(" mCellLocationUpdater=" + mCellLocationUpdater);
- pw.println(" mLastCellState=" + mLastCellState);
pw.println(" mCollector=" + mCollector);
+ pw.println(" mSignalStrength=" + mSignalStrength);
pw.println(" mAlarmInterval=" + mAlarmInterval
+ " mScreenOn=" + mScreenOn
+ " mWakeLockAcquireTime=" + mWakeLockAcquireTime);
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java
index 8814e48..0feb1da 100644
--- a/services/java/com/android/server/MountService.java
+++ b/services/java/com/android/server/MountService.java
@@ -505,12 +505,9 @@ class MountService extends IMountService.Stub {
if (mMediaStorageNotification == null) {
mMediaStorageNotification = new Notification();
mMediaStorageNotification.when = 0;
- }
-
- if (mPlaySounds) {
- mMediaStorageNotification.defaults |= Notification.DEFAULT_SOUND;
- } else {
- mMediaStorageNotification.defaults &= ~Notification.DEFAULT_SOUND;
+ if (mPlaySounds) {
+ mMediaStorageNotification.defaults |= Notification.DEFAULT_SOUND;
+ }
}
if (dismissable) {
diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java
index bc4b169..e5de7f9 100644
--- a/services/java/com/android/server/NotificationManagerService.java
+++ b/services/java/com/android/server/NotificationManagerService.java
@@ -311,17 +311,6 @@ class NotificationManagerService extends INotificationManager.Stub
mBatteryFull = batteryFull;
updateLights();
}
- } else if (action.equals(Intent.ACTION_PACKAGE_REMOVED)
- || action.equals(Intent.ACTION_PACKAGE_RESTARTED)) {
- Uri uri = intent.getData();
- if (uri == null) {
- return;
- }
- String pkgName = uri.getSchemeSpecificPart();
- if (pkgName == null) {
- return;
- }
- cancelAllNotifications(pkgName);
}
}
};
@@ -342,8 +331,6 @@ class NotificationManagerService extends INotificationManager.Stub
// register for battery changed notifications
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
- filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
- filter.addAction(Intent.ACTION_PACKAGE_RESTARTED);
mContext.registerReceiver(mIntentReceiver, filter);
}
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index fec3608..c490e42 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -1828,7 +1828,7 @@ class PackageManagerService extends IPackageManager.Stub {
}
return true;
}
-
+
private PackageParser.Package scanPackageLI(
File scanFile, File destCodeFile, File destResourceFile,
PackageParser.Package pkg, int parseFlags, int scanMode) {
@@ -1925,18 +1925,19 @@ class PackageManagerService extends IPackageManager.Stub {
}
}
- // Just create the setting, don't add it yet
pkgSetting = mSettings.getPackageLP(pkg, suid, destCodeFile,
- destResourceFile, pkg.applicationInfo.flags, true, false);
+ destResourceFile, pkg.applicationInfo.flags, true);
if (pkgSetting == null) {
Log.w(TAG, "Creating application package " + pkgName + " failed");
mLastScanError = PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE;
return null;
}
- if(mSettings.mDisabledSysPackages.get(pkg.packageName) != null) {
- pkg.applicationInfo.flags |= ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
+ synchronized(mPackages) {
+ if(mSettings.mDisabledSysPackages.get(pkg.packageName) != null) {
+ pkg.applicationInfo.flags |= ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
+ }
}
-
+
pkg.applicationInfo.uid = pkgSetting.userId;
pkg.mExtras = pkgSetting;
@@ -1984,12 +1985,24 @@ class PackageManagerService extends IPackageManager.Stub {
long scanFileTime = scanFile.lastModified();
final boolean forceDex = (scanMode&SCAN_FORCE_DEX) != 0;
final boolean scanFileNewer = forceDex || scanFileTime != pkgSetting.getTimeStamp();
+
+ // At this point we know it is okay to accept the package, though
+ // errors can still happen as we try to install...
+
+ if ((scanMode&SCAN_MONITOR) != 0) {
+ pkg.mPath = destCodeFile.getAbsolutePath();
+ mAppDirs.put(pkg.mPath, pkg);
+ }
pkg.applicationInfo.processName = fixProcessName(
pkg.applicationInfo.packageName,
pkg.applicationInfo.processName,
pkg.applicationInfo.uid);
pkg.applicationInfo.publicSourceDir = pkgSetting.resourcePathString;
+ synchronized (mPackages) {
+ mPackages.put(pkg.applicationInfo.packageName, pkg);
+ }
+
File dataPath;
if (mPlatformPackage == pkg) {
// The system package is special.
@@ -2032,7 +2045,8 @@ class PackageManagerService extends IPackageManager.Stub {
return null;
}
}
- }
+
+ }
if (!recovered) {
mHasSystemUidErrors = true;
}
@@ -2064,7 +2078,7 @@ class PackageManagerService extends IPackageManager.Stub {
int ret = mInstaller.install(pkgName, pkg.applicationInfo.uid,
pkg.applicationInfo.uid);
if(ret < 0) {
- // Error from installer
+ //error from installer
mLastScanError = PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE;
return null;
}
@@ -2134,17 +2148,8 @@ class PackageManagerService extends IPackageManager.Stub {
pkg.applicationInfo.flags |= ApplicationInfo.FLAG_FACTORY_TEST;
}
- if ((scanMode&SCAN_MONITOR) != 0) {
- pkg.mPath = destCodeFile.getAbsolutePath();
- mAppDirs.put(pkg.mPath, pkg);
- }
-
synchronized (mPackages) {
- // We don't expect installation to fail beyond this point
- // Add the new setting to mSettings
- mSettings.insertPackageSettingLP(pkgSetting, pkg.packageName, suid);
- // Add the new setting to mPackages
- mPackages.put(pkg.applicationInfo.packageName, pkg);
+
int N = pkg.providers.size();
StringBuilder r = null;
int i;
@@ -3192,7 +3197,7 @@ class PackageManagerService extends IPackageManager.Stub {
private final String mRootDir;
private final boolean mIsRom;
}
-
+
/* Called when a downloaded package installation has been confirmed by the user */
public void installPackage(
final Uri packageURI, final IPackageInstallObserver observer, final int flags) {
@@ -3243,7 +3248,7 @@ class PackageManagerService extends IPackageManager.Stub {
/*
* Install a non-existing package.
*/
- private void installNewPackageLI(String pkgName,
+ private void installNewPackageLI(String pkgName, int parseFlags,
File tmpPackageFile,
String destFilePath, File destPackageFile, File destResourceFile,
PackageParser.Package pkg, boolean forwardLocked,
@@ -3267,7 +3272,7 @@ class PackageManagerService extends IPackageManager.Stub {
}
mLastScanError = PackageManager.INSTALL_SUCCEEDED;
PackageParser.Package newPackage = scanPackageLI(tmpPackageFile, destPackageFile,
- destResourceFile, pkg, 0,
+ destResourceFile, pkg, parseFlags,
SCAN_MONITOR | SCAN_FORCE_DEX
| SCAN_UPDATE_SIGNATURE
| (forwardLocked ? SCAN_FORWARD_LOCKED : 0));
@@ -3299,7 +3304,7 @@ class PackageManagerService extends IPackageManager.Stub {
}
}
- private void replacePackageLI(String pkgName,
+ private void replacePackageLI(String pkgName, int parseFlags,
File tmpPackageFile,
String destFilePath, File destPackageFile, File destResourceFile,
PackageParser.Package pkg, boolean forwardLocked,
@@ -3316,15 +3321,16 @@ class PackageManagerService extends IPackageManager.Stub {
boolean sysPkg = ((deletedPackage.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0);
if(sysPkg) {
replaceSystemPackageLI(deletedPackage,
+ parseFlags,
tmpPackageFile, destFilePath,
destPackageFile, destResourceFile, pkg, forwardLocked, res);
} else {
- replaceNonSystemPackageLI(deletedPackage, tmpPackageFile, destFilePath,
+ replaceNonSystemPackageLI(deletedPackage, parseFlags, tmpPackageFile, destFilePath,
destPackageFile, destResourceFile, pkg, forwardLocked, res);
}
}
- private void replaceNonSystemPackageLI(PackageParser.Package deletedPackage,
+ private void replaceNonSystemPackageLI(PackageParser.Package deletedPackage, int parseFlags,
File tmpPackageFile,
String destFilePath, File destPackageFile, File destResourceFile,
PackageParser.Package pkg, boolean forwardLocked,
@@ -3333,7 +3339,6 @@ class PackageManagerService extends IPackageManager.Stub {
String pkgName = deletedPackage.packageName;
boolean deletedPkg = true;
boolean updatedSettings = false;
- int parseFlags = PackageManager.REPLACE_EXISTING_PACKAGE;
// First delete the existing package while retaining the data directory
if (!deletePackageLI(pkgName, false, PackageManager.DONT_DELETE_DATA,
res.removedInfo)) {
@@ -3409,15 +3414,14 @@ class PackageManagerService extends IPackageManager.Stub {
}
}
- private void replaceSystemPackageLI(PackageParser.Package deletedPackage,
+ private void replaceSystemPackageLI(PackageParser.Package deletedPackage, int parseFlags,
File tmpPackageFile,
String destFilePath, File destPackageFile, File destResourceFile,
PackageParser.Package pkg, boolean forwardLocked,
PackageInstalledInfo res) {
PackageParser.Package newPackage = null;
boolean updatedSettings = false;
- int parseFlags = PackageManager.REPLACE_EXISTING_PACKAGE |
- PackageParser.PARSE_IS_SYSTEM;
+ parseFlags |= PackageParser.PARSE_IS_SYSTEM;
String packageName = deletedPackage.packageName;
res.returnCode = PackageManager.INSTALL_FAILED_REPLACE_COULDNT_DELETE;
if (packageName == null) {
@@ -3561,6 +3565,7 @@ class PackageManagerService extends IPackageManager.Stub {
String pkgName = null;
boolean forwardLocked = false;
boolean replacingExistingPackage = false;
+
// Result object to be returned
PackageInstalledInfo res = new PackageInstalledInfo();
res.returnCode = PackageManager.INSTALL_SUCCEEDED;
@@ -3666,13 +3671,13 @@ class PackageManagerService extends IPackageManager.Stub {
}
if(replacingExistingPackage) {
- replacePackageLI(pkgName,
+ replacePackageLI(pkgName, pFlags,
tmpPackageFile,
destFilePath, destPackageFile, destResourceFile,
pkg, forwardLocked,
res);
} else {
- installNewPackageLI(pkgName,
+ installNewPackageLI(pkgName, pFlags,
tmpPackageFile,
destFilePath, destPackageFile, destResourceFile,
pkg, forwardLocked,
@@ -3997,6 +4002,7 @@ class PackageManagerService extends IPackageManager.Stub {
File sourceFile = new File(applicationInfo.sourceDir);
if (!sourceFile.exists()) {
Log.w(TAG, "Package source " + applicationInfo.sourceDir + " does not exist.");
+ return false;
}
outInfo.uid = applicationInfo.uid;
@@ -5312,10 +5318,10 @@ class PackageManagerService extends IPackageManager.Stub {
PackageSetting getPackageLP(PackageParser.Package pkg,
SharedUserSetting sharedUser, File codePath, File resourcePath,
- int pkgFlags, boolean create, boolean add) {
+ int pkgFlags, boolean create) {
final String name = pkg.packageName;
PackageSetting p = getPackageLP(name, sharedUser, codePath,
- resourcePath, pkgFlags, create, add);
+ resourcePath, pkgFlags, create);
if (p != null) {
p.pkg = pkg;
@@ -5446,7 +5452,7 @@ class PackageManagerService extends IPackageManager.Stub {
private PackageSetting getPackageLP(String name,
SharedUserSetting sharedUser, File codePath, File resourcePath,
- int pkgFlags, boolean create, boolean add) {
+ int pkgFlags, boolean create) {
PackageSetting p = mPackages.get(name);
if (p != null) {
if (!p.codePath.equals(codePath)) {
@@ -5491,25 +5497,15 @@ class PackageManagerService extends IPackageManager.Stub {
} else {
p.userId = FIRST_APPLICATION_UID;
}
+
if (p.userId < 0) {
reportSettingsProblem(Log.WARN,
"Package " + name + " could not be assigned a valid uid");
return null;
}
- if (add) {
- // Finish adding new package by adding it and updating shared
- // user preferences
- insertPackageSettingLP(p, name, sharedUser);
- }
+ mPackages.put(name, p);
}
- return p;
- }
-
- // Utility method that adds a PackageSetting to mPackages and
- // completes updating the shared user attributes
- private void insertPackageSettingLP(PackageSetting p, String name,
- SharedUserSetting sharedUser) {
- mPackages.put(name, p);
+
if (sharedUser != null) {
if (p.sharedUser != null && p.sharedUser != sharedUser) {
reportSettingsProblem(Log.ERROR,
@@ -5519,16 +5515,17 @@ class PackageManagerService extends IPackageManager.Stub {
p.sharedUser.packages.remove(p);
} else if (p.userId != sharedUser.userId) {
reportSettingsProblem(Log.ERROR,
- "Package " + p.name + " was user id " + p.userId
- + " but is now user " + sharedUser
- + " with id " + sharedUser.userId
- + "; I am not changing its files so it will probably fail!");
+ "Package " + p.name + " was user id " + p.userId
+ + " but is now user " + sharedUser
+ + " with id " + sharedUser.userId
+ + "; I am not changing its files so it will probably fail!");
}
sharedUser.packages.add(p);
p.sharedUser = sharedUser;
p.userId = sharedUser.userId;
}
+ return p;
}
private void updateSharedUserPerms (PackageSetting deletedPs) {
@@ -5983,7 +5980,7 @@ class PackageManagerService extends IPackageManager.Stub {
if (idObj != null && idObj instanceof SharedUserSetting) {
PackageSetting p = getPackageLP(pp.name,
(SharedUserSetting)idObj, pp.codePath, pp.resourcePath,
- pp.pkgFlags, true, true);
+ pp.pkgFlags, true);
if (p == null) {
Log.w(TAG, "Unable to create application package for "
+ pp.name);
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index ad30ffc..f41d21f 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -973,9 +973,11 @@ class PowerManagerService extends IPowerManager.Stub implements LocalPowerManage
if (mSpew) {
Log.d(TAG, "mBroadcastWakeLock=" + mBroadcastWakeLock);
}
- if (mContext != null && ActivityManagerNative.isSystemReady()) {
- mContext.sendOrderedBroadcast(mScreenOnIntent, null,
- mScreenOnBroadcastDone, mHandler, 0, null, null);
+ if (mContext != null) {
+ if (ActivityManagerNative.isSystemReady()) {
+ mContext.sendOrderedBroadcast(mScreenOnIntent, null,
+ mScreenOnBroadcastDone, mHandler, 0, null, null);
+ }
} else {
synchronized (mLocks) {
EventLog.writeEvent(LOG_POWER_SCREEN_BROADCAST_STOP, 2,
@@ -994,7 +996,7 @@ class PowerManagerService extends IPowerManager.Stub implements LocalPowerManage
// ignore it.
}
- if (mContext != null && ActivityManagerNative.isSystemReady()) {
+ if (mContext != null) {
mContext.sendOrderedBroadcast(mScreenOffIntent, null,
mScreenOffBroadcastDone, mHandler, 0, null, null);
} else {
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 77383bd..fc25e38 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -188,6 +188,7 @@ class ServerThread extends Thread {
Log.i(TAG, "Starting Status Bar Service.");
statusBar = new StatusBarService(context);
ServiceManager.addService("statusbar", statusBar);
+ com.android.server.status.StatusBarPolicy.installIcons(context, statusBar);
} catch (Throwable e) {
Log.e(TAG, "Failure starting StatusBarService", e);
}
@@ -314,12 +315,6 @@ class ServerThread extends Thread {
} catch (Throwable e) {
Log.e(TAG, "Failure starting Gadget Service", e);
}
-
- try {
- com.android.server.status.StatusBarPolicy.installIcons(context, statusBar);
- } catch (Throwable e) {
- Log.e(TAG, "Failure installing status bar icons", e);
- }
}
// make sure the ADB_ENABLED setting value matches the secure property value
diff --git a/services/java/com/android/server/TelephonyRegistry.java b/services/java/com/android/server/TelephonyRegistry.java
index 5e5fb93..b5cf1aa 100644
--- a/services/java/com/android/server/TelephonyRegistry.java
+++ b/services/java/com/android/server/TelephonyRegistry.java
@@ -33,14 +33,12 @@ import java.util.ArrayList;
import java.io.FileDescriptor;
import java.io.PrintWriter;
-import com.android.internal.app.IBatteryStats;
import com.android.internal.telephony.ITelephonyRegistry;
import com.android.internal.telephony.IPhoneStateListener;
import com.android.internal.telephony.DefaultPhoneNotifier;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneStateIntentReceiver;
import com.android.internal.telephony.TelephonyIntents;
-import com.android.server.am.BatteryStatsService;
/**
@@ -57,9 +55,8 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
int events;
}
- private final Context mContext;
- private final ArrayList<Record> mRecords = new ArrayList();
- private final IBatteryStats mBatteryStats;
+ private Context mContext;
+ private ArrayList<Record> mRecords = new ArrayList();
private int mCallState = TelephonyManager.CALL_STATE_IDLE;
private String mCallIncomingNumber = "";
@@ -84,7 +81,6 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
TelephonyRegistry(Context context) {
CellLocation.getEmpty().fillInNotifierBundle(mCellLocation);
mContext = context;
- mBatteryStats = BatteryStatsService.getService();
}
public void listen(String pkgForDebug, IPhoneStateListener callback, int events,
@@ -418,18 +414,6 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
}
private void broadcastCallStateChanged(int state, String incomingNumber) {
- long ident = Binder.clearCallingIdentity();
- try {
- if (state == TelephonyManager.CALL_STATE_IDLE) {
- mBatteryStats.notePhoneOff();
- } else {
- mBatteryStats.notePhoneOn();
- }
- } catch (RemoteException e) {
- } finally {
- Binder.restoreCallingIdentity(ident);
- }
-
Intent intent = new Intent(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
intent.putExtra(Phone.STATE_KEY,
DefaultPhoneNotifier.convertCallState(state).toString());
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index a3ceb71..10a2d29 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -3954,10 +3954,6 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
synchronized(mWindowMap) {
mKeyWaiter.bindTargetWindowLocked(focus);
}
-
- // NOSHIP extra state logging
- mKeyWaiter.recordDispatchState(event, focus);
- // END NOSHIP
try {
if (DEBUG_INPUT || DEBUG_FOCUS) {
@@ -4101,55 +4097,6 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
* but not the other way around.
*/
final class KeyWaiter {
- // NOSHIP debugging
- public class DispatchState {
- private KeyEvent event;
- private WindowState focus;
- private long time;
- private WindowState lastWin;
- private IBinder lastBinder;
- private boolean finished;
- private boolean gotFirstWindow;
- private boolean eventDispatching;
- private long timeToSwitch;
- private boolean wasFrozen;
- private boolean focusPaused;
-
- DispatchState(KeyEvent theEvent, WindowState theFocus) {
- focus = theFocus;
- event = theEvent;
- time = System.currentTimeMillis();
- // snapshot KeyWaiter state
- lastWin = mLastWin;
- lastBinder = mLastBinder;
- finished = mFinished;
- gotFirstWindow = mGotFirstWindow;
- eventDispatching = mEventDispatching;
- timeToSwitch = mTimeToSwitch;
- wasFrozen = mWasFrozen;
- // cache the paused state at ctor time as well
- if (theFocus == null || theFocus.mToken == null) {
- Log.i(TAG, "focus " + theFocus + " mToken is null at event dispatch!");
- focusPaused = false;
- } else {
- focusPaused = theFocus.mToken.paused;
- }
- }
-
- public String toString() {
- return "{{" + event + " to " + focus + " @ " + time
- + " lw=" + lastWin + " lb=" + lastBinder
- + " fin=" + finished + " gfw=" + gotFirstWindow
- + " ed=" + eventDispatching + " tts=" + timeToSwitch
- + " wf=" + wasFrozen + " fp=" + focusPaused + "}}";
- }
- };
- private DispatchState mDispatchState = null;
- public void recordDispatchState(KeyEvent theEvent, WindowState theFocus) {
- mDispatchState = new DispatchState(theEvent, theFocus);
- }
- // END NOSHIP
-
public static final int RETURN_NOTHING = 0;
public static final int RETURN_PENDING_POINTER = 1;
public static final int RETURN_PENDING_TRACKBALL = 2;
@@ -4311,10 +4258,6 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
Log.w(TAG, "Key dispatching timed out sending to " +
(targetWin != null ? targetWin.mAttrs.getTitle()
: "<null>"));
- // NOSHIP debugging
- Log.w(TAG, "Dispatch state: " + mDispatchState);
- Log.w(TAG, "Current state: " + new DispatchState(nextKey, targetWin));
- // END NOSHIP
//dump();
if (targetWin != null) {
at = targetWin.getAppToken();
@@ -4697,7 +4640,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
newWindow.mToken.paused = false;
mGotFirstWindow = true;
- boolean doNotify = false;
+ boolean doNotify = true;
if ((newWindow.mAttrs.flags & FLAG_SYSTEM_ERROR) != 0) {
if (DEBUG_INPUT) Log.v(TAG,
@@ -4706,7 +4649,6 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
mLastBinder = null;
mMotionTarget = null;
mFinished = true;
- doNotify = true; // ensure that we reset the key waiters after hijacking
} else if (mLastWin != null) {
// If the new window is above the window we are
// waiting on, then stop waiting and let key dispatching
@@ -4715,15 +4657,15 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
TAG, "Last win layer=" + mLastWin.mLayer
+ ", new win layer=" + newWindow.mLayer);
if (newWindow.mLayer >= mLastWin.mLayer) {
- // The new window is above the old; finish pending input to the last
- // window and start directing it to the new one.
- mLastWin.mToken.paused = false;
- doFinishedKeyLocked(true); // does a notifyAll()
+ if (!mLastWin.canReceiveKeys()) {
+ mLastWin.mToken.paused = false;
+ doFinishedKeyLocked(true); // does a notifyAll()
+ doNotify = false;
+ }
+ } else {
+ // the new window is lower; no need to wake key waiters
+ doNotify = false;
}
- // Either the new window is lower, so there is no need to wake key waiters,
- // or we just finished key input to the previous window, which implicitly
- // notified the key waiters. In both cases, we don't need to issue the
- // notification here, so we do not set doNotify.
}
if (doNotify) {
@@ -6463,7 +6405,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
public String toString() {
return "Window{"
+ Integer.toHexString(System.identityHashCode(this))
- + " " + mAttrs.getTitle() + " paused=" + mToken.paused + "}";
+ + " " + mAttrs.getTitle() + "}";
}
}
@@ -8702,7 +8644,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
+ " mLastBinder=" + mKeyWaiter.mLastBinder);
pw.println(" mFinished=" + mKeyWaiter.mFinished
+ " mGotFirstWindow=" + mKeyWaiter.mGotFirstWindow
- + " mEventDispatching=" + mKeyWaiter.mEventDispatching
+ + " mEventDispatching" + mKeyWaiter.mEventDispatching
+ " mTimeToSwitch=" + mKeyWaiter.mTimeToSwitch);
}
}
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 141569e..6443d53 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -361,13 +361,6 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
HistoryRecord mFocusedActivity = null;
/**
- * This is the last activity that we put into the paused state. This is
- * used to determine if we need to do an activity transition while sleeping,
- * when we normally hold the top activity paused.
- */
- HistoryRecord mLastPausedActivity = null;
-
- /**
* List of activities that are waiting for a new activity
* to become visible before completing whatever operation they are
* supposed to do.
@@ -1826,7 +1819,6 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
if (DEBUG_PAUSE) Log.v(TAG, "Start pausing: " + prev);
mResumedActivity = null;
mPausingActivity = prev;
- mLastPausedActivity = prev;
prev.state = ActivityState.PAUSING;
prev.task.touchActiveTime();
@@ -1845,11 +1837,9 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
// Ignore exception, if process died other code will cleanup.
Log.w(TAG, "Exception thrown during pause", e);
mPausingActivity = null;
- mLastPausedActivity = null;
}
} else {
mPausingActivity = null;
- mLastPausedActivity = null;
}
// If we are not going to sleep, we want to ensure the device is
@@ -2012,7 +2002,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
// First: if this is not the current activity being started, make
// sure it matches the current configuration.
if (r != starting && doThisProcess) {
- ensureActivityConfigurationLocked(r, 0);
+ ensureActivityConfigurationLocked(r);
}
if (r.app == null || r.app.thread == null) {
@@ -2202,15 +2192,6 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
return false;
}
- // If we are sleeping, and there is no resumed activity, and the top
- // activity is paused, well that is the state we want.
- if (mSleeping && mLastPausedActivity == next && next.state == ActivityState.PAUSED) {
- // Make sure we have executed any pending transitions, since there
- // should be nothing left to do at this point.
- mWindowManager.executeAppTransition();
- return false;
- }
-
// The activity may be waiting for stop, but that is no longer
// appropriate for it.
mStoppingActivities.remove(next);
@@ -2330,7 +2311,6 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
// Do over!
mHandler.sendEmptyMessage(RESUME_TOP_ACTIVITY_MSG);
}
- mWindowManager.executeAppTransition();
return true;
}
@@ -3859,9 +3839,6 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
if (DEBUG_PAUSE) Log.v(TAG, "App died while pausing: " + mPausingActivity);
mPausingActivity = null;
}
- if (mLastPausedActivity != null && mLastPausedActivity.app == app) {
- mLastPausedActivity = null;
- }
// Remove this application's activities from active lists.
removeHistoryRecordsForAppLocked(mLRUActivities, app);
@@ -4455,7 +4432,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
Log.w(TAG, "Process " + app + " failed to attach");
mProcessNames.remove(app.processName, app.info.uid);
Process.killProcess(pid);
- if (mPendingBroadcast != null && mPendingBroadcast.curApp.pid == pid) {
+ if (mPendingBroadcast.curApp.pid == pid) {
Log.w(TAG, "Unattached app died before broadcast acknowledged, skipping");
mPendingBroadcast = null;
scheduleBroadcastsLocked();
@@ -7859,7 +7836,6 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
pw.println(" mPausingActivity: " + mPausingActivity);
pw.println(" mResumedActivity: " + mResumedActivity);
pw.println(" mFocusedActivity: " + mFocusedActivity);
- pw.println(" mLastPausedActivity: " + mLastPausedActivity);
if (mRecentTasks.size() > 0) {
pw.println(" ");
@@ -10999,7 +10975,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
}
if (starting != null) {
- kept = ensureActivityConfigurationLocked(starting, changes);
+ kept = ensureActivityConfigurationLocked(starting);
if (kept) {
// If this didn't result in the starting activity being
// destroyed, then we need to make sure at this point that all
@@ -11056,8 +11032,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
* for whatever reason. Ensures the HistoryRecord is updated with the
* correct configuration and all other bookkeeping is handled.
*/
- private final boolean ensureActivityConfigurationLocked(HistoryRecord r,
- int globalChanges) {
+ private final boolean ensureActivityConfigurationLocked(HistoryRecord r) {
if (DEBUG_SWITCH) Log.i(TAG, "Ensuring correct configuration: " + r);
// Short circuit: if the two configurations are the exact same
@@ -11104,7 +11079,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
if ((changes&(~r.info.configChanges)) != 0) {
// Aha, the activity isn't handling the change, so DIE DIE DIE.
r.configChangeFlags |= changes;
- r.startFreezingScreenLocked(r.app, globalChanges);
+ r.startFreezingScreenLocked(r.app, changes);
if (r.app == null || r.app.thread == null) {
if (DEBUG_SWITCH) Log.i(TAG, "Switch is destroying non-running " + r);
destroyActivityLocked(r, true);
diff --git a/services/java/com/android/server/am/BaseErrorDialog.java b/services/java/com/android/server/am/BaseErrorDialog.java
index bed2768..4f62f62 100644
--- a/services/java/com/android/server/am/BaseErrorDialog.java
+++ b/services/java/com/android/server/am/BaseErrorDialog.java
@@ -31,8 +31,6 @@ class BaseErrorDialog extends AlertDialog {
super(context, com.android.internal.R.style.Theme_Dialog_AppError);
getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
- WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
getWindow().setTitle("Error Dialog");
setIcon(R.drawable.ic_dialog_alert);
}
diff --git a/services/java/com/android/server/am/BatteryStatsService.java b/services/java/com/android/server/am/BatteryStatsService.java
index 27d0401..9ba1198 100644
--- a/services/java/com/android/server/am/BatteryStatsService.java
+++ b/services/java/com/android/server/am/BatteryStatsService.java
@@ -70,13 +70,15 @@ public final class BatteryStatsService extends IBatteryStats.Stub {
public byte[] getStatistics() {
mContext.enforceCallingPermission(
android.Manifest.permission.BATTERY_STATS, null);
- //Log.i("foo", "SENDING BATTERY INFO:");
- //mStats.dumpLocked(new LogPrinter(Log.INFO, "foo"));
- Parcel out = Parcel.obtain();
- mStats.writeToParcel(out, 0);
- byte[] data = out.marshall();
- out.recycle();
- return data;
+ synchronized (mStats) {
+ //Log.i("foo", "SENDING BATTERY INFO:");
+ //mStats.dumpLocked(new LogPrinter(Log.INFO, "foo"));
+ Parcel out = Parcel.obtain();
+ mStats.writeToParcel(out, 0);
+ byte[] data = out.marshall();
+ out.recycle();
+ return data;
+ }
}
public void noteStartWakelock(int uid, String name, int type) {
@@ -135,20 +137,6 @@ public final class BatteryStatsService extends IBatteryStats.Stub {
}
}
- public void notePhoneOn() {
- enforceCallingPermission();
- synchronized (mStats) {
- mStats.notePhoneOnLocked();
- }
- }
-
- public void notePhoneOff() {
- enforceCallingPermission();
- synchronized (mStats) {
- mStats.notePhoneOffLocked();
- }
- }
-
public boolean isOnBattery() {
return mStats.isOnBattery();
}
diff --git a/services/java/com/android/server/status/StatusBarPolicy.java b/services/java/com/android/server/status/StatusBarPolicy.java
index f4ff5df..3a5b13c 100644
--- a/services/java/com/android/server/status/StatusBarPolicy.java
+++ b/services/java/com/android/server/status/StatusBarPolicy.java
@@ -234,7 +234,7 @@ public class StatusBarPolicy {
}
else if (action.equals(AudioManager.RINGER_MODE_CHANGED_ACTION) ||
action.equals(AudioManager.VIBRATE_SETTING_CHANGED_ACTION)) {
- updateVolume();
+ updateVolume(intent);
}
else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) {
updateSimState(intent);
@@ -326,7 +326,6 @@ public class StatusBarPolicy {
null, com.android.internal.R.drawable.stat_sys_ringer_silent, 0, 0);
mVolumeIcon = service.addIcon(mVolumeData, null);
service.setIconVisibility(mVolumeIcon, false);
- updateVolume();
IntentFilter filter = new IntentFilter();
@@ -756,7 +755,9 @@ public class StatusBarPolicy {
}
}
- private final void updateVolume() {
+ private final void updateVolume(Intent intent) {
+ // This can be called from two different received intents, so don't use extras.
+
AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
final int ringerMode = audioManager.getRingerMode();
final boolean visible = ringerMode == AudioManager.RINGER_MODE_SILENT ||
diff --git a/services/java/com/android/server/status/StatusBarService.java b/services/java/com/android/server/status/StatusBarService.java
index 5442e1d..4748389 100644
--- a/services/java/com/android/server/status/StatusBarService.java
+++ b/services/java/com/android/server/status/StatusBarService.java
@@ -176,11 +176,11 @@ public class StatusBarService extends IStatusBar.Stub
WindowManager.LayoutParams mExpandedParams;
ScrollView mScrollView;
View mNotificationLinearLayout;
- TextView mOngoingTitle;
+ View mOngoingTitle;
LinearLayout mOngoingItems;
- TextView mLatestTitle;
+ View mLatestTitle;
LinearLayout mLatestItems;
- TextView mNoNotificationsTitle;
+ View mNoNotificationsTitle;
TextView mSpnLabel;
TextView mPlmnLabel;
TextView mClearButton;
@@ -270,11 +270,11 @@ public class StatusBarService extends IStatusBar.Stub
mExpandedDialog = new ExpandedDialog(context);
mExpandedView = expanded;
- mOngoingTitle = (TextView)expanded.findViewById(R.id.ongoingTitle);
+ mOngoingTitle = expanded.findViewById(R.id.ongoingTitle);
mOngoingItems = (LinearLayout)expanded.findViewById(R.id.ongoingItems);
- mLatestTitle = (TextView)expanded.findViewById(R.id.latestTitle);
+ mLatestTitle = expanded.findViewById(R.id.latestTitle);
mLatestItems = (LinearLayout)expanded.findViewById(R.id.latestItems);
- mNoNotificationsTitle = (TextView)expanded.findViewById(R.id.noNotificationsTitle);
+ mNoNotificationsTitle = expanded.findViewById(R.id.noNotificationsTitle);
mClearButton = (TextView)expanded.findViewById(R.id.clear_all_button);
mClearButton.setOnClickListener(mClearButtonListener);
mSpnLabel = (TextView)expanded.findViewById(R.id.spnLabel);
@@ -1705,9 +1705,6 @@ public class StatusBarService extends IStatusBar.Stub
*/
void updateResources() {
mClearButton.setText(mContext.getText(R.string.status_bar_clear_all_button));
- mOngoingTitle.setText(mContext.getText(R.string.status_bar_ongoing_events_title));
- mLatestTitle.setText(mContext.getText(R.string.status_bar_latest_events_title));
- mNoNotificationsTitle.setText(mContext.getText(R.string.status_bar_no_notifications_title));
Log.d(TAG, "updateResources");
}
diff --git a/telephony/java/android/telephony/gsm/SmsMessage.java b/telephony/java/android/telephony/gsm/SmsMessage.java
index c2e0165..f79b0a0 100644
--- a/telephony/java/android/telephony/gsm/SmsMessage.java
+++ b/telephony/java/android/telephony/gsm/SmsMessage.java
@@ -467,7 +467,7 @@ public class SmsMessage {
* units remaining until the next message. int[3] is the encoding
* type that should be used for the message.
*/
- public static int[] calculateLength(CharSequence messageBody, boolean use7bitOnly) {
+ public static int[] calculateLength(String messageBody, boolean use7bitOnly) {
int ret[] = new int[4];
try {
@@ -502,25 +502,6 @@ public class SmsMessage {
return ret;
}
- /**
- * Calculates the number of SMS's required to encode the message body and
- * the number of characters remaining until the next message, given the
- * current encoding.
- *
- * @param messageBody the message to encode
- * @param use7bitOnly if true, characters that are not part of the GSM
- * alphabet are counted as a single space char. If false, a
- * messageBody containing non-GSM alphabet characters is calculated
- * for 16-bit encoding.
- * @return an int[4] with int[0] being the number of SMS's required, int[1]
- * the number of code units used, and int[2] is the number of code
- * units remaining until the next message. int[3] is the encoding
- * type that should be used for the message.
- */
- public static int[] calculateLength(String messageBody, boolean use7bitOnly) {
- return calculateLength((CharSequence)messageBody, use7bitOnly);
- }
-
/**
* Get an SMS-SUBMIT PDU for a destination address and a message
@@ -560,12 +541,7 @@ public class SmsMessage {
// TP-Data-Coding-Scheme
// Default encoding, uncompressed
- // To test writing messages to the SIM card, change this value 0x00 to 0x12, which
- // means "bits 1 and 0 contain message class, and the class is 2". Note that this
- // takes effect for the sender. In other words, messages sent by the phone with this
- // change will end up on the receiver's SIM card. You can then send messages to
- // yourself (on a phone with this change) and they'll end up on the SIM card.
- bo.write(0x00);
+ bo.write(0x00);
// (no TP-Validity-Period)
diff --git a/telephony/java/com/android/internal/telephony/gsm/DataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/DataConnectionTracker.java
index 4769cd1..1c64641 100644
--- a/telephony/java/com/android/internal/telephony/gsm/DataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/DataConnectionTracker.java
@@ -884,9 +884,6 @@ final class DataConnectionTracker extends Handler
isConnected = (state != State.IDLE && state != State.FAILED);
- // The "current" may no longer be valid. MMS depends on this to send properly.
- phone.updateCurrentCarrierInProvider();
-
// TODO: It'd be nice to only do this if the changed entrie(s)
// match the current operator.
createAllApnList();
diff --git a/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java b/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
index f93c724..4ad65fc 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
@@ -1383,8 +1383,18 @@ public class GSMPhone extends PhoneBase {
break;
case EVENT_SIM_RECORDS_LOADED:
- updateCurrentCarrierInProvider();
-
+ mSIMRecords.getSIMOperatorNumeric();
+
+ try {
+ //set the current field the telephony provider according to
+ //the SIM's operator
+ Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current");
+ ContentValues map = new ContentValues();
+ map.put(Telephony.Carriers.NUMERIC, mSIMRecords.getSIMOperatorNumeric());
+ mContext.getContentResolver().insert(uri, map);
+ } catch (SQLException e) {
+ Log.e(LOG_TAG, "Can't store current operator", e);
+ }
// Check if this is a different SIM than the previous one. If so unset the
// voice mail number.
String imsi = getVmSimImsi();
@@ -1525,27 +1535,7 @@ public class GSMPhone extends PhoneBase {
}
}
}
-
- /**
- * Sets the "current" field in the telephony provider according to the SIM's operator
- *
- * @return true for success; false otherwise.
- */
- boolean updateCurrentCarrierInProvider() {
- if (mSIMRecords != null) {
- try {
- Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current");
- ContentValues map = new ContentValues();
- map.put(Telephony.Carriers.NUMERIC, mSIMRecords.getSIMOperatorNumeric());
- mContext.getContentResolver().insert(uri, map);
- return true;
- } catch (SQLException e) {
- Log.e(LOG_TAG, "Can't store current operator", e);
- }
- }
- return false;
- }
-
+
/**
* Used to track the settings upon completion of the network change.
*/
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmAlphabet.java b/telephony/java/com/android/internal/telephony/gsm/GsmAlphabet.java
index df34897..59a9422 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmAlphabet.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmAlphabet.java
@@ -532,7 +532,7 @@ public class GsmAlphabet
* needed to represent this string. Counts unencodable char as 1 septet.
*/
public static int
- countGsmSeptets(CharSequence s)
+ countGsmSeptets(String s)
{
try {
return countGsmSeptets(s, false);
@@ -549,7 +549,7 @@ public class GsmAlphabet
* char. Otherwise, counts invalid char as 1 septet
*/
public static int
- countGsmSeptets(CharSequence s, boolean throwsException) throws EncodeException
+ countGsmSeptets(String s, boolean throwsException) throws EncodeException
{
int charIndex = 0;
int sz = s.length();
diff --git a/test-runner/android/test/mock/MockContentProvider.java b/test-runner/android/test/mock/MockContentProvider.java
index d04fc44..9c00ecf 100644
--- a/test-runner/android/test/mock/MockContentProvider.java
+++ b/test-runner/android/test/mock/MockContentProvider.java
@@ -19,7 +19,6 @@ package android.test.mock;
import android.content.ContentValues;
import android.content.IContentProvider;
import android.content.ISyncAdapter;
-import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.database.CursorWindow;
import android.database.IBulkCursor;
@@ -83,12 +82,6 @@ public class MockContentProvider implements IContentProvider {
}
@SuppressWarnings("unused")
- public AssetFileDescriptor openAssetFile(Uri uri, String mode)
- throws FileNotFoundException {
- throw new UnsupportedOperationException("unimplemented mock method");
- }
-
- @SuppressWarnings("unused")
public Cursor query(Uri url, String[] projection, String selection, String[] selectionArgs,
String sortOrder) throws RemoteException {
throw new UnsupportedOperationException("unimplemented mock method");
diff --git a/test-runner/android/test/mock/MockPackageManager.java b/test-runner/android/test/mock/MockPackageManager.java
index ea190e2..57e7e41 100644
--- a/test-runner/android/test/mock/MockPackageManager.java
+++ b/test-runner/android/test/mock/MockPackageManager.java
@@ -34,7 +34,6 @@ import android.content.pm.PermissionInfo;
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
-import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.drawable.Drawable;
@@ -57,12 +56,6 @@ public class MockPackageManager extends PackageManager {
}
@Override
- public Intent getLaunchIntentForPackage(String packageName)
- throws NameNotFoundException {
- throw new UnsupportedOperationException();
- }
-
- @Override
public int[] getPackageGids(String packageName) throws NameNotFoundException {
throw new UnsupportedOperationException();
}
diff --git a/tests/AndroidTests/src/com/android/unit_tests/AppCacheTest.java b/tests/AndroidTests/src/com/android/unit_tests/AppCacheTest.java
index 3daa8ab..f9af436 100755
--- a/tests/AndroidTests/src/com/android/unit_tests/AppCacheTest.java
+++ b/tests/AndroidTests/src/com/android/unit_tests/AppCacheTest.java
@@ -121,7 +121,6 @@ public class AppCacheTest extends AndroidTestCase {
}
@LargeTest
public void testFreeApplicationCacheAllFiles() throws Exception {
- boolean TRACKING = true;
StatFs st = new StatFs("/data");
long blks1 = getFreeStorageBlks(st);
long availableMem = getFreeStorageSize(st);
@@ -129,11 +128,11 @@ public class AppCacheTest extends AndroidTestCase {
assertNotNull(cacheDir);
createTestFiles1(cacheDir, "testtmpdir", 5);
long blks2 = getFreeStorageBlks(st);
- if(localLOGV || TRACKING) Log.i(TAG, "blk1="+blks1+", blks2="+blks2);
+ if(localLOGV) Log.i(TAG, "blk1="+blks1+", blks2="+blks2);
//this should free up the test files that were created earlier
invokePMFreeApplicationCache(availableMem);
long blks3 = getFreeStorageBlks(st);
- if(localLOGV || TRACKING) Log.i(TAG, "blks3="+blks3);
+ if(localLOGV) Log.i(TAG, "blks3="+blks3);
verifyTestFiles1(cacheDir, "testtmpdir", 5);
}
@@ -630,16 +629,15 @@ public class AppCacheTest extends AndroidTestCase {
@SmallTest
public void testFreeStorage() throws Exception {
- boolean TRACKING = true;
StatFs st = new StatFs("/data");
long blks1 = getFreeStorageBlks(st);
- if(localLOGV || TRACKING) Log.i(TAG, "Available free blocks="+blks1);
+ if(localLOGV) Log.i(TAG, "Available free blocks="+blks1);
long availableMem = getFreeStorageSize(st);
File cacheDir = mContext.getCacheDir();
assertNotNull(cacheDir);
createTestFiles1(cacheDir, "testtmpdir", 5);
long blks2 = getFreeStorageBlks(st);
- if(localLOGV || TRACKING) Log.i(TAG, "Available blocks after writing test files in application cache="+blks2);
+ if(localLOGV) Log.i(TAG, "Available blocks after writing test files in application cache="+blks2);
// Create receiver and register it
FreeStorageReceiver receiver = new FreeStorageReceiver();
mContext.registerReceiver(receiver, new IntentFilter(FreeStorageReceiver.ACTION_FREE));
@@ -648,7 +646,7 @@ public class AppCacheTest extends AndroidTestCase {
// Invoke PackageManager api
invokePMFreeStorage(availableMem, receiver, pi);
long blks3 = getFreeStorageBlks(st);
- if(localLOGV || TRACKING) Log.i(TAG, "Available blocks after freeing cache"+blks3);
+ if(localLOGV) Log.i(TAG, "Available blocks after freeing cache"+blks3);
assertEquals(receiver.getResultCode(), 1);
mContext.unregisterReceiver(receiver);
// Verify result
diff --git a/tests/AndroidTests/src/com/android/unit_tests/DbSSLSessionCacheTest.java b/tests/AndroidTests/src/com/android/unit_tests/DbSSLSessionCacheTest.java
deleted file mode 100644
index 77460be..0000000
--- a/tests/AndroidTests/src/com/android/unit_tests/DbSSLSessionCacheTest.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.unit_tests;
-
-import android.content.ContentResolver;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteOpenHelper;
-import android.provider.Settings;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.Suppress;
-
-import com.google.android.net.GoogleHttpClient;
-
-import com.android.internal.net.DbSSLSessionCache;
-import com.android.internal.net.SSLSessionCache;
-import com.android.internal.net.DbSSLSessionCache.DatabaseHelper;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-
-import java.io.IOException;
-import java.security.Principal;
-import java.security.cert.Certificate;
-
-import javax.net.ssl.SSLPeerUnverifiedException;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.SSLSessionContext;
-import javax.security.cert.X509Certificate;
-
-/** Unit test for SSL session caching with {@link GoogleHttpClient}.
- * Uses network resources.
- */
-@Suppress
-public class DbSSLSessionCacheTest extends AndroidTestCase {
-
- protected void setUp() throws Exception {
- }
-
- protected void tearDown() throws Exception {
- }
-
- @LargeTest
- public void testSslCacheSettings() throws Exception {
- ContentResolver resolver = getContext().getContentResolver();
- Settings.Gservices.putString(resolver, Settings.Gservices.SSL_SESSION_CACHE,
- "0");
- assertFalse(SSLSessionCache.isEnabled(getContext().getContentResolver()));
-
- resolver = getContext().getContentResolver();
- Settings.Gservices.putString(resolver, Settings.Gservices.SSL_SESSION_CACHE,
- "db");
- assertTrue(SSLSessionCache.isEnabled(getContext().getContentResolver()));
- }
-
- /**
- * We want to test the actual database write - the actual hooking into
- * low-level SSL is tested.
- */
- @LargeTest
- public void testSslCacheAdd() throws Exception {
- // Let's verify the database has the rows.
- // Use internal details of the implementation - could make the field
- // visible for testing, but it's same.
-
- // Use default database
- DbSSLSessionCache cache = new DbSSLSessionCache(getContext());
- cache.clear();
-
-
- makeRequestInNewContext("https://www.google.com");
-
- // Verify the key was inserted
- SQLiteOpenHelper helper = new DatabaseHelper(getContext());
- Cursor query = null;
- try {
- query = helper.getReadableDatabase().query(DbSSLSessionCache.SSL_CACHE_TABLE,
- new String[] {"hostport"}, null,
- null, null, null, null);
-
- assertTrue(query.moveToFirst()); // one row inserted
- String hostPort = query.getString(0);
- assertEquals(hostPort, "www.google.com:443");
- } finally {
- query.close();
- }
- }
-
- @LargeTest
- public void testExpire() throws Exception {
- DatabaseHelper helper = new DatabaseHelper(getContext());
- // clean up
- DbSSLSessionCache cache = new DbSSLSessionCache(helper);
- cache.clear();
-
- long t0 = System.currentTimeMillis();
- for (int i = 0; i < DbSSLSessionCache.MAX_CACHE_SIZE + 2; i++) {
- final int port = i;
- cache.putSessionData(new MockSession() {
-
- public String getPeerHost() {
- return "test.host.com";
- }
-
- public int getPeerPort() {
- return port;
- }
- }, new byte[256]);
- }
- long t1 = System.currentTimeMillis();
-
- System.err.println("Time to insert " +
- (DbSSLSessionCache.MAX_CACHE_SIZE + 2) + " " + (t1 - t0));
-
- // first entry should have port 1.
- Cursor query = helper.getReadableDatabase().query(DbSSLSessionCache.SSL_CACHE_TABLE,
- new String[] {"hostport", "session"}, null,
- null, null, null, null);
-
- int cnt = query.getCount();
-
- assertTrue(query.moveToFirst()); // one row inserted
- String hostPort = query.getString(0);
- assertEquals("test.host.com:2", hostPort);
- while (query.moveToNext()) {
- hostPort = query.getString(0);
- String session = query.getString(1);
- }
- long t2 = System.currentTimeMillis();
- System.err.println("Time to load " + cnt + " " + (t2 - t1));
-
- query.close();
- }
-
- private void makeRequestInNewContext(String url) throws IOException {
- GoogleHttpClient client = new GoogleHttpClient(getContext(), "Test",
- false /* no gzip */);
-
- try {
- // Note: we must test against a real server, because the connection
- // gets established before the interceptor can crash the request.
- HttpGet method = new HttpGet(url);
- HttpResponse response = client.execute(method);
- } finally {
- client.close();
- }
- }
-
- private static class MockSession implements SSLSession {
-
- public String getPeerHost() {
- throw new UnsupportedOperationException();
- }
-
-
- public int getPeerPort() {
- throw new UnsupportedOperationException();
- }
-
-
-
- public int getApplicationBufferSize() {
- throw new UnsupportedOperationException();
- }
-
-
- public String getCipherSuite() {
- throw new UnsupportedOperationException();
- }
-
-
- public long getCreationTime() {
- throw new UnsupportedOperationException();
- }
-
-
- public byte[] getId() {
- throw new UnsupportedOperationException();
- }
-
-
- public long getLastAccessedTime() {
- throw new UnsupportedOperationException();
- }
-
-
- public Certificate[] getLocalCertificates() {
- throw new UnsupportedOperationException();
- }
-
-
- public Principal getLocalPrincipal() {
- throw new UnsupportedOperationException();
- }
-
-
- public int getPacketBufferSize() {
- throw new UnsupportedOperationException();
- }
-
-
- public X509Certificate[] getPeerCertificateChain()
- throws SSLPeerUnverifiedException {
- throw new UnsupportedOperationException();
- }
-
-
- public Certificate[] getPeerCertificates() throws SSLPeerUnverifiedException {
- throw new UnsupportedOperationException();
- }
-
-
- public Principal getPeerPrincipal() throws SSLPeerUnverifiedException {
- throw new UnsupportedOperationException();
- }
-
-
- public String getProtocol() {
- throw new UnsupportedOperationException();
- }
-
-
- public SSLSessionContext getSessionContext() {
- throw new UnsupportedOperationException();
- }
-
-
- public Object getValue(String name) {
- throw new UnsupportedOperationException();
- }
-
-
- public String[] getValueNames() {
- throw new UnsupportedOperationException();
- }
-
-
- public void invalidate() {
- throw new UnsupportedOperationException();
- }
-
-
- public boolean isValid() {
- throw new UnsupportedOperationException();
- }
-
-
- public void putValue(String name, Object value) {
- throw new UnsupportedOperationException();
- }
-
-
- public void removeValue(String name) {
- throw new UnsupportedOperationException();
- }
- }
-
-
-}
diff --git a/tests/CoreTests/android/core/DatabaseSessionCache.java b/tests/CoreTests/android/core/DatabaseSessionCache.java
deleted file mode 100644
index c344d9c..0000000
--- a/tests/CoreTests/android/core/DatabaseSessionCache.java
+++ /dev/null
@@ -1,312 +0,0 @@
-// Copyright 2009 The Android Open Source Project
-
-package android.core;
-
-import android.database.Cursor;
-import android.database.SQLException;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteOpenHelper;
-import android.util.Log;
-import android.content.ContentValues;
-import android.content.Context;
-
-import org.apache.commons.codec.binary.Base64;
-import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import javax.net.ssl.SSLSession;
-
-/**
- * Hook into harmony SSL cache to persist the SSL sessions.
- *
- * Current implementation is suitable for saving a small number of hosts -
- * like google services. It can be extended with expiration and more features
- * to support more hosts.
- *
- * {@hide}
- */
-public class DatabaseSessionCache implements SSLClientSessionCache {
- private static final String TAG = "SslSessionCache";
- static DatabaseHelper sDefaultDatabaseHelper;
-
- private DatabaseHelper mDatabaseHelper;
-
- /**
- * Table where sessions are stored.
- */
- public static final String SSL_CACHE_TABLE = "ssl_sessions";
-
- private static final String SSL_CACHE_ID = "_id";
-
- /**
- * Key is host:port - port is not optional.
- */
- private static final String SSL_CACHE_HOSTPORT = "hostport";
-
- /**
- * Base64-encoded DER value of the session.
- */
- private static final String SSL_CACHE_SESSION = "session";
-
- /**
- * Time when the record was added - should be close to the time
- * of the initial session negotiation.
- */
- private static final String SSL_CACHE_TIME_SEC = "time_sec";
-
- public static final String DATABASE_NAME = "ssl_sessions.db";
-
- public static final int DATABASE_VERSION = 1;
-
- /** public for testing
- */
- public static final int SSL_CACHE_ID_COL = 0;
- public static final int SSL_CACHE_HOSTPORT_COL = 1;
- public static final int SSL_CACHE_SESSION_COL = 2;
- public static final int SSL_CACHE_TIME_SEC_COL = 3;
-
- private static final String SAVE_ON_ADD = "save_on_add";
-
- static boolean sHookInitializationDone = false;
-
- public static final int MAX_CACHE_SIZE = 256;
-
- private static final Map<String, byte[]> mExternalCache =
- new LinkedHashMap<String, byte[]>(MAX_CACHE_SIZE, 0.75f, true) {
- @Override
- public boolean removeEldestEntry(
- Map.Entry<String, byte[]> eldest) {
- boolean shouldDelete = this.size() > MAX_CACHE_SIZE;
-
- // TODO: delete from DB
- return shouldDelete;
- }
- };
- static boolean mNeedsCacheLoad = true;
-
- public static final String[] PROJECTION = new String[] {
- SSL_CACHE_ID,
- SSL_CACHE_HOSTPORT,
- SSL_CACHE_SESSION,
- SSL_CACHE_TIME_SEC
- };
-
- /**
- * This class needs to be installed as a hook, if the security property
- * is set. Getting the right classloader may be fun since we don't use
- * Provider to get its classloader, but in android this is in same
- * loader with AndroidHttpClient.
- *
- * This constructor will use the default database. You must
- * call init() before to specify the context used for the database and
- * check settings.
- */
- public DatabaseSessionCache() {
- Log.v(TAG, "Instance created.");
- // May be null if caching is disabled - no sessions will be persisted.
- this.mDatabaseHelper = sDefaultDatabaseHelper;
- }
-
- /**
- * Create a SslSessionCache instance, using the specified context to
- * initialize the database.
- *
- * This constructor will use the default database - created the first
- * time.
- *
- * @param activityContext
- */
- public DatabaseSessionCache(Context activityContext) {
- // Static init - only one initialization will happen.
- // Each SslSessionCache is using the same DB.
- init(activityContext);
- // May be null if caching is disabled - no sessions will be persisted.
- this.mDatabaseHelper = sDefaultDatabaseHelper;
- }
-
- /**
- * Create a SslSessionCache that uses a specific database.
- *
- * @param database
- */
- public DatabaseSessionCache(DatabaseHelper database) {
- this.mDatabaseHelper = database;
- }
-
-// public static boolean enabled(Context androidContext) {
-// String sslCache = Settings.Gservices.getString(androidContext.getContentResolver(),
-// Settings.Gservices.SSL_SESSION_CACHE);
-//
-// if (Log.isLoggable(TAG, Log.DEBUG)) {
-// Log.d(TAG, "enabled " + sslCache + " " + androidContext.getPackageName());
-// }
-//
-// return SAVE_ON_ADD.equals(sslCache);
-// }
-
- /**
- * You must call this method to enable SSL session caching for an app.
- */
- public synchronized static void init(Context activityContext) {
- // It is possible that multiple provider will try to install this hook.
- // We want a single db per VM.
- if (sHookInitializationDone) {
- return;
- }
-
-
-// // More values can be added in future to provide different
-// // behaviours, like 'batch save'.
-// if (enabled(activityContext)) {
- Context appContext = activityContext.getApplicationContext();
- sDefaultDatabaseHelper = new DatabaseHelper(appContext);
-
- // Set default SSLSocketFactory
- // The property is defined in the javadocs for javax.net.SSLSocketFactory
- // (no constant defined there)
- // This should cover all code using SSLSocketFactory.getDefault(),
- // including native http client and apache httpclient.
- // MCS is using its own custom factory - will need special code.
-// Security.setProperty("ssl.SocketFactory.provider",
-// SslSocketFactoryWithCache.class.getName());
-// }
-
- // Won't try again.
- sHookInitializationDone = true;
- }
-
- public void putSessionData(SSLSession session, byte[] der) {
- if (mDatabaseHelper == null) {
- return;
- }
- if (mExternalCache.size() > MAX_CACHE_SIZE) {
- // remove oldest.
- Cursor byTime = mDatabaseHelper.getWritableDatabase().query(SSL_CACHE_TABLE,
- PROJECTION, null, null, null, null, SSL_CACHE_TIME_SEC);
- byTime.moveToFirst();
- // TODO: can I do byTime.deleteRow() ?
- String hostPort = byTime.getString(SSL_CACHE_HOSTPORT_COL);
-
- mDatabaseHelper.getWritableDatabase().delete(SSL_CACHE_TABLE,
- SSL_CACHE_HOSTPORT + "= ?" , new String[] { hostPort });
- }
- // Serialize native session to standard DER encoding
- long t0 = System.currentTimeMillis();
-
- String b64 = new String(Base64.encodeBase64(der));
- String key = session.getPeerHost() + ":" + session.getPeerPort();
-
- ContentValues values = new ContentValues();
- values.put(SSL_CACHE_HOSTPORT, key);
- values.put(SSL_CACHE_SESSION, b64);
- values.put(SSL_CACHE_TIME_SEC, System.currentTimeMillis() / 1000);
-
- synchronized (this.getClass()) {
- mExternalCache.put(key, der);
-
- try {
- mDatabaseHelper.getWritableDatabase().insert(SSL_CACHE_TABLE, null /*nullColumnHack */ , values);
- } catch(SQLException ex) {
- // Ignore - nothing we can do to recover, and caller shouldn't
- // be affected.
- Log.w(TAG, "Ignoring SQL exception when caching session", ex);
- }
- }
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- long t1 = System.currentTimeMillis();
- Log.d(TAG, "New SSL session " + session.getPeerHost() +
- " DER len: " + der.length + " " + (t1 - t0));
- }
-
- }
-
- public byte[] getSessionData(String host, int port) {
- // Current (simple) implementation does a single lookup to DB, then saves
- // all entries to the cache.
-
- // This works for google services - i.e. small number of certs.
- // If we extend this to all processes - we should hold a separate cache
- // or do lookups to DB each time.
- if (mDatabaseHelper == null) {
- return null;
- }
- synchronized(this.getClass()) {
- if (mNeedsCacheLoad) {
- // Don't try to load again, if something is wrong on the first
- // request it'll likely be wrong each time.
- mNeedsCacheLoad = false;
- long t0 = System.currentTimeMillis();
-
- Cursor cur = null;
- try {
- cur = mDatabaseHelper.getReadableDatabase().query(SSL_CACHE_TABLE, PROJECTION, null,
- null, null, null, null);
- if (cur.moveToFirst()) {
- do {
- String hostPort = cur.getString(SSL_CACHE_HOSTPORT_COL);
- String value = cur.getString(SSL_CACHE_SESSION_COL);
-
- if (hostPort == null || value == null) {
- continue;
- }
- // TODO: blob support ?
- byte[] der = Base64.decodeBase64(value.getBytes());
- mExternalCache.put(hostPort, der);
- } while (cur.moveToNext());
-
- }
- } catch (SQLException ex) {
- Log.d(TAG, "Error loading SSL cached entries ", ex);
- } finally {
- if (cur != null) {
- cur.close();
- }
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- long t1 = System.currentTimeMillis();
- Log.d(TAG, "LOADED CACHED SSL " + (t1 - t0) + " ms");
- }
- }
- }
-
- String key = host + ":" + port;
-
- return mExternalCache.get(key);
- }
- }
-
- public byte[] getSessionData(byte[] id) {
- // We support client side only - the cache will do nothing on client.
- return null;
- }
-
- /** Visible for testing.
- */
- public static class DatabaseHelper extends SQLiteOpenHelper {
-
- public DatabaseHelper(Context context) {
- super(context, DATABASE_NAME, null /* factory */, DATABASE_VERSION);
- }
-
- @Override
- public void onCreate(SQLiteDatabase db) {
- db.execSQL("CREATE TABLE " + SSL_CACHE_TABLE + " (" +
- SSL_CACHE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
- SSL_CACHE_HOSTPORT + " TEXT UNIQUE ON CONFLICT REPLACE," +
- SSL_CACHE_SESSION + " TEXT," +
- SSL_CACHE_TIME_SEC + " INTEGER" +
- ");");
- db.execSQL("CREATE INDEX ssl_sessions_idx1 ON ssl_sessions (" +
- SSL_CACHE_HOSTPORT + ");");
- }
-
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- db.execSQL("DROP TABLE IF EXISTS " + SSL_CACHE_TABLE );
- onCreate(db);
- }
-
- }
-
-} \ No newline at end of file
diff --git a/tests/CoreTests/android/core/SSLPerformanceTest.java b/tests/CoreTests/android/core/SSLPerformanceTest.java
deleted file mode 100644
index e2bd9c5..0000000
--- a/tests/CoreTests/android/core/SSLPerformanceTest.java
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.core;
-
-import android.test.AndroidTestCase;
-import android.os.Debug;
-import org.apache.harmony.xnet.provider.jsse.FileClientSessionCache;
-import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
-import org.apache.harmony.xnet.provider.jsse.SSLContextImpl;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.ClientConnectionManager;
-import org.apache.http.conn.ssl.SSLSocketFactory;
-import org.apache.http.impl.conn.SingleClientConnManager;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.ResponseHandler;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.HttpResponse;
-
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.SSLSessionContext;
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-import java.security.cert.Certificate;
-import java.security.Principal;
-import java.security.KeyManagementException;
-import java.util.Arrays;
-
-public class SSLPerformanceTest extends AndroidTestCase {
-
- static final byte[] SESSION_DATA = new byte[6000];
- static {
- for (int i = 0; i < SESSION_DATA.length; i++) {
- SESSION_DATA[i] = (byte) i;
- }
- }
-
- static final File dataDir = new File("/data/data/android.core/");
- static final File filesDir = new File(dataDir, "files");
- static final File dbDir = new File(dataDir, "databases");
-
- static final String CACHE_DIR
- = SSLPerformanceTest.class.getName() + "/cache";
-
- static final int ITERATIONS = 10;
-
- public void testCreateNewEmptyDatabase() {
- deleteDatabase();
-
- Stopwatch stopwatch = new Stopwatch();
-
- DatabaseSessionCache cache = new DatabaseSessionCache(getContext());
- cache.getSessionData("crazybob.org", 443);
-
- stopwatch.stop();
- }
-
- public void testCreateNewEmptyDirectory() throws IOException {
- deleteDirectory();
-
- Stopwatch stopwatch = new Stopwatch();
-
- SSLClientSessionCache cache = FileClientSessionCache.usingDirectory(
- getCacheDirectory());
- cache.getSessionData("crazybob.org", 443);
-
- stopwatch.stop();
- }
-
- public void testOpenDatabaseWith10Sessions() {
- deleteDatabase();
-
- DatabaseSessionCache cache = new DatabaseSessionCache(getContext());
- putSessionsIn(cache);
- closeDatabase();
-
- System.err.println("Size of ssl_sessions.db w/ 10 sessions: "
- + new File(dbDir, "ssl_sessions.db").length());
-
- Stopwatch stopwatch = new Stopwatch();
-
- cache = new DatabaseSessionCache(getContext());
- cache.getSessionData("crazybob.org", 443);
-
- stopwatch.stop();
- }
-
- public void testOpenDirectoryWith10Sessions() throws IOException {
- deleteDirectory();
-
- SSLClientSessionCache cache = FileClientSessionCache.usingDirectory(
- getCacheDirectory());
- putSessionsIn(cache);
- closeDirectoryCache();
-
- Stopwatch stopwatch = new Stopwatch();
-
- cache = FileClientSessionCache.usingDirectory(
- getCacheDirectory());
- cache.getSessionData("crazybob.org", 443);
-
- stopwatch.stop();
- }
-
- public void testGetSessionFromDatabase() {
- deleteDatabase();
-
- DatabaseSessionCache cache = new DatabaseSessionCache(getContext());
- cache.putSessionData(new FakeSession("foo"), SESSION_DATA);
- closeDatabase();
-
- cache = new DatabaseSessionCache(getContext());
- cache.getSessionData("crazybob.org", 443);
-
- Stopwatch stopwatch = new Stopwatch();
-
- byte[] sessionData = cache.getSessionData("foo", 443);
-
- stopwatch.stop();
-
- assertTrue(Arrays.equals(SESSION_DATA, sessionData));
- }
-
- public void testGetSessionFromDirectory() throws IOException {
- deleteDirectory();
-
- SSLClientSessionCache cache = FileClientSessionCache.usingDirectory(
- getCacheDirectory());
- cache.putSessionData(new FakeSession("foo"), SESSION_DATA);
- closeDirectoryCache();
-
- cache = FileClientSessionCache.usingDirectory(
- getCacheDirectory());
- cache.getSessionData("crazybob.org", 443);
-
- Stopwatch stopwatch = new Stopwatch();
-
- byte[] sessionData = cache.getSessionData("foo", 443);
-
- stopwatch.stop();
-
- assertTrue(Arrays.equals(SESSION_DATA, sessionData));
- }
-
- public void testPutSessionIntoDatabase() {
- deleteDatabase();
-
- DatabaseSessionCache cache = new DatabaseSessionCache(getContext());
- cache.getSessionData("crazybob.org", 443);
-
- Stopwatch stopwatch = new Stopwatch();
-
- cache.putSessionData(new FakeSession("foo"), SESSION_DATA);
-
- stopwatch.stop();
- }
-
- public void testPutSessionIntoDirectory() throws IOException {
- deleteDirectory();
-
- SSLClientSessionCache cache = FileClientSessionCache.usingDirectory(
- getCacheDirectory());
- cache.getSessionData("crazybob.org", 443);
-
- Stopwatch stopwatch = new Stopwatch();
-
- cache.putSessionData(new FakeSession("foo"), SESSION_DATA);
-
- stopwatch.stop();
- }
-
- public void testEngineInit() throws IOException, KeyManagementException {
- Stopwatch stopwatch = new Stopwatch();
-
- new SSLContextImpl().engineInit(null, null, null);
-
- stopwatch.stop();
- }
-
- public void testWebRequestWithoutCache() throws IOException,
- KeyManagementException {
- SSLContextImpl sslContext = new SSLContextImpl();
- sslContext.engineInit(null, null, null);
-
- Stopwatch stopwatch = new Stopwatch();
-
- getVerisignDotCom(sslContext);
-
- stopwatch.stop();
- }
-
- public void testWebRequestWithFileCache() throws IOException,
- KeyManagementException {
- deleteDirectory();
-
- SSLContextImpl sslContext = new SSLContextImpl();
- sslContext.engineInit(null, null, null,
- FileClientSessionCache.usingDirectory(getCacheDirectory()),
- null);
-
- // Make sure www.google.com is in the cache.
- getVerisignDotCom(sslContext);
-
- // Re-initialize so we hit the file cache.
- sslContext.engineInit(null, null, null,
- FileClientSessionCache.usingDirectory(getCacheDirectory()),
- null);
-
- Stopwatch stopwatch = new Stopwatch();
-
- getVerisignDotCom(sslContext);
-
- stopwatch.stop();
- }
-
- public void testWebRequestWithInMemoryCache() throws IOException,
- KeyManagementException {
- deleteDirectory();
-
- SSLContextImpl sslContext = new SSLContextImpl();
- sslContext.engineInit(null, null, null);
-
- // Make sure www.google.com is in the cache.
- getVerisignDotCom(sslContext);
-
- Stopwatch stopwatch = new Stopwatch();
-
- getVerisignDotCom(sslContext);
-
- stopwatch.stop();
- }
-
- private void getVerisignDotCom(SSLContextImpl sslContext)
- throws IOException {
- SchemeRegistry schemeRegistry = new SchemeRegistry();
- schemeRegistry.register(new Scheme("https",
- new SSLSocketFactory(sslContext.engineGetSocketFactory()),
- 443));
-
- ClientConnectionManager manager =
- new SingleClientConnManager(null, schemeRegistry);
-
- new DefaultHttpClient(manager, null).execute(
- new HttpGet("https://www.verisign.com"),
- new ResponseHandler<Object>() {
- public Object handleResponse(HttpResponse response)
- throws ClientProtocolException, IOException {
- return null;
- }
- });
- }
-
- private void putSessionsIn(SSLClientSessionCache cache) {
- for (int i = 0; i < 10; i++) {
- cache.putSessionData(new FakeSession("host" + i), SESSION_DATA);
- }
- }
-
- private void deleteDatabase() {
- closeDatabase();
- if (!new File(dbDir, "ssl_sessions.db").delete()) {
- System.err.println("Failed to delete database.");
- }
- }
-
- private void closeDatabase() {
- if (DatabaseSessionCache.sDefaultDatabaseHelper != null) {
- DatabaseSessionCache.sDefaultDatabaseHelper.close();
- }
- DatabaseSessionCache.sDefaultDatabaseHelper = null;
- DatabaseSessionCache.sHookInitializationDone = false;
- DatabaseSessionCache.mNeedsCacheLoad = true;
- }
-
- private void deleteDirectory() {
- closeDirectoryCache();
-
- File dir = getCacheDirectory();
- if (!dir.exists()) {
- return;
- }
- for (File file : dir.listFiles()) {
- file.delete();
- }
- if (!dir.delete()) {
- System.err.println("Failed to delete directory.");
- }
- }
-
- private void closeDirectoryCache() {
- try {
- Method reset = FileClientSessionCache.class
- .getDeclaredMethod("reset");
- reset.setAccessible(true);
- reset.invoke(null);
- } catch (NoSuchMethodException e) {
- throw new RuntimeException(e);
- } catch (IllegalAccessException e) {
- throw new RuntimeException(e);
- } catch (InvocationTargetException e) {
- throw new RuntimeException(e);
- }
- }
-
- private File getCacheDirectory() {
- return new File(getContext().getFilesDir(), CACHE_DIR);
- }
-
- class Stopwatch {
- {
- Debug.startAllocCounting();
- }
- long start = System.nanoTime();
-
- void stop() {
- long elapsed = (System.nanoTime() - start) / 1000;
- Debug.stopAllocCounting();
- System.err.println(getName() + ": " + elapsed + "us, "
- + Debug.getThreadAllocCount() + " allocations, "
- + Debug.getThreadAllocSize() + " bytes");
- }
- }
-}
-
-class FakeSession implements SSLSession {
- final String host;
-
- FakeSession(String host) {
- this.host = host;
- }
-
- public int getApplicationBufferSize() {
- throw new UnsupportedOperationException();
- }
-
- public String getCipherSuite() {
- throw new UnsupportedOperationException();
- }
-
- public long getCreationTime() {
- throw new UnsupportedOperationException();
- }
-
- public byte[] getId() {
- return host.getBytes();
- }
-
- public long getLastAccessedTime() {
- throw new UnsupportedOperationException();
- }
-
- public Certificate[] getLocalCertificates() {
- throw new UnsupportedOperationException();
- }
-
- public Principal getLocalPrincipal() {
- throw new UnsupportedOperationException();
- }
-
- public int getPacketBufferSize() {
- throw new UnsupportedOperationException();
- }
-
- public javax.security.cert.X509Certificate[] getPeerCertificateChain() {
- throw new UnsupportedOperationException();
- }
-
- public Certificate[] getPeerCertificates() {
- throw new UnsupportedOperationException();
- }
-
- public String getPeerHost() {
- return host;
- }
-
- public int getPeerPort() {
- return 443;
- }
-
- public Principal getPeerPrincipal() {
- throw new UnsupportedOperationException();
- }
-
- public String getProtocol() {
- throw new UnsupportedOperationException();
- }
-
- public SSLSessionContext getSessionContext() {
- throw new UnsupportedOperationException();
- }
-
- public Object getValue(String name) {
- throw new UnsupportedOperationException();
- }
-
- public String[] getValueNames() {
- throw new UnsupportedOperationException();
- }
-
- public void invalidate() {
- throw new UnsupportedOperationException();
- }
-
- public boolean isValid() {
- throw new UnsupportedOperationException();
- }
-
- public void putValue(String name, Object value) {
- throw new UnsupportedOperationException();
- }
-
- public void removeValue(String name) {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/tests/CoreTests/android/core/SSLSocketTest.java b/tests/CoreTests/android/core/SSLSocketTest.java
index 088fa8c..922090a 100644
--- a/tests/CoreTests/android/core/SSLSocketTest.java
+++ b/tests/CoreTests/android/core/SSLSocketTest.java
@@ -19,13 +19,9 @@ package android.core;
import junit.framework.TestCase;
import org.apache.commons.codec.binary.Base64;
-import org.apache.harmony.xnet.provider.jsse.SSLContextImpl;
-import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
-import org.apache.harmony.xnet.provider.jsse.FileClientSessionCache;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
-import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -33,28 +29,18 @@ import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.security.KeyStore;
-import java.security.KeyManagementException;
import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
import java.util.Random;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocket;
-import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
-/**
- * SSL integration tests that hit real servers.
- */
public class SSLSocketTest extends TestCase {
private static SSLSocketFactory clientFactory =
@@ -75,15 +61,13 @@ public class SSLSocketTest extends TestCase {
* @param delay The delay after each request (in seconds).
* @throws IOException When a problem occurs.
*/
- private void fetch(SSLSocketFactory socketFactory, String host, int port,
- boolean secure, String path, int outerLoop, int innerLoop,
- int delay, int timeout) throws IOException {
+ private void fetch(String host, int port, boolean secure, String path,
+ int outerLoop, int innerLoop, int delay, int timeout) throws IOException {
InetSocketAddress address = new InetSocketAddress(host, port);
for (int i = 0; i < outerLoop; i++) {
// Connect to the remote host
- Socket socket = secure ? socketFactory.createSocket()
- : new Socket();
+ Socket socket = secure ? clientFactory.createSocket() : new Socket();
if (timeout >= 0) {
socket.setKeepAlive(true);
socket.setSoTimeout(timeout * 1000);
@@ -175,16 +159,6 @@ public class SSLSocketTest extends TestCase {
}
/**
- * Invokes fetch() with the default socket factory.
- */
- private void fetch(String host, int port, boolean secure, String path,
- int outerLoop, int innerLoop,
- int delay, int timeout) throws IOException {
- fetch(clientFactory, host, port, secure, path, outerLoop, innerLoop,
- delay, timeout);
- }
-
- /**
* Does a single request for each of the hosts. Consumes the response.
*
* @throws IOException If a problem occurs.
@@ -645,17 +619,13 @@ public class SSLSocketTest extends TestCase {
public void run() {
try {
- KeyManager[] keyManagers = provideKeys
- ? getKeyManagers(SERVER_KEYS_BKS) : null;
- TrustManager[] trustManagers = new TrustManager[] {
- trustManager };
+ KeyManager[] keyManagers = provideKeys ? getKeyManagers(SERVER_KEYS_BKS) : null;
+ TrustManager[] trustManagers = new TrustManager[] { trustManager };
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagers, trustManagers, null);
- SSLServerSocket serverSocket
- = (SSLServerSocket) sslContext.getServerSocketFactory()
- .createServerSocket();
+ SSLServerSocket serverSocket = (SSLServerSocket)sslContext.getServerSocketFactory().createServerSocket();
if (clientAuth == CLIENT_AUTH_WANTED) {
serverSocket.setWantClientAuth(true);
@@ -667,15 +637,14 @@ public class SSLSocketTest extends TestCase {
serverSocket.bind(new InetSocketAddress(port));
- SSLSocket clientSocket = (SSLSocket) serverSocket.accept();
+ SSLSocket clientSocket = (SSLSocket)serverSocket.accept();
InputStream stream = clientSocket.getInputStream();
for (int i = 0; i < 256; i++) {
int j = stream.read();
if (i != j) {
- throw new RuntimeException("Error reading socket,"
- + " expected " + i + ", got " + j);
+ throw new RuntimeException("Error reading socket, expected " + i + ", got " + j);
}
}
@@ -721,16 +690,13 @@ public class SSLSocketTest extends TestCase {
public void run() {
try {
- KeyManager[] keyManagers = provideKeys
- ? getKeyManagers(CLIENT_KEYS_BKS) : null;
- TrustManager[] trustManagers = new TrustManager[] {
- trustManager };
+ KeyManager[] keyManagers = provideKeys ? getKeyManagers(CLIENT_KEYS_BKS) : null;
+ TrustManager[] trustManagers = new TrustManager[] { trustManager };
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagers, trustManagers, null);
- SSLSocket socket = (SSLSocket) sslContext.getSocketFactory()
- .createSocket();
+ SSLSocket socket = (SSLSocket)sslContext.getSocketFactory().createSocket();
socket.connect(new InetSocketAddress(port));
socket.startHandshake();
@@ -901,189 +867,6 @@ public class SSLSocketTest extends TestCase {
fail("SSL handshake should have failed.");
}
}
-
- /**
- * Tests our in-memory and persistent caching support.
- */
- public void testClientSessionCaching() throws IOException,
- KeyManagementException {
- SSLContextImpl context = new SSLContextImpl();
-
- // Cache size = 2.
- FakeClientSessionCache fakeCache = new FakeClientSessionCache();
- context.engineInit(null, null, null, fakeCache, null);
- SSLSocketFactory socketFactory = context.engineGetSocketFactory();
- context.engineGetClientSessionContext().setSessionCacheSize(2);
- makeRequests(socketFactory);
- List<String> smallCacheOps = Arrays.asList(
- "get www.fortify.net",
- "put www.fortify.net",
- "get www.paypal.com",
- "put www.paypal.com",
- "get www.yellownet.ch",
- "put www.yellownet.ch",
-
- // At this point, all in-memory cache requests should miss,
- // but the sessions will still be in the persistent cache.
- "get www.fortify.net",
- "get www.paypal.com",
- "get www.yellownet.ch"
- );
- assertEquals(smallCacheOps, fakeCache.ops);
-
- // Cache size = 3.
- fakeCache = new FakeClientSessionCache();
- context.engineInit(null, null, null, fakeCache, null);
- socketFactory = context.engineGetSocketFactory();
- context.engineGetClientSessionContext().setSessionCacheSize(3);
- makeRequests(socketFactory);
- List<String> bigCacheOps = Arrays.asList(
- "get www.fortify.net",
- "put www.fortify.net",
- "get www.paypal.com",
- "put www.paypal.com",
- "get www.yellownet.ch",
- "put www.yellownet.ch"
-
- // At this point, all results should be in the in-memory
- // cache, and the persistent cache shouldn't be hit anymore.
- );
- assertEquals(bigCacheOps, fakeCache.ops);
-
- // Cache size = 4.
- fakeCache = new FakeClientSessionCache();
- context.engineInit(null, null, null, fakeCache, null);
- socketFactory = context.engineGetSocketFactory();
- context.engineGetClientSessionContext().setSessionCacheSize(4);
- makeRequests(socketFactory);
- assertEquals(bigCacheOps, fakeCache.ops);
- }
-
- /**
- * Executes sequence of requests twice using given socket factory.
- */
- private void makeRequests(SSLSocketFactory socketFactory)
- throws IOException {
- for (int i = 0; i < 2; i++) {
- fetch(socketFactory, "www.fortify.net", 443, true, "/sslcheck.html",
- 1, 1, 0, 60);
- fetch(socketFactory, "www.paypal.com", 443, true, "/",
- 1, 1, 0, 60);
- fetch(socketFactory, "www.yellownet.ch", 443, true, "/",
- 1, 1, 0, 60);
- }
- }
-
- /**
- * Fake in the sense that it doesn't actually persist anything.
- */
- static class FakeClientSessionCache implements SSLClientSessionCache {
-
- List<String> ops = new ArrayList<String>();
- Map<String, byte[]> sessions = new HashMap<String, byte[]>();
-
- public byte[] getSessionData(String host, int port) {
- ops.add("get " + host);
- return sessions.get(host);
- }
-
- public void putSessionData(SSLSession session, byte[] sessionData) {
- String host = session.getPeerHost();
- System.err.println("length: " + sessionData.length);
- ops.add("put " + host);
- sessions.put(host, sessionData);
- }
- }
-
- public void testFileBasedClientSessionCache() throws IOException,
- KeyManagementException {
- SSLContextImpl context = new SSLContextImpl();
- String tmpDir = System.getProperty("java.io.tmpdir");
- if (tmpDir == null) {
- fail("Please set 'java.io.tmpdir' system property.");
- }
- File cacheDir = new File(tmpDir
- + "/" + SSLSocketTest.class.getName() + "/cache");
- deleteDir(cacheDir);
- SSLClientSessionCache fileCache
- = FileClientSessionCache.usingDirectory(cacheDir);
- try {
- ClientSessionCacheProxy cacheProxy
- = new ClientSessionCacheProxy(fileCache);
- context.engineInit(null, null, null, cacheProxy, null);
- SSLSocketFactory socketFactory = context.engineGetSocketFactory();
- context.engineGetClientSessionContext().setSessionCacheSize(1);
- makeRequests(socketFactory);
- List<String> expected = Arrays.asList(
- "unsuccessful get www.fortify.net",
- "put www.fortify.net",
- "unsuccessful get www.paypal.com",
- "put www.paypal.com",
- "unsuccessful get www.yellownet.ch",
- "put www.yellownet.ch",
-
- // At this point, all in-memory cache requests should miss,
- // but the sessions will still be in the persistent cache.
- "successful get www.fortify.net",
- "successful get www.paypal.com",
- "successful get www.yellownet.ch"
- );
- assertEquals(expected, cacheProxy.ops);
-
- // Try again now that file-based cache is populated.
- fileCache = FileClientSessionCache.usingDirectory(cacheDir);
- cacheProxy = new ClientSessionCacheProxy(fileCache);
- context.engineInit(null, null, null, cacheProxy, null);
- socketFactory = context.engineGetSocketFactory();
- context.engineGetClientSessionContext().setSessionCacheSize(1);
- makeRequests(socketFactory);
- expected = Arrays.asList(
- "successful get www.fortify.net",
- "successful get www.paypal.com",
- "successful get www.yellownet.ch",
- "successful get www.fortify.net",
- "successful get www.paypal.com",
- "successful get www.yellownet.ch"
- );
- assertEquals(expected, cacheProxy.ops);
- } finally {
- deleteDir(cacheDir);
- }
- }
-
- private static void deleteDir(File directory) {
- if (!directory.exists()) {
- return;
- }
- for (File file : directory.listFiles()) {
- file.delete();
- }
- directory.delete();
- }
-
- static class ClientSessionCacheProxy implements SSLClientSessionCache {
-
- final SSLClientSessionCache delegate;
- final List<String> ops = new ArrayList<String>();
-
- ClientSessionCacheProxy(SSLClientSessionCache delegate) {
- this.delegate = delegate;
- }
-
- public byte[] getSessionData(String host, int port) {
- byte[] sessionData = delegate.getSessionData(host, port);
- ops.add((sessionData == null ? "unsuccessful" : "successful")
- + " get " + host);
- return sessionData;
- }
-
- public void putSessionData(SSLSession session, byte[] sessionData) {
- delegate.putSessionData(session, sessionData);
- ops.add("put " + session.getPeerHost());
- }
- }
-
- public static void main(String[] args) throws KeyManagementException, IOException {
- new SSLSocketTest().testFileBasedClientSessionCache();
- }
+
+
}
diff --git a/tests/CoreTests/android/location/LocationManagerProximityTest.java b/tests/CoreTests/android/location/LocationManagerProximityTest.java
index e1501e3..5f62983 100644
--- a/tests/CoreTests/android/location/LocationManagerProximityTest.java
+++ b/tests/CoreTests/android/location/LocationManagerProximityTest.java
@@ -23,7 +23,6 @@ import android.content.IntentFilter;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
-import android.provider.Settings;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.MediumTest;
import android.util.Log;
@@ -34,10 +33,8 @@ import android.util.Log;
* TODO: add tests for more scenarios
*
* To run:
- * adb shell am instrument -e class android.location.LocationManagerProximityTest \
- * -w android.core/android.test.InstrumentationTestRunner
- *
- * This test requires that the "Allow mock locations" setting be enabled
+ * adb shell am instrument -e class com.google.android.mapstests.api.LocationProximityTest \
+ * -w com.google.android.mapstests/.MapInstrumentationTestRunner
*
*/
@MediumTest
@@ -49,6 +46,8 @@ public class LocationManagerProximityTest extends AndroidTestCase {
private LocationManager mLocationManager;
private PendingIntent mPendingIntent;
private TestIntentReceiver mIntentReceiver;
+ private String mOriginalAllowedProviders;
+ private int mOriginalMocksAllowed;
private static final String LOG_TAG = "LocationProximityTest";
@@ -61,13 +60,27 @@ public class LocationManagerProximityTest extends AndroidTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
-
- // test that mock locations are allowed so a more descriptive error message can be logged
- if (Settings.Secure.getInt(getContext().getContentResolver(),
- Settings.Secure.ALLOW_MOCK_LOCATION, 0) == 0) {
- fail("Mock locations are currently disabled in Settings - this test requires " +
- "mock locations");
- }
+
+ // allow mock locations
+ mOriginalMocksAllowed =
+ android.provider.Settings.Secure.getInt(getContext().getContentResolver(),
+ android.provider.Settings.Secure.ALLOW_MOCK_LOCATION, 0);
+
+ android.provider.Settings.Secure.putInt(getContext().getContentResolver(),
+ android.provider.Settings.Secure.ALLOW_MOCK_LOCATION, 1);
+
+ mOriginalAllowedProviders =
+ android.provider.Settings.Secure.getString(
+ getContext().getContentResolver(),
+ android.provider.Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
+
+ // ensure 'only' the mock provider is enabled
+ // need to do this so the proximity listener does not ignore the mock
+ // updates in favor of gps updates
+ android.provider.Settings.Secure.putString(
+ getContext().getContentResolver(),
+ android.provider.Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
+ PROVIDER_NAME);
mLocationManager = (LocationManager) getContext().
getSystemService(Context.LOCATION_SERVICE);
@@ -96,6 +109,18 @@ public class LocationManagerProximityTest extends AndroidTestCase {
if (mIntentReceiver != null) {
getContext().unregisterReceiver(mIntentReceiver);
}
+
+ android.provider.Settings.Secure.putInt(getContext().getContentResolver(),
+ android.provider.Settings.Secure.ALLOW_MOCK_LOCATION, mOriginalMocksAllowed);
+
+ if (mOriginalAllowedProviders != null) {
+ // restore original settings
+ android.provider.Settings.Secure.putString(
+ getContext().getContentResolver(),
+ android.provider.Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
+ mOriginalAllowedProviders);
+ mLocationManager.updateProviders();
+ }
}
/**
diff --git a/tests/CoreTests/run_core_test.sh b/tests/CoreTests/run_core_test.sh
index ffa31ed..1fc3348 100755
--- a/tests/CoreTests/run_core_test.sh
+++ b/tests/CoreTests/run_core_test.sh
@@ -1,6 +1,4 @@
framework=/system/framework
bpath=$framework/core.jar:$framework/ext.jar:$framework/framework.jar:$framework/android.test.runner.jar
-adb shell exec dalvikvm -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=3001 \
- -Xbootclasspath:$bpath -cp /data/app/android.core.apk \
- -Djava.io.tmpdir=/sdcard/tmp \
+adb shell exec dalvikvm -Xbootclasspath:$bpath -cp system/app/CoreTests.apk \
com.android.internal.util.WithFramework junit.textui.TestRunner $*
diff --git a/tests/ImfTest/src/com/android/imftest/samples/InputTypeActivity.java b/tests/ImfTest/src/com/android/imftest/samples/InputTypeActivity.java
index 17f6bdc..6c71e86 100755
--- a/tests/ImfTest/src/com/android/imftest/samples/InputTypeActivity.java
+++ b/tests/ImfTest/src/com/android/imftest/samples/InputTypeActivity.java
@@ -83,6 +83,10 @@ public class InputTypeActivity extends Activity {
mLayout.addView(buildEntryView(EditorInfo.TYPE_CLASS_TEXT|EditorInfo.TYPE_TEXT_VARIATION_NORMAL|EditorInfo.TYPE_TEXT_FLAG_AUTO_CORRECT,
R.string.auto_correct_edit_text_label));
+ /* Normal Edit Text w/Search Flag*/
+ mLayout.addView(buildEntryView(EditorInfo.TYPE_CLASS_TEXT|EditorInfo.TYPE_TEXT_VARIATION_NORMAL|EditorInfo.TYPE_TEXT_FLAG_SEARCH,
+ R.string.search_edit_text_label));
+
/* Uri Edit Text */
mLayout.addView(buildEntryView(EditorInfo.TYPE_CLASS_TEXT|EditorInfo.TYPE_TEXT_VARIATION_URI,
R.string.uri_edit_text_label));
diff --git a/tests/gadgets/GadgetProviderTest/res/layout/test_gadget.xml b/tests/gadgets/GadgetProviderTest/res/layout/test_gadget.xml
index e0a416e..4d483c7 100644
--- a/tests/gadgets/GadgetProviderTest/res/layout/test_gadget.xml
+++ b/tests/gadgets/GadgetProviderTest/res/layout/test_gadget.xml
@@ -16,11 +16,8 @@
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/oh_hai_text"
- android:layout_width="150dp"
- android:layout_height="150dp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:text="@string/oh_hai"
- android:background="#8fff"
- android:textColor="#000"
- android:textStyle="bold"
/>
diff --git a/tests/gadgets/GadgetProviderTest/res/xml/gadget_info.xml b/tests/gadgets/GadgetProviderTest/res/xml/gadget_info.xml
index 33cc2e3..0fc7812 100644
--- a/tests/gadgets/GadgetProviderTest/res/xml/gadget_info.xml
+++ b/tests/gadgets/GadgetProviderTest/res/xml/gadget_info.xml
@@ -1,7 +1,7 @@
<gadget-provider xmlns:android="http://schemas.android.com/apk/res/android"
- android:minWidth="150dp"
- android:minHeight="150dp"
- android:updatePeriodMillis="2000"
+ android:minWidth="40dp"
+ android:minHeight="30dp"
+ android:updatePeriodMillis="60000"
android:initialLayout="@layout/test_gadget"
>
</gadget-provider>
diff --git a/tools/aapt/Images.cpp b/tools/aapt/Images.cpp
index edb12ea..4c776fb 100644
--- a/tools/aapt/Images.cpp
+++ b/tools/aapt/Images.cpp
@@ -859,14 +859,6 @@ static void write_png(const char* imageName,
analyze_image(imageName, imageInfo, grayscaleTolerance, rgbPalette, alphaPalette,
&paletteEntries, &hasTransparency, &color_type, outRows);
-
- // If the image is a 9-patch, we need to preserve it as a ARGB file to make
- // sure the pixels will not be pre-dithered/clamped until we decide they are
- if (imageInfo.is9Patch && (color_type == PNG_COLOR_TYPE_RGB ||
- color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_PALETTE)) {
- color_type = PNG_COLOR_TYPE_RGB_ALPHA;
- }
-
switch (color_type) {
case PNG_COLOR_TYPE_PALETTE:
NOISY(printf("Image %s has %d colors%s, using PNG_COLOR_TYPE_PALETTE\n",
diff --git a/tools/layoutlib/api/src/com/android/layoutlib/api/ILayoutBridge.java b/tools/layoutlib/api/src/com/android/layoutlib/api/ILayoutBridge.java
index df1876d..0810d29 100644
--- a/tools/layoutlib/api/src/com/android/layoutlib/api/ILayoutBridge.java
+++ b/tools/layoutlib/api/src/com/android/layoutlib/api/ILayoutBridge.java
@@ -24,35 +24,28 @@ import java.util.Map;
* <p/>
* <p/>{@link #getApiLevel()} gives the ability to know which methods are available.
* <p/>
- * Changes in API level 3:
- * <ul>
- * <li>{@link #computeLayout(IXmlPullParser, Object, int, int, int, float, float, String, boolean, Map, Map, IProjectCallback, ILayoutLog)}</li>
- * <li> deprecated {@link #computeLayout(IXmlPullParser, Object, int, int, String, boolean, Map, Map, IProjectCallback, ILayoutLog)}</li>
- * </ul>
* Changes in API level 2:
* <ul>
* <li>{@link #getApiLevel()}</li>
- * <li>{@link #computeLayout(IXmlPullParser, Object, int, int, String, boolean, Map, Map, IProjectCallback, ILayoutLog)}</li>
- * <li>deprecated {@link #computeLayout(IXmlPullParser, Object, int, int, String, Map, Map, IProjectCallback, ILayoutLog)}</li>
+ * <li>{@link #computeLayout(IXmlPullParser, Object, int, int, String, boolean, Map, Map, IProjectCallback, ILayoutLog)},
+ * deprecated {@link #computeLayout(IXmlPullParser, Object, int, int, String, Map, Map, IProjectCallback, ILayoutLog)}.</li>
* </ul>
*/
public interface ILayoutBridge {
- final int API_CURRENT = 3;
+ final int API_CURRENT = 2;
/**
* Returns the API level of the layout library.
* While no methods will ever be removed, some may become deprecated, and some new ones
* will appear.
- * <p/>If calling this method throws an {@link AbstractMethodError}, then the API level
- * should be considered to be 1.
*/
int getApiLevel();
/**
* Initializes the Bridge object.
* @param fontOsLocation the location of the fonts.
- * @param enumValueMap map attrName => { map enumFlagName => Integer value }.
+ * @param enumValueMap map attrName => { map enumFlagName => Integer value }.
* @return true if success.
* @since 1
*/
@@ -63,42 +56,8 @@ public interface ILayoutBridge {
* @param layoutDescription the {@link IXmlPullParser} letting the LayoutLib Bridge visit the
* layout file.
* @param projectKey An Object identifying the project. This is used for the cache mechanism.
- * @param screenWidth the screen width
- * @param screenHeight the screen height
- * @param density the density factor for the screen.
- * @param xdpi the screen actual dpi in X
- * @param ydpi the screen actual dpi in Y
- * @param themeName The name of the theme to use.
- * @param isProjectTheme true if the theme is a project theme, false if it is a framework theme.
- * @param projectResources the resources of the project. The map contains (String, map) pairs
- * where the string is the type of the resource reference used in the layout file, and the
- * map contains (String, {@link IResourceValue}) pairs where the key is the resource name,
- * and the value is the resource value.
- * @param frameworkResources the framework resources. The map contains (String, map) pairs
- * where the string is the type of the resource reference used in the layout file, and the map
- * contains (String, {@link IResourceValue}) pairs where the key is the resource name, and the
- * value is the resource value.
- * @param projectCallback The {@link IProjectCallback} object to get information from
- * the project.
- * @param logger the object responsible for displaying warning/errors to the user.
- * @return an {@link ILayoutResult} object that contains the result of the layout.
- * @since 3
- */
- ILayoutResult computeLayout(IXmlPullParser layoutDescription,
- Object projectKey,
- int screenWidth, int screenHeight, int density, float xdpi, float ydpi,
- String themeName, boolean isProjectTheme,
- Map<String, Map<String, IResourceValue>> projectResources,
- Map<String, Map<String, IResourceValue>> frameworkResources,
- IProjectCallback projectCallback, ILayoutLog logger);
-
- /**
- * Computes and renders a layout
- * @param layoutDescription the {@link IXmlPullParser} letting the LayoutLib Bridge visit the
- * layout file.
- * @param projectKey An Object identifying the project. This is used for the cache mechanism.
- * @param screenWidth the screen width
- * @param screenHeight the screen height
+ * @param screenWidth
+ * @param screenHeight
* @param themeName The name of the theme to use.
* @param isProjectTheme true if the theme is a project theme, false if it is a framework theme.
* @param projectResources the resources of the project. The map contains (String, map) pairs
@@ -113,10 +72,8 @@ public interface ILayoutBridge {
* the project.
* @param logger the object responsible for displaying warning/errors to the user.
* @return an {@link ILayoutResult} object that contains the result of the layout.
- * @deprecated Use {@link #computeLayout(IXmlPullParser, Object, int, int, int, float, float, String, boolean, Map, Map, IProjectCallback, ILayoutLog)}
* @since 2
*/
- @Deprecated
ILayoutResult computeLayout(IXmlPullParser layoutDescription,
Object projectKey,
int screenWidth, int screenHeight, String themeName, boolean isProjectTheme,
@@ -145,7 +102,7 @@ public interface ILayoutBridge {
* the project.
* @param logger the object responsible for displaying warning/errors to the user.
* @return an {@link ILayoutResult} object that contains the result of the layout.
- * @deprecated Use {@link #computeLayout(IXmlPullParser, Object, int, int, int, float, float, String, boolean, Map, Map, IProjectCallback, ILayoutLog)}
+ * @deprecated Use {@link #computeLayout(IXmlPullParser, Object, int, int, String, boolean, Map, Map, IProjectCallback, ILayoutLog)}.
* @since 1
*/
@Deprecated
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java
index 6abc452d..82fe365 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java
@@ -40,7 +40,6 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
-import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.BridgeInflater;
import android.view.IWindow;
@@ -73,8 +72,6 @@ public final class Bridge implements ILayoutBridge {
private static final int DEFAULT_STATUS_BAR_HEIGHT = 25;
public static class StaticMethodNotImplementedException extends RuntimeException {
- private static final long serialVersionUID = 1L;
-
public StaticMethodNotImplementedException(String msg) {
super(msg);
}
@@ -280,40 +277,20 @@ public final class Bridge implements ILayoutBridge {
isProjectTheme = true;
}
- return computeLayout(layoutDescription, projectKey,
- screenWidth, screenHeight, DisplayMetrics.DEFAULT_DENSITY,
- DisplayMetrics.DEFAULT_DENSITY, DisplayMetrics.DEFAULT_DENSITY,
- themeName, isProjectTheme,
+ return computeLayout(layoutDescription, projectKey, screenWidth, screenHeight, themeName, isProjectTheme,
projectResources, frameworkResources, customViewLoader, logger);
}
/*
- * For compatilibty purposes, we implement the old deprecated version of computeLayout.
* (non-Javadoc)
* @see com.android.layoutlib.api.ILayoutBridge#computeLayout(com.android.layoutlib.api.IXmlPullParser, java.lang.Object, int, int, java.lang.String, boolean, java.util.Map, java.util.Map, com.android.layoutlib.api.IProjectCallback, com.android.layoutlib.api.ILayoutLog)
*/
- public ILayoutResult computeLayout(IXmlPullParser layoutDescription, Object projectKey,
+ public ILayoutResult computeLayout(IXmlPullParser layoutDescription,
+ Object projectKey,
int screenWidth, int screenHeight, String themeName, boolean isProjectTheme,
Map<String, Map<String, IResourceValue>> projectResources,
Map<String, Map<String, IResourceValue>> frameworkResources,
IProjectCallback customViewLoader, ILayoutLog logger) {
- return computeLayout(layoutDescription, projectKey,
- screenWidth, screenHeight, DisplayMetrics.DEFAULT_DENSITY,
- DisplayMetrics.DEFAULT_DENSITY, DisplayMetrics.DEFAULT_DENSITY,
- themeName, isProjectTheme,
- projectResources, frameworkResources, customViewLoader, logger);
- }
-
- /*
- * (non-Javadoc)
- * @see com.android.layoutlib.api.ILayoutBridge#computeLayout(com.android.layoutlib.api.IXmlPullParser, java.lang.Object, int, int, int, float, float, java.lang.String, boolean, java.util.Map, java.util.Map, com.android.layoutlib.api.IProjectCallback, com.android.layoutlib.api.ILayoutLog)
- */
- public ILayoutResult computeLayout(IXmlPullParser layoutDescription, Object projectKey,
- int screenWidth, int screenHeight, int density, float xdpi, float ydpi,
- String themeName, boolean isProjectTheme,
- Map<String, Map<String, IResourceValue>> projectResources,
- Map<String, Map<String, IResourceValue>> frameworkResources,
- IProjectCallback customViewLoader, ILayoutLog logger) {
if (logger == null) {
logger = sDefaultLogger;
}
@@ -321,7 +298,7 @@ public final class Bridge implements ILayoutBridge {
synchronized (sDefaultLogger) {
sLogger = logger;
}
-
+
// find the current theme and compute the style inheritance map
Map<IStyleResourceValue, IStyleResourceValue> styleParentMap =
new HashMap<IStyleResourceValue, IStyleResourceValue>();
@@ -332,16 +309,7 @@ public final class Bridge implements ILayoutBridge {
BridgeContext context = null;
try {
- // setup the display Metrics.
- DisplayMetrics metrics = new DisplayMetrics();
- metrics.density = density / (float) DisplayMetrics.DEFAULT_DENSITY;
- metrics.scaledDensity = metrics.density;
- metrics.widthPixels = screenWidth;
- metrics.heightPixels = screenHeight;
- metrics.xdpi = xdpi;
- metrics.ydpi = ydpi;
-
- context = new BridgeContext(projectKey, metrics, currentTheme, projectResources,
+ context = new BridgeContext(projectKey, currentTheme, projectResources,
frameworkResources, styleParentMap, customViewLoader, logger);
BridgeInflater inflater = new BridgeInflater(context, customViewLoader);
context.setBridgeInflater(inflater);
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java
index baa3d53..0df20e4 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java
@@ -87,21 +87,14 @@ public final class BridgeContext extends Context {
private BridgeContentResolver mContentResolver;
/**
- * @param projectKey An Object identifying the project. This is used for the cache mechanism.
- * @param metrics the {@link DisplayMetrics}.
- * @param themeName The name of the theme to use.
- * @param projectResources the resources of the project. The map contains (String, map) pairs
- * where the string is the type of the resource reference used in the layout file, and the
- * map contains (String, {@link IResourceValue}) pairs where the key is the resource name,
- * and the value is the resource value.
- * @param frameworkResources the framework resources. The map contains (String, map) pairs
- * where the string is the type of the resource reference used in the layout file, and the map
- * contains (String, {@link IResourceValue}) pairs where the key is the resource name, and the
- * value is the resource value.
+ * @param projectKey
+ * @param currentTheme
+ * @param projectResources
+ * @param frameworkResources
* @param styleInheritanceMap
* @param customViewLoader
*/
- public BridgeContext(Object projectKey, DisplayMetrics metrics,
+ public BridgeContext(Object projectKey,
IStyleResourceValue currentTheme,
Map<String, Map<String, IResourceValue>> projectResources,
Map<String, Map<String, IResourceValue>> frameworkResources,
@@ -112,6 +105,10 @@ public final class BridgeContext extends Context {
mLogger = logger;
Configuration config = new Configuration();
+ DisplayMetrics metrics = new DisplayMetrics();
+ metrics.setToDefaults();
+
+
AssetManager assetManager = BridgeAssetManager.initSystem();
mResources = BridgeResources.initSystem(
this,
diff --git a/tools/preload/Android.mk b/tools/preload/Android.mk
index e6fa103..d3457fe 100644
--- a/tools/preload/Android.mk
+++ b/tools/preload/Android.mk
@@ -2,19 +2,7 @@ LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
-LOCAL_SRC_FILES := \
- ClassRank.java \
- Compile.java \
- LoadedClass.java \
- MemoryUsage.java \
- Operation.java \
- Policy.java \
- PrintCsv.java \
- PrintPsTree.java \
- Proc.java \
- Record.java \
- Root.java \
- WritePreloadedClassFile.java
+LOCAL_SRC_FILES := *.java
LOCAL_MODULE:= preload