summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--[-rwxr-xr-x]core/java/android/animation/ValueAnimator.java0
-rw-r--r--core/java/android/app/Activity.java10
-rw-r--r--core/java/android/app/ActivityManagerNative.java1
-rw-r--r--core/java/android/app/ActivityThread.java18
-rw-r--r--core/java/android/app/DownloadManager.java2
-rw-r--r--[-rwxr-xr-x]core/java/android/app/IAlarmManager.aidl0
-rw-r--r--[-rwxr-xr-x]core/java/android/app/IThumbnailReceiver.aidl0
-rw-r--r--core/java/android/app/LoaderManager.java1
-rw-r--r--core/java/android/app/PendingIntent.java4
-rw-r--r--[-rwxr-xr-x]core/java/android/app/admin/DevicePolicyManager.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/appwidget/AppWidgetProvider.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/bluetooth/BluetoothA2dp.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/bluetooth/BluetoothAdapter.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/bluetooth/BluetoothDevice.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/bluetooth/BluetoothHeadset.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/bluetooth/BluetoothInputDevice.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/bluetooth/BluetoothPbap.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/bluetooth/BluetoothProfile.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/bluetooth/IBluetoothInputDevice.aidl0
-rw-r--r--[-rwxr-xr-x]core/java/android/bluetooth/IBluetoothManager.aidl0
-rw-r--r--core/java/android/content/ContentResolver.java10
-rw-r--r--[-rwxr-xr-x]core/java/android/content/IIntentReceiver.aidl0
-rw-r--r--core/java/android/content/Intent.java6
-rw-r--r--core/java/android/content/pm/ApplicationInfo.java15
-rw-r--r--[-rwxr-xr-x]core/java/android/content/res/Configuration.aidl0
-rw-r--r--[-rwxr-xr-x]core/java/android/content/res/ObbInfo.aidl0
-rw-r--r--[-rwxr-xr-x]core/java/android/content/res/Resources.java43
-rw-r--r--[-rwxr-xr-x]core/java/android/database/IContentObserver.aidl0
-rw-r--r--core/java/android/database/sqlite/SQLiteConnection.java9
-rw-r--r--core/java/android/database/sqlite/SQLiteDatabase.java9
-rw-r--r--core/java/android/database/sqlite/SQLiteSession.java2
-rw-r--r--[-rwxr-xr-x]core/java/android/ddm/package.html0
-rw-r--r--[-rwxr-xr-x]core/java/android/debug/package.html0
-rw-r--r--[-rwxr-xr-x]core/java/android/gesture/Gesture.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/gesture/GestureOverlayView.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/gesture/GestureUtils.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/gesture/Instance.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/gesture/Learner.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/gesture/Prediction.java0
-rw-r--r--core/java/android/hardware/Camera.java2
-rw-r--r--core/java/android/hardware/SystemSensorManager.java3
-rw-r--r--[-rwxr-xr-x]core/java/android/hardware/input/InputManager.java0
-rw-r--r--core/java/android/net/SSLCertificateSocketFactory.java22
-rw-r--r--[-rwxr-xr-x]core/java/android/net/Uri.aidl0
-rw-r--r--core/java/android/net/http/AndroidHttpClient.java3
-rw-r--r--core/java/android/net/http/SslCertificate.java41
-rw-r--r--[-rwxr-xr-x]core/java/android/net/http/package.html0
-rw-r--r--[-rwxr-xr-x]core/java/android/net/package.html0
-rw-r--r--core/java/android/os/CommonTimeUtils.java20
-rw-r--r--core/java/android/os/Debug.java306
-rw-r--r--[-rwxr-xr-x]core/java/android/os/IHardwareService.aidl0
-rw-r--r--[-rwxr-xr-x]core/java/android/os/IVibratorService.aidl0
-rw-r--r--[-rwxr-xr-x]core/java/android/os/TokenWatcher.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/provider/ContactsContract.java0
-rw-r--r--core/java/android/provider/MediaStore.java18
-rw-r--r--core/java/android/security/IKeystoreService.java542
-rw-r--r--[-rwxr-xr-x]core/java/android/server/package.html0
-rw-r--r--[-rwxr-xr-x]core/java/android/speech/tts/ITextToSpeechCallback.aidl0
-rw-r--r--[-rwxr-xr-x]core/java/android/speech/tts/TextToSpeech.java0
-rw-r--r--core/java/android/text/format/DateFormat.java395
-rw-r--r--core/java/android/text/format/DateUtils.java387
-rw-r--r--core/java/android/text/format/Formatter.java14
-rw-r--r--core/java/android/text/format/Time.java3
-rw-r--r--core/java/android/util/FloatMath.java10
-rw-r--r--core/java/android/util/Patterns.java8
-rwxr-xr-xcore/java/android/util/PropertyValueModel.java143
-rwxr-xr-xcore/java/android/util/ValueModel.java74
-rw-r--r--[-rwxr-xr-x]core/java/android/view/InputDevice.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/view/InputEvent.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/view/KeyEvent.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/view/OrientationEventListener.java0
-rw-r--r--core/java/android/view/View.java3
-rw-r--r--core/java/android/view/ViewRootImpl.java6
-rw-r--r--core/java/android/view/ViewStub.java3
-rw-r--r--[-rwxr-xr-x]core/java/android/view/WindowManager.aidl0
-rw-r--r--[-rwxr-xr-x]core/java/android/view/WindowOrientationListener.java1
-rw-r--r--[-rwxr-xr-x]core/java/android/view/animation/package.html0
-rw-r--r--core/java/android/webkit/BrowserFrame.java15
-rw-r--r--core/java/android/webkit/ClientCertRequestHandler.java17
-rw-r--r--[-rwxr-xr-x]core/java/android/webkit/DeviceMotionService.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/webkit/DeviceOrientationService.java0
-rw-r--r--core/java/android/webkit/FindActionModeCallback.java2
-rw-r--r--[-rwxr-xr-x]core/java/android/webkit/GeolocationPermissions.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/webkit/GeolocationPermissionsClassic.java0
-rw-r--r--[-rwxr-xr-x]core/java/android/webkit/GeolocationService.java0
-rw-r--r--core/java/android/webkit/HTML5Audio.java29
-rw-r--r--core/java/android/webkit/WebCoreThreadWatchdog.java2
-rw-r--r--core/java/android/webkit/WebViewClassic.java138
-rw-r--r--core/java/android/webkit/WebViewCore.java2
-rw-r--r--core/java/android/widget/AbsListView.java3
-rw-r--r--[-rwxr-xr-x]core/java/android/widget/AppSecurityPermissions.java0
-rw-r--r--core/java/android/widget/CheckBox.java23
-rw-r--r--core/java/android/widget/DateTimeView.java10
-rw-r--r--core/java/android/widget/DigitalClock.java15
-rw-r--r--core/java/android/widget/EditText.java23
-rw-r--r--core/java/android/widget/Editor.java13
-rw-r--r--core/java/android/widget/HeaderViewListAdapter.java3
-rw-r--r--core/java/android/widget/ListView.java26
-rw-r--r--core/java/android/widget/NumberPicker.java4
-rw-r--r--core/java/android/widget/SeekBar.java20
-rw-r--r--core/java/android/widget/TextClock.java111
-rwxr-xr-xcore/java/android/widget/ValueEditor.java53
-rw-r--r--[-rwxr-xr-x]core/java/com/android/internal/app/IMediaContainerService.aidl0
-rw-r--r--[-rwxr-xr-x]core/java/com/android/internal/app/IUsageStats.aidl0
-rw-r--r--[-rwxr-xr-x]core/java/com/android/internal/app/NetInitiatedActivity.java0
-rw-r--r--core/java/com/android/internal/app/ResolverActivity.java68
-rw-r--r--core/java/com/android/internal/backup/LocalTransport.java5
-rw-r--r--[-rwxr-xr-x]core/java/com/android/internal/os/PkgUsageStats.aidl0
-rw-r--r--[-rwxr-xr-x]core/java/com/android/internal/os/PkgUsageStats.java0
-rw-r--r--core/java/com/android/internal/os/SamplingProfilerIntegration.java2
-rw-r--r--core/java/com/android/internal/util/AsyncChannel.java37
-rw-r--r--core/java/com/android/internal/view/menu/MenuItemImpl.java5
-rw-r--r--core/jni/Android.mk15
-rw-r--r--core/jni/AndroidRuntime.cpp8
-rw-r--r--core/jni/android_database_SQLiteConnection.cpp2
-rw-r--r--core/jni/android_ddm_DdmHandleNativeHeap.cpp128
-rw-r--r--core/jni/android_emoji_EmojiFactory.cpp14
-rw-r--r--core/jni/android_media_JetPlayer.cpp36
-rw-r--r--core/jni/android_media_ToneGenerator.cpp1
-rw-r--r--core/jni/android_os_Debug.cpp48
-rw-r--r--core/jni/android_os_SELinux.cpp800
-rw-r--r--core/jni/android_text_format_Time.cpp192
-rw-r--r--core/jni/android_util_EventLog.cpp4
-rw-r--r--core/jni/android_util_StringBlock.cpp1
-rw-r--r--core/jni/android_view_DisplayEventReceiver.cpp42
-rw-r--r--core/jni/com_android_internal_os_ZygoteInit.cpp6
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-en-hdpi/sym_keyboard_delete.pngbin2315 -> 2315 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_circle_disable.pngbin2727 -> 2727 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_circle_disable_focused.pngbin2330 -> 2330 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_circle_normal.pngbin2824 -> 2824 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_circle_pressed.pngbin4396 -> 4396 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_circle_selected.pngbin4463 -> 4463 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_close_normal.pngbin2220 -> 2220 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_close_pressed.pngbin2831 -> 2831 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_close_selected.pngbin3043 -> 3043 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_default_normal.9.pngbin1854 -> 1854 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_default_normal_disable.9.pngbin3601 -> 3601 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_default_normal_disable_focused.9.pngbin1781 -> 1781 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_default_pressed.9.pngbin1913 -> 1913 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_default_selected.9.pngbin1507 -> 1507 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_default_small_normal.9.pngbin1698 -> 1698 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_default_small_normal_disable.9.pngbin1649 -> 1649 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_default_small_normal_disable_focused.9.pngbin1720 -> 1720 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_default_small_pressed.9.pngbin1508 -> 1508 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_default_small_selected.9.pngbin1439 -> 1439 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_dialog_disable.pngbin2443 -> 2443 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_dialog_normal.pngbin2217 -> 2217 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_dialog_pressed.pngbin2841 -> 2841 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_dialog_selected.pngbin3028 -> 3028 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_dropdown_normal.9.pngbin2652 -> 2652 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_dropdown_pressed.9.pngbin7337 -> 7337 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_dropdown_selected.9.pngbin8223 -> 8223 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_radio_off.pngbin3638 -> 3638 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_radio_off_pressed.pngbin4697 -> 4697 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_radio_off_selected.pngbin4819 -> 4819 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_radio_on.pngbin3685 -> 3685 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_radio_on_pressed.pngbin4678 -> 4678 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/btn_radio_on_selected.pngbin4768 -> 4768 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/contact_header_bg.9.pngbin219 -> 219 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/ic_btn_round_more_disabled.pngbin457 -> 457 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/ic_btn_round_more_normal.pngbin477 -> 477 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/ic_contact_picture_2.pngbin1845 -> 1845 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/ic_contact_picture_3.pngbin1105 -> 1105 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/ic_jog_dial_sound_off.pngbin5698 -> 5698 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/ic_jog_dial_sound_on.pngbin5685 -> 5685 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/ic_jog_dial_unlock.pngbin5758 -> 5758 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/ic_settings_language.pngbin986 -> 986 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_dial_arrow_long_left_green.pngbin7469 -> 7469 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_dial_arrow_long_left_yellow.pngbin7378 -> 7378 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_dial_arrow_long_middle_yellow.pngbin4877 -> 4877 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_dial_arrow_long_right_red.pngbin7501 -> 7501 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_dial_arrow_long_right_yellow.pngbin7523 -> 7523 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_dial_arrow_short_left.pngbin3704 -> 3704 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_dial_arrow_short_left_and_right.pngbin6553 -> 6553 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_dial_arrow_short_right.pngbin3826 -> 3826 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_dial_bg.pngbin21832 -> 21832 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_dial_dimple.pngbin5439 -> 5439 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_tab_left_confirm_gray.pngbin5533 -> 5533 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_tab_left_confirm_green.pngbin5797 -> 5797 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_tab_left_confirm_red.pngbin5687 -> 5687 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_tab_left_confirm_yellow.pngbin5720 -> 5720 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_tab_left_pressed.pngbin5174 -> 5174 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_tab_right_confirm_gray.pngbin5209 -> 5209 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_tab_right_confirm_green.pngbin5579 -> 5579 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_tab_right_confirm_red.pngbin5443 -> 5443 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_tab_right_confirm_yellow.pngbin5509 -> 5509 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/jog_tab_right_pressed.pngbin4833 -> 4833 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/progressbar_indeterminate1.pngbin474 -> 474 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/progressbar_indeterminate2.pngbin472 -> 472 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/progressbar_indeterminate3.pngbin469 -> 469 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_notify_more.pngbin1295 -> 1295 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_battery_10.pngbin1508 -> 1508 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_battery_20.pngbin1625 -> 1625 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_battery_40.pngbin1670 -> 1670 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_battery_60.pngbin1706 -> 1706 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_battery_80.pngbin1704 -> 1704 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_battery_charge_anim1.pngbin1928 -> 1928 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_battery_charge_anim2.pngbin1941 -> 1941 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_battery_charge_anim3.pngbin1956 -> 1956 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_battery_charge_anim4.pngbin1914 -> 1914 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_battery_charge_anim5.pngbin2023 -> 2023 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_phone_call.pngbin2371 -> 2371 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_phone_call_forward.pngbin2930 -> 2930 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_phone_call_on_hold.pngbin2722 -> 2722 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_r_signal_3_cdma.pngbin2200 -> 2200 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_ra_signal_0_cdma.pngbin1335 -> 1335 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_ra_signal_1_cdma.pngbin1884 -> 1884 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_ra_signal_2_cdma.pngbin2063 -> 2063 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_ra_signal_4_cdma.pngbin2265 -> 2265 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_signal_0_cdma.pngbin425 -> 425 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_signal_1_cdma.pngbin947 -> 947 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_signal_2_cdma.pngbin1159 -> 1159 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_signal_3_cdma.pngbin1283 -> 1283 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_signal_4_cdma.pngbin1357 -> 1357 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_signal_evdo_0.pngbin526 -> 526 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_signal_evdo_1.pngbin1175 -> 1175 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_signal_evdo_2.pngbin1293 -> 1293 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_signal_evdo_3.pngbin1426 -> 1426 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_signal_evdo_4.pngbin1533 -> 1533 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_vp_phone_call.pngbin2785 -> 2785 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/stat_sys_vp_phone_call_on_hold.pngbin2888 -> 2888 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/sym_keyboard_feedback_delete.pngbin1278 -> 1278 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/sym_keyboard_feedback_return.pngbin838 -> 838 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/sym_keyboard_feedback_shift.pngbin885 -> 885 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.pngbin700 -> 700 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/sym_keyboard_feedback_space.pngbin287 -> 287 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/sym_keyboard_return.pngbin1123 -> 1123 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/sym_keyboard_shift.pngbin1495 -> 1495 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/sym_keyboard_shift_locked.pngbin1119 -> 1119 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/sym_keyboard_space.pngbin371 -> 371 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/textfield_default.9.pngbin529 -> 529 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/textfield_disabled.9.pngbin613 -> 613 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/textfield_disabled_selected.9.pngbin738 -> 738 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-hdpi/textfield_selected.9.pngbin616 -> 616 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-ldpi/tab_focus_bar_left.9.pngbin2826 -> 2826 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-ldpi/tab_focus_bar_right.9.pngbin2826 -> 2826 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-ldpi/tab_press_bar_left.9.pngbin2827 -> 2827 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-ldpi/tab_press_bar_right.9.pngbin2827 -> 2827 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-ldpi/tab_selected_bar_left.9.pngbin1011 -> 1011 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-ldpi/tab_selected_bar_right.9.pngbin1011 -> 1011 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_check_buttonless_off.pngbin608 -> 608 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_check_buttonless_on.pngbin721 -> 721 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_dialog_disable.pngbin1306 -> 1306 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_dialog_normal.pngbin1258 -> 1258 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_dialog_pressed.pngbin1326 -> 1326 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_dialog_selected.pngbin1392 -> 1392 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_erase_default.9.pngbin1468 -> 1468 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_erase_pressed.9.pngbin1313 -> 1313 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_erase_selected.9.pngbin1184 -> 1184 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_keyboard_key_pressed.9.pngbin664 -> 664 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_media_player.9.pngbin1677 -> 1677 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_media_player_disabled.9.pngbin724 -> 724 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_media_player_disabled_selected.9.pngbin1040 -> 1040 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_media_player_pressed.9.pngbin1222 -> 1222 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_media_player_selected.9.pngbin1481 -> 1481 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_star_big_off.pngbin1316 -> 1316 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_star_big_off_disable.pngbin1886 -> 1886 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_star_big_off_disable_focused.pngbin1868 -> 1868 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_star_big_off_pressed.pngbin1507 -> 1507 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_star_big_off_selected.pngbin1471 -> 1471 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_star_big_on.pngbin1521 -> 1521 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_star_big_on_disable.pngbin4522 -> 4522 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_star_big_on_disable_focused.pngbin1911 -> 1911 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_star_big_on_pressed.pngbin1540 -> 1540 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_star_big_on_selected.pngbin1456 -> 1456 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/dialog_divider_horizontal_light.9.pngbin2921 -> 2921 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/frame_gallery_thumb.9.pngbin925 -> 925 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/frame_gallery_thumb_pressed.9.pngbin1704 -> 1704 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/frame_gallery_thumb_selected.9.pngbin621 -> 621 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/gallery_selected_default.9.pngbin1088 -> 1088 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/gallery_selected_focused.9.pngbin1313 -> 1313 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/gallery_selected_pressed.9.pngbin1317 -> 1317 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/gallery_unselected_default.9.pngbin560 -> 560 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_dialog_info.pngbin3593 -> 3593 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_dialog_time.pngbin1490 -> 1490 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_jog_dial_unlock.pngbin3339 -> 3339 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_lock_idle_charging.pngbin599 -> 599 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_lock_idle_lock.pngbin547 -> 547 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_lock_idle_low_battery.pngbin665 -> 665 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_media_video_poster.pngbin3499 -> 3499 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_add.pngbin1339 -> 1339 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_agenda.pngbin1010 -> 1010 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_allfriends.pngbin1222 -> 1222 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_camera.pngbin981 -> 981 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_crop.pngbin932 -> 932 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_day.pngbin915 -> 915 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_delete.pngbin967 -> 967 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_directions.pngbin834 -> 834 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_edit.pngbin1198 -> 1198 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_gallery.pngbin804 -> 804 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_info_details.pngbin1237 -> 1237 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_manage.pngbin1144 -> 1144 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_month.pngbin1183 -> 1183 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_my_calendar.pngbin1037 -> 1037 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_mylocation.pngbin1216 -> 1216 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_rotate.pngbin1368 -> 1368 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_search.pngbin1133 -> 1133 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_search_holo_dark.pngbin1133 -> 1133 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_send.pngbin920 -> 920 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_set_as.pngbin941 -> 941 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_share.pngbin1154 -> 1154 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_sort_by_size.pngbin640 -> 640 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_star.pngbin1116 -> 1116 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_today.pngbin1167 -> 1167 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_upload.pngbin793 -> 793 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_upload_you_tube.pngbin793 -> 793 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_view.pngbin1083 -> 1083 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_menu_week.pngbin1013 -> 1013 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_popup_reminder.pngbin1288 -> 1288 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_search_category_default.pngbin5059 -> 5059 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/indicator_input_error.pngbin822 -> 822 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_dial_arrow_long_left_green.pngbin4486 -> 4486 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_dial_arrow_long_left_yellow.pngbin4520 -> 4520 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_dial_arrow_long_middle_yellow.pngbin2915 -> 2915 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_dial_arrow_long_right_red.pngbin4465 -> 4465 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_dial_arrow_long_right_yellow.pngbin4592 -> 4592 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_dial_arrow_short_left.pngbin2206 -> 2206 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_dial_arrow_short_left_and_right.pngbin3673 -> 3673 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_dial_arrow_short_right.pngbin2204 -> 2204 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_dial_bg.pngbin13048 -> 13048 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_dial_dimple.pngbin3334 -> 3334 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.pngbin4067 -> 4067 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_tab_left_confirm_green.pngbin4455 -> 4455 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.pngbin4360 -> 4360 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_tab_left_normal.pngbin3666 -> 3666 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_tab_left_pressed.pngbin3918 -> 3918 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.pngbin3849 -> 3849 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_tab_right_confirm_green.pngbin4159 -> 4159 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.pngbin4138 -> 4138 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_tab_right_normal.pngbin3416 -> 3416 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/jog_tab_right_pressed.pngbin3587 -> 3587 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/keyboard_key_feedback_more_background.9.pngbin1385 -> 1385 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/numberpicker_down_disabled.9.pngbin422 -> 422 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/numberpicker_down_disabled_focused.9.pngbin580 -> 580 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/numberpicker_down_normal.9.pngbin795 -> 795 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/numberpicker_down_pressed.9.pngbin1161 -> 1161 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/numberpicker_down_selected.9.pngbin1170 -> 1170 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/numberpicker_input_disabled.9.pngbin280 -> 280 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/numberpicker_input_normal.9.pngbin582 -> 582 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/numberpicker_input_pressed.9.pngbin604 -> 604 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/numberpicker_input_selected.9.pngbin517 -> 517 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/numberpicker_up_disabled.9.pngbin491 -> 491 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/numberpicker_up_disabled_focused.9.pngbin728 -> 728 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/numberpicker_up_normal.9.pngbin989 -> 989 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/numberpicker_up_pressed.9.pngbin1433 -> 1433 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/numberpicker_up_selected.9.pngbin1428 -> 1428 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/scrollbar_handle_horizontal.9.pngbin266 -> 266 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/scrollbar_handle_vertical.9.pngbin254 -> 254 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/search_plate.9.pngbin2943 -> 2943 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/spinner_black_20.pngbin1217 -> 1217 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.pngbin333 -> 333 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/tab_focus.9.pngbin280 -> 280 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/tab_focus_bar_left.9.pngbin141 -> 141 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/tab_focus_bar_right.9.pngbin141 -> 141 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/tab_press.9.pngbin271 -> 271 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/tab_press_bar_left.9.pngbin141 -> 141 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/tab_press_bar_right.9.pngbin141 -> 141 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/tab_selected_bar_left.9.pngbin143 -> 143 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/tab_selected_bar_right.9.pngbin143 -> 143 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/textfield_search_default.9.pngbin3361 -> 3361 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/textfield_search_selected.9.pngbin3354 -> 3354 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/toast_frame.9.pngbin839 -> 839 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/layout/app_perms_summary.xml0
-rw-r--r--core/res/res/layout/keyguard_screen_sim_pin_portrait.xml1
-rw-r--r--core/res/res/layout/search_view.xml1
-rw-r--r--[-rwxr-xr-x]core/res/res/raw/fallbackring.oggbin14611 -> 14611 bytes
-rw-r--r--core/res/res/values-af/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-am/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-ar-rEG/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-ar/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-be/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-bg/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-ca/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-cs/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-da/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-de/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-el/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rAU/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rCA/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rGB/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rIE/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rIN/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rNZ/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rUS/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-en-rZA/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-es-rUS/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-es/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-et/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-fa/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-fi-rFI/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-fi/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-fr/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-hi-rIN/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-hi/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-hr-rHR/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-hr/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-hu-rHU/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-hu/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-in-rID/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-in/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-it/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-iw/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-ja/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-ko/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-lt-rLT/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-lt/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-lv-rLV/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-lv/donottranslate-cldr.xml2
-rw-r--r--[-rwxr-xr-x]core/res/res/values-mcc208-mnc01/config.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/values-mcc208-mnc10/config.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/values-mcc214-mnc03/config.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/values-mcc214-mnc07/config.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/values-mcc222-mnc01/config.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/values-mcc222-mnc10/config.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/values-mcc234-mnc33/config.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/values-mcc286/config.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/values-mcc302-mnc370/config.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/values-mcc302-mnc660/config.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/values-mcc302-mnc720/config.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/values-mcc340-mnc01/config.xml0
-rw-r--r--core/res/res/values-ms/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-nb/donottranslate-cldr.xml12
-rw-r--r--core/res/res/values-nl/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-pl/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-pt-rPT/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-pt/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-rm/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-ro-rRO/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-ro/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-ru/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-sk-rSK/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-sk/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-sl-rSI/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-sl/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-sr-rRS/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-sr/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-sv/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-sw/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-th-rTH/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-th/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-tl/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-tr/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-uk-rUA/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-uk/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-vi-rVN/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-vi/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-zh-rCN/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-zh-rTW/donottranslate-cldr.xml2
-rw-r--r--core/res/res/values-zu/donottranslate-cldr.xml2
-rw-r--r--[-rwxr-xr-x]core/res/res/values/attrs.xml4
-rw-r--r--[-rwxr-xr-x]core/res/res/values/config.xml2
-rw-r--r--core/res/res/values/donottranslate-cldr.xml2
-rw-r--r--[-rwxr-xr-x]core/res/res/values/strings.xml2
-rw-r--r--core/res/res/values/symbols.xml3
-rw-r--r--[-rwxr-xr-x]core/res/res/xml-land/password_kbd_qwerty.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/xml-land/password_kbd_qwerty_shifted.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/xml-mdpi/password_kbd_qwerty.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/xml-mdpi/password_kbd_qwerty_shifted.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/xml-xlarge/password_kbd_numeric.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/xml-xlarge/password_kbd_qwerty.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/xml-xlarge/password_kbd_qwerty_shifted.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/xml-xlarge/password_kbd_symbols.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/xml-xlarge/password_kbd_symbols_shift.xml0
-rw-r--r--core/res/res/xml/apns.xml2
-rw-r--r--[-rwxr-xr-x]core/res/res/xml/kg_password_kbd_numeric.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/xml/password_kbd_extension.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/xml/password_kbd_numeric.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/xml/password_kbd_qwerty.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/xml/password_kbd_qwerty_shifted.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/xml/password_kbd_symbols.xml0
-rw-r--r--[-rwxr-xr-x]core/res/res/xml/password_kbd_symbols_shift.xml0
-rw-r--r--[-rwxr-xr-x]core/tests/ConnectivityManagerTest/assets/accesspoints.xml0
-rw-r--r--core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java44
-rw-r--r--[-rwxr-xr-x]core/tests/coretests/src/android/content/pm/AppCacheTest.java0
-rw-r--r--[-rwxr-xr-x]core/tests/coretests/src/android/content/pm/PackageManagerTests.java0
-rw-r--r--core/tests/coretests/src/android/net/http/SslCertificateTest.java69
-rw-r--r--[-rwxr-xr-x]core/tests/coretests/src/android/os/storage/AsecTests.java0
-rw-r--r--core/tests/coretests/src/android/text/format/DateUtilsTest.java9
-rw-r--r--core/tests/coretests/src/android/util/PatternsTest.java2
-rw-r--r--core/tests/coretests/src/android/webkit/WebkitTest.java2
-rw-r--r--core/tests/coretests/src/android/widget/listview/focus/ListWithEditTextHeaderTest.java19
481 files changed, 2143 insertions, 2228 deletions
diff --git a/core/java/android/animation/ValueAnimator.java b/core/java/android/animation/ValueAnimator.java
index f7460c4..f7460c4 100755..100644
--- a/core/java/android/animation/ValueAnimator.java
+++ b/core/java/android/animation/ValueAnimator.java
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index e96b475..d6ddeb6 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -2539,12 +2539,16 @@ public class Activity extends ContextThemeWrapper
* Activity don't need to deal with feature codes.
*/
public boolean onMenuItemSelected(int featureId, MenuItem item) {
+ CharSequence titleCondensed = item.getTitleCondensed();
+
switch (featureId) {
case Window.FEATURE_OPTIONS_PANEL:
// Put event logging here so it gets called even if subclass
// doesn't call through to superclass's implmeentation of each
// of these methods below
- EventLog.writeEvent(50000, 0, item.getTitleCondensed());
+ if(titleCondensed != null) {
+ EventLog.writeEvent(50000, 0, titleCondensed.toString());
+ }
if (onOptionsItemSelected(item)) {
return true;
}
@@ -2562,7 +2566,9 @@ public class Activity extends ContextThemeWrapper
return false;
case Window.FEATURE_CONTEXT_MENU:
- EventLog.writeEvent(50000, 1, item.getTitleCondensed());
+ if(titleCondensed != null) {
+ EventLog.writeEvent(50000, 1, titleCondensed.toString());
+ }
if (onContextItemSelected(item)) {
return true;
}
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 61b2067..fe7338b 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -1147,6 +1147,7 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
IActivityController watcher = IActivityController.Stub.asInterface(
data.readStrongBinder());
setActivityController(watcher);
+ reply.writeNoException();
return true;
}
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index d62372c..22fd9a9 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -113,6 +113,7 @@ import java.util.TimeZone;
import java.util.regex.Pattern;
import libcore.io.DropBox;
+import libcore.io.EventLogger;
import libcore.io.IoUtils;
import dalvik.system.CloseGuard;
@@ -4491,6 +4492,8 @@ public final class ActivityThread {
+ "snatched provider from the jaws of death");
}
prc.removePending = false;
+ // There is a race! It fails to remove the message, which
+ // will be handled in completeRemoveProvider().
mH.removeMessages(H.REMOVE_PROVIDER, prc);
} else {
unstableDelta = 0;
@@ -4670,6 +4673,11 @@ public final class ActivityThread {
return;
}
+ // More complicated race!! Some client managed to acquire the
+ // provider and release it before the removal was completed.
+ // Continue the removal, and abort the next remove message.
+ prc.removePending = false;
+
final IBinder jBinder = prc.holder.provider.asBinder();
ProviderRefCount existingPrc = mProviderRefCountMap.get(jBinder);
if (existingPrc == prc) {
@@ -4980,6 +4988,13 @@ public final class ActivityThread {
}
}
+ private static class EventLoggingReporter implements EventLogger.Reporter {
+ @Override
+ public void report (int code, Object... list) {
+ EventLog.writeEvent(code, list);
+ }
+ }
+
private class DropBoxReporter implements DropBox.Reporter {
private DropBoxManager dropBox;
@@ -5009,6 +5024,9 @@ public final class ActivityThread {
Environment.initForCurrentUser();
+ // Set the reporter for event logging in libcore
+ EventLogger.setReporter(new EventLoggingReporter());
+
Process.setArgV0("<pre-initialized>");
Looper.prepareMainLooper();
diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java
index 6cf4dd0..32e40ee 100644
--- a/core/java/android/app/DownloadManager.java
+++ b/core/java/android/app/DownloadManager.java
@@ -499,7 +499,7 @@ public class DownloadManager {
" already exists and is not a directory");
}
} else {
- if (!file.mkdir()) {
+ if (!file.mkdirs()) {
throw new IllegalStateException("Unable to create directory: "+
file.getAbsolutePath());
}
diff --git a/core/java/android/app/IAlarmManager.aidl b/core/java/android/app/IAlarmManager.aidl
index edb40ed..edb40ed 100755..100644
--- a/core/java/android/app/IAlarmManager.aidl
+++ b/core/java/android/app/IAlarmManager.aidl
diff --git a/core/java/android/app/IThumbnailReceiver.aidl b/core/java/android/app/IThumbnailReceiver.aidl
index 7943f2c..7943f2c 100755..100644
--- a/core/java/android/app/IThumbnailReceiver.aidl
+++ b/core/java/android/app/IThumbnailReceiver.aidl
diff --git a/core/java/android/app/LoaderManager.java b/core/java/android/app/LoaderManager.java
index fd0f0bf..267555a 100644
--- a/core/java/android/app/LoaderManager.java
+++ b/core/java/android/app/LoaderManager.java
@@ -833,6 +833,7 @@ class LoaderManagerImpl extends LoaderManager {
for (int i = mLoaders.size()-1; i >= 0; i--) {
mLoaders.valueAt(i).destroy();
}
+ mLoaders.clear();
}
if (DEBUG) Log.v(TAG, "Destroying Inactive in " + this);
diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java
index 5c75aff..2897ee0 100644
--- a/core/java/android/app/PendingIntent.java
+++ b/core/java/android/app/PendingIntent.java
@@ -289,7 +289,7 @@ public final class PendingIntent implements Parcelable {
/**
* Like {@link #getActivity(Context, int, Intent, int)}, but allows an
- * array of Intents to be supplied. The first Intent in the array is
+ * array of Intents to be supplied. The last Intent in the array is
* taken as the primary key for the PendingIntent, like the single Intent
* given to {@link #getActivity(Context, int, Intent, int)}. Upon sending
* the resulting PendingIntent, all of the Intents are started in the same
@@ -335,7 +335,7 @@ public final class PendingIntent implements Parcelable {
/**
* Like {@link #getActivity(Context, int, Intent, int)}, but allows an
- * array of Intents to be supplied. The first Intent in the array is
+ * array of Intents to be supplied. The last Intent in the array is
* taken as the primary key for the PendingIntent, like the single Intent
* given to {@link #getActivity(Context, int, Intent, int)}. Upon sending
* the resulting PendingIntent, all of the Intents are started in the same
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 4c0eba0..4c0eba0 100755..100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
diff --git a/core/java/android/appwidget/AppWidgetProvider.java b/core/java/android/appwidget/AppWidgetProvider.java
index edf142b..edf142b 100755..100644
--- a/core/java/android/appwidget/AppWidgetProvider.java
+++ b/core/java/android/appwidget/AppWidgetProvider.java
diff --git a/core/java/android/bluetooth/BluetoothA2dp.java b/core/java/android/bluetooth/BluetoothA2dp.java
index 6fdf3b4..6fdf3b4 100755..100644
--- a/core/java/android/bluetooth/BluetoothA2dp.java
+++ b/core/java/android/bluetooth/BluetoothA2dp.java
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 6367e16..6367e16 100755..100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java
index 4cc22b4..4cc22b4 100755..100644
--- a/core/java/android/bluetooth/BluetoothDevice.java
+++ b/core/java/android/bluetooth/BluetoothDevice.java
diff --git a/core/java/android/bluetooth/BluetoothHeadset.java b/core/java/android/bluetooth/BluetoothHeadset.java
index 793d798..793d798 100755..100644
--- a/core/java/android/bluetooth/BluetoothHeadset.java
+++ b/core/java/android/bluetooth/BluetoothHeadset.java
diff --git a/core/java/android/bluetooth/BluetoothInputDevice.java b/core/java/android/bluetooth/BluetoothInputDevice.java
index db7e424..db7e424 100755..100644
--- a/core/java/android/bluetooth/BluetoothInputDevice.java
+++ b/core/java/android/bluetooth/BluetoothInputDevice.java
diff --git a/core/java/android/bluetooth/BluetoothPbap.java b/core/java/android/bluetooth/BluetoothPbap.java
index b5280e5..b5280e5 100755..100644
--- a/core/java/android/bluetooth/BluetoothPbap.java
+++ b/core/java/android/bluetooth/BluetoothPbap.java
diff --git a/core/java/android/bluetooth/BluetoothProfile.java b/core/java/android/bluetooth/BluetoothProfile.java
index 1920efa..1920efa 100755..100644
--- a/core/java/android/bluetooth/BluetoothProfile.java
+++ b/core/java/android/bluetooth/BluetoothProfile.java
diff --git a/core/java/android/bluetooth/IBluetoothInputDevice.aidl b/core/java/android/bluetooth/IBluetoothInputDevice.aidl
index 1ebb9ca..1ebb9ca 100755..100644
--- a/core/java/android/bluetooth/IBluetoothInputDevice.aidl
+++ b/core/java/android/bluetooth/IBluetoothInputDevice.aidl
diff --git a/core/java/android/bluetooth/IBluetoothManager.aidl b/core/java/android/bluetooth/IBluetoothManager.aidl
index ed8777c..ed8777c 100755..100644
--- a/core/java/android/bluetooth/IBluetoothManager.aidl
+++ b/core/java/android/bluetooth/IBluetoothManager.aidl
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 9e406d4..bde4d2b 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -518,7 +518,7 @@ public abstract class ContentResolver {
* ContentProvider.openFile}.
* @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
+ * @throws FileNotFoundException Throws FileNotFoundException if no
* file exists under the URI or the mode is invalid.
* @see #openAssetFileDescriptor(Uri, String)
*/
@@ -1049,9 +1049,9 @@ public abstract class ContentResolver {
if (!SCHEME_CONTENT.equals(uri.getScheme())) {
return null;
}
- String auth = uri.getAuthority();
+ final String auth = uri.getAuthority();
if (auth != null) {
- return acquireProvider(mContext, uri.getAuthority());
+ return acquireProvider(mContext, auth);
}
return null;
}
@@ -1068,9 +1068,9 @@ public abstract class ContentResolver {
if (!SCHEME_CONTENT.equals(uri.getScheme())) {
return null;
}
- String auth = uri.getAuthority();
+ final String auth = uri.getAuthority();
if (auth != null) {
- return acquireExistingProvider(mContext, uri.getAuthority());
+ return acquireExistingProvider(mContext, auth);
}
return null;
}
diff --git a/core/java/android/content/IIntentReceiver.aidl b/core/java/android/content/IIntentReceiver.aidl
index 3d92723..3d92723 100755..100644
--- a/core/java/android/content/IIntentReceiver.aidl
+++ b/core/java/android/content/IIntentReceiver.aidl
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index cf0603e..89b1bbd 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -1950,7 +1950,7 @@ public class Intent implements Parcelable, Cloneable {
/**
* Broadcast Action: External media is present, but not mounted at its mount point.
- * The path to the mount point for the removed media is contained in the Intent.mData field.
+ * The path to the mount point for the unmounted media is contained in the Intent.mData field.
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_MEDIA_UNMOUNTED = "android.intent.action.MEDIA_UNMOUNTED";
@@ -1971,7 +1971,7 @@ public class Intent implements Parcelable, Cloneable {
/**
* Broadcast Action: External media is present and mounted at its mount point.
- * The path to the mount point for the removed media is contained in the Intent.mData field.
+ * The path to the mount point for the mounted media is contained in the Intent.mData field.
* The Intent contains an extra with name "read-only" and Boolean value to indicate if the
* media was mounted read only.
*/
@@ -2002,7 +2002,7 @@ public class Intent implements Parcelable, Cloneable {
/**
* Broadcast Action: External media is present but cannot be mounted.
- * The path to the mount point for the removed media is contained in the Intent.mData field.
+ * The path to the mount point for the unmountable media is contained in the Intent.mData field.
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_MEDIA_UNMOUNTABLE = "android.intent.action.MEDIA_UNMOUNTABLE";
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index 32cc7fd..02401dc 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -398,6 +398,15 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
public String[] resourceDirs;
/**
+ * String retrieved from the seinfo tag found in selinux policy. This value
+ * is useful in setting an SELinux security context on the process as well
+ * as its data directory.
+ *
+ * {@hide}
+ */
+ public String seinfo;
+
+ /**
* Paths to all shared libraries this application is linked against. This
* field is only set if the {@link PackageManager#GET_SHARED_LIBRARY_FILES
* PackageManager.GET_SHARED_LIBRARY_FILES} flag was used when retrieving
@@ -477,6 +486,9 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
if (resourceDirs != null) {
pw.println(prefix + "resourceDirs=" + resourceDirs);
}
+ if (seinfo != null) {
+ pw.println(prefix + "seinfo=" + seinfo);
+ }
pw.println(prefix + "dataDir=" + dataDir);
if (sharedLibraryFiles != null) {
pw.println(prefix + "sharedLibraryFiles=" + sharedLibraryFiles);
@@ -544,6 +556,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
publicSourceDir = orig.publicSourceDir;
nativeLibraryDir = orig.nativeLibraryDir;
resourceDirs = orig.resourceDirs;
+ seinfo = orig.seinfo;
sharedLibraryFiles = orig.sharedLibraryFiles;
dataDir = orig.dataDir;
uid = orig.uid;
@@ -583,6 +596,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
dest.writeString(publicSourceDir);
dest.writeString(nativeLibraryDir);
dest.writeStringArray(resourceDirs);
+ dest.writeString(seinfo);
dest.writeStringArray(sharedLibraryFiles);
dest.writeString(dataDir);
dest.writeInt(uid);
@@ -621,6 +635,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
publicSourceDir = source.readString();
nativeLibraryDir = source.readString();
resourceDirs = source.readStringArray();
+ seinfo = source.readString();
sharedLibraryFiles = source.readStringArray();
dataDir = source.readString();
uid = source.readInt();
diff --git a/core/java/android/content/res/Configuration.aidl b/core/java/android/content/res/Configuration.aidl
index bb7f2dd..bb7f2dd 100755..100644
--- a/core/java/android/content/res/Configuration.aidl
+++ b/core/java/android/content/res/Configuration.aidl
diff --git a/core/java/android/content/res/ObbInfo.aidl b/core/java/android/content/res/ObbInfo.aidl
index 636ad6a..636ad6a 100755..100644
--- a/core/java/android/content/res/ObbInfo.aidl
+++ b/core/java/android/content/res/ObbInfo.aidl
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index b316f23..0404a84 100755..100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -232,11 +232,13 @@ public class Resources {
}
/**
- * Return the character sequence associated with a particular resource ID for a particular
- * numerical quantity.
- *
- * <p>See <a href="{@docRoot}guide/topics/resources/string-resource.html#Plurals">String
- * Resources</a> for more on quantity strings.
+ * Returns the character sequence necessary for grammatically correct pluralization
+ * of the given resource ID for the given quantity.
+ * Note that the character sequence is selected based solely on grammatical necessity,
+ * and that such rules differ between languages. Do not assume you know which string
+ * will be returned for a given quantity. See
+ * <a href="{@docRoot}guide/topics/resources/string-resource.html#Plurals">String Resources</a>
+ * for more detail.
*
* @param id The desired resource identifier, as generated by the aapt
* tool. This integer encodes the package, type, and resource
@@ -344,14 +346,17 @@ public class Resources {
}
/**
- * Return the string value associated with a particular resource ID for a particular
- * numerical quantity, substituting the format arguments as defined in
- * {@link java.util.Formatter} and {@link java.lang.String#format}. It will be
- * stripped of any styled text information.
- * {@more}
- *
- * <p>See <a href="{@docRoot}guide/topics/resources/string-resource.html#Plurals">String
- * Resources</a> for more on quantity strings.
+ * Formats the string necessary for grammatically correct pluralization
+ * of the given resource ID for the given quantity, using the given arguments.
+ * Note that the string is selected based solely on grammatical necessity,
+ * and that such rules differ between languages. Do not assume you know which string
+ * will be returned for a given quantity. See
+ * <a href="{@docRoot}guide/topics/resources/string-resource.html#Plurals">String Resources</a>
+ * for more detail.
+ *
+ * <p>Substitution of format arguments works as if using
+ * {@link java.util.Formatter} and {@link java.lang.String#format}.
+ * The resulting string will be stripped of any styled text information.
*
* @param id The desired resource identifier, as generated by the aapt
* tool. This integer encodes the package, type, and resource
@@ -372,11 +377,13 @@ public class Resources {
}
/**
- * Return the string value associated with a particular resource ID for a particular
- * numerical quantity.
- *
- * <p>See <a href="{@docRoot}guide/topics/resources/string-resource.html#Plurals">String
- * Resources</a> for more on quantity strings.
+ * Returns the string necessary for grammatically correct pluralization
+ * of the given resource ID for the given quantity.
+ * Note that the string is selected based solely on grammatical necessity,
+ * and that such rules differ between languages. Do not assume you know which string
+ * will be returned for a given quantity. See
+ * <a href="{@docRoot}guide/topics/resources/string-resource.html#Plurals">String Resources</a>
+ * for more detail.
*
* @param id The desired resource identifier, as generated by the aapt
* tool. This integer encodes the package, type, and resource
diff --git a/core/java/android/database/IContentObserver.aidl b/core/java/android/database/IContentObserver.aidl
index 13aff05..13aff05 100755..100644
--- a/core/java/android/database/IContentObserver.aidl
+++ b/core/java/android/database/IContentObserver.aidl
diff --git a/core/java/android/database/sqlite/SQLiteConnection.java b/core/java/android/database/sqlite/SQLiteConnection.java
index 6f7c1f3..0017c46 100644
--- a/core/java/android/database/sqlite/SQLiteConnection.java
+++ b/core/java/android/database/sqlite/SQLiteConnection.java
@@ -216,6 +216,13 @@ public final class SQLiteConnection implements CancellationSignal.OnCancelListen
setJournalSizeLimit();
setAutoCheckpointInterval();
setLocaleFromConfiguration();
+
+ // Register custom functions.
+ final int functionCount = mConfiguration.customFunctions.size();
+ for (int i = 0; i < functionCount; i++) {
+ SQLiteCustomFunction function = mConfiguration.customFunctions.get(i);
+ nativeRegisterCustomFunction(mConnectionPtr, function);
+ }
}
private void dispose(boolean finalized) {
@@ -974,7 +981,7 @@ public final class SQLiteConnection implements CancellationSignal.OnCancelListen
if (count != statement.mNumParameters) {
throw new SQLiteBindOrColumnIndexOutOfRangeException(
"Expected " + statement.mNumParameters + " bind arguments but "
- + bindArgs.length + " were provided.");
+ + count + " were provided.");
}
if (count == 0) {
return;
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java
index e2d44f2..60ccc61 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -1481,6 +1481,9 @@ public final class SQLiteDatabase extends SQLiteClosable {
* @param table the table to delete from
* @param whereClause the optional WHERE clause to apply when deleting.
* Passing null will delete all rows.
+ * @param whereArgs You may include ?s in the where clause, which
+ * will be replaced by the values from whereArgs. The values
+ * will be bound as Strings.
* @return the number of rows affected if a whereClause is passed in, 0
* otherwise. To remove all rows and get a count pass "1" as the
* whereClause.
@@ -1508,6 +1511,9 @@ public final class SQLiteDatabase extends SQLiteClosable {
* valid value that will be translated to NULL.
* @param whereClause the optional WHERE clause to apply when updating.
* Passing null will update all rows.
+ * @param whereArgs You may include ?s in the where clause, which
+ * will be replaced by the values from whereArgs. The values
+ * will be bound as Strings.
* @return the number of rows affected
*/
public int update(String table, ContentValues values, String whereClause, String[] whereArgs) {
@@ -1522,6 +1528,9 @@ public final class SQLiteDatabase extends SQLiteClosable {
* valid value that will be translated to NULL.
* @param whereClause the optional WHERE clause to apply when updating.
* Passing null will update all rows.
+ * @param whereArgs You may include ?s in the where clause, which
+ * will be replaced by the values from whereArgs. The values
+ * will be bound as Strings.
* @param conflictAlgorithm for update conflict resolver
* @return the number of rows affected
*/
diff --git a/core/java/android/database/sqlite/SQLiteSession.java b/core/java/android/database/sqlite/SQLiteSession.java
index beb5b3a..d80ab1f 100644
--- a/core/java/android/database/sqlite/SQLiteSession.java
+++ b/core/java/android/database/sqlite/SQLiteSession.java
@@ -926,7 +926,7 @@ public final class SQLiteSession {
}
private void throwIfNestedTransaction() {
- if (mTransactionStack == null && mTransactionStack.mParent != null) {
+ if (hasNestedTransaction()) {
throw new IllegalStateException("Cannot perform this operation because "
+ "a nested transaction is in progress.");
}
diff --git a/core/java/android/ddm/package.html b/core/java/android/ddm/package.html
index 1c9bf9d..1c9bf9d 100755..100644
--- a/core/java/android/ddm/package.html
+++ b/core/java/android/ddm/package.html
diff --git a/core/java/android/debug/package.html b/core/java/android/debug/package.html
index c9f96a6..c9f96a6 100755..100644
--- a/core/java/android/debug/package.html
+++ b/core/java/android/debug/package.html
diff --git a/core/java/android/gesture/Gesture.java b/core/java/android/gesture/Gesture.java
index c6a2a87..c6a2a87 100755..100644
--- a/core/java/android/gesture/Gesture.java
+++ b/core/java/android/gesture/Gesture.java
diff --git a/core/java/android/gesture/GestureOverlayView.java b/core/java/android/gesture/GestureOverlayView.java
index b6c260f..b6c260f 100755..100644
--- a/core/java/android/gesture/GestureOverlayView.java
+++ b/core/java/android/gesture/GestureOverlayView.java
diff --git a/core/java/android/gesture/GestureUtils.java b/core/java/android/gesture/GestureUtils.java
index dd221fc..dd221fc 100755..100644
--- a/core/java/android/gesture/GestureUtils.java
+++ b/core/java/android/gesture/GestureUtils.java
diff --git a/core/java/android/gesture/Instance.java b/core/java/android/gesture/Instance.java
index 02a6519..02a6519 100755..100644
--- a/core/java/android/gesture/Instance.java
+++ b/core/java/android/gesture/Instance.java
diff --git a/core/java/android/gesture/Learner.java b/core/java/android/gesture/Learner.java
index a105652..a105652 100755..100644
--- a/core/java/android/gesture/Learner.java
+++ b/core/java/android/gesture/Learner.java
diff --git a/core/java/android/gesture/Prediction.java b/core/java/android/gesture/Prediction.java
index ce6ad57..ce6ad57 100755..100644
--- a/core/java/android/gesture/Prediction.java
+++ b/core/java/android/gesture/Prediction.java
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index a300776..483e9de 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -2338,7 +2338,7 @@ public class Camera {
}
/**
- * Sets the maximum and maximum preview fps. This controls the rate of
+ * Sets the minimum and maximum preview fps. This controls the rate of
* preview frames received in {@link PreviewCallback}. The minimum and
* maximum preview fps must be one of the elements from {@link
* #getSupportedPreviewFpsRange}.
diff --git a/core/java/android/hardware/SystemSensorManager.java b/core/java/android/hardware/SystemSensorManager.java
index 0204e94..7375e7d 100644
--- a/core/java/android/hardware/SystemSensorManager.java
+++ b/core/java/android/hardware/SystemSensorManager.java
@@ -373,7 +373,8 @@ public class SystemSensorManager extends SensorManager {
for (Sensor s : l.getSensors()) {
disableSensorLocked(s);
}
- } else if (l.removeSensor(sensor) == 0) {
+ // Check if the ListenerDelegate has the sensor it is trying to unregister.
+ } else if (l.hasSensor(sensor) && l.removeSensor(sensor) == 0) {
// if we have no more sensors enabled on this listener,
// take it off the list.
sListeners.remove(i);
diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java
index 262d87d..262d87d 100755..100644
--- a/core/java/android/hardware/input/InputManager.java
+++ b/core/java/android/hardware/input/InputManager.java
diff --git a/core/java/android/net/SSLCertificateSocketFactory.java b/core/java/android/net/SSLCertificateSocketFactory.java
index 846443d..2a2f7cf 100644
--- a/core/java/android/net/SSLCertificateSocketFactory.java
+++ b/core/java/android/net/SSLCertificateSocketFactory.java
@@ -23,6 +23,7 @@ import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.security.KeyManagementException;
+import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import javax.net.SocketFactory;
import javax.net.ssl.HostnameVerifier;
@@ -88,6 +89,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory {
private TrustManager[] mTrustManagers = null;
private KeyManager[] mKeyManagers = null;
private byte[] mNpnProtocols = null;
+ private PrivateKey mChannelIdPrivateKey = null;
private final int mHandshakeTimeoutMillis;
private final SSLClientSessionCache mSessionCache;
@@ -319,6 +321,20 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory {
}
/**
+ * Sets the private key to be used for TLS Channel ID by connections made by this
+ * factory.
+ *
+ * @param privateKey private key (enables TLS Channel ID) or {@code null} for no key (disables
+ * TLS Channel ID). The private key has to be an Elliptic Curve (EC) key based on the
+ * NIST P-256 curve (aka SECG secp256r1 or ANSI X9.62 prime256v1).
+ *
+ * @hide
+ */
+ public void setChannelIdPrivateKey(PrivateKey privateKey) {
+ mChannelIdPrivateKey = privateKey;
+ }
+
+ /**
* Enables <a href="http://tools.ietf.org/html/rfc5077#section-3.2">session ticket</a>
* support on the given socket.
*
@@ -378,6 +394,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory {
OpenSSLSocketImpl s = (OpenSSLSocketImpl) getDelegate().createSocket(k, host, port, close);
s.setNpnProtocols(mNpnProtocols);
s.setHandshakeTimeout(mHandshakeTimeoutMillis);
+ s.setChannelIdPrivateKey(mChannelIdPrivateKey);
if (mSecure) {
verifyHostname(s, host);
}
@@ -397,6 +414,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory {
OpenSSLSocketImpl s = (OpenSSLSocketImpl) getDelegate().createSocket();
s.setNpnProtocols(mNpnProtocols);
s.setHandshakeTimeout(mHandshakeTimeoutMillis);
+ s.setChannelIdPrivateKey(mChannelIdPrivateKey);
return s;
}
@@ -414,6 +432,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory {
addr, port, localAddr, localPort);
s.setNpnProtocols(mNpnProtocols);
s.setHandshakeTimeout(mHandshakeTimeoutMillis);
+ s.setChannelIdPrivateKey(mChannelIdPrivateKey);
return s;
}
@@ -429,6 +448,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory {
OpenSSLSocketImpl s = (OpenSSLSocketImpl) getDelegate().createSocket(addr, port);
s.setNpnProtocols(mNpnProtocols);
s.setHandshakeTimeout(mHandshakeTimeoutMillis);
+ s.setChannelIdPrivateKey(mChannelIdPrivateKey);
return s;
}
@@ -445,6 +465,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory {
host, port, localAddr, localPort);
s.setNpnProtocols(mNpnProtocols);
s.setHandshakeTimeout(mHandshakeTimeoutMillis);
+ s.setChannelIdPrivateKey(mChannelIdPrivateKey);
if (mSecure) {
verifyHostname(s, host);
}
@@ -462,6 +483,7 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory {
OpenSSLSocketImpl s = (OpenSSLSocketImpl) getDelegate().createSocket(host, port);
s.setNpnProtocols(mNpnProtocols);
s.setHandshakeTimeout(mHandshakeTimeoutMillis);
+ s.setChannelIdPrivateKey(mChannelIdPrivateKey);
if (mSecure) {
verifyHostname(s, host);
}
diff --git a/core/java/android/net/Uri.aidl b/core/java/android/net/Uri.aidl
index 6bd3be5..6bd3be5 100755..100644
--- a/core/java/android/net/Uri.aidl
+++ b/core/java/android/net/Uri.aidl
diff --git a/core/java/android/net/http/AndroidHttpClient.java b/core/java/android/net/http/AndroidHttpClient.java
index c534e58..fabe018 100644
--- a/core/java/android/net/http/AndroidHttpClient.java
+++ b/core/java/android/net/http/AndroidHttpClient.java
@@ -66,8 +66,7 @@ import android.util.Log;
/**
* Implementation of the Apache {@link DefaultHttpClient} that is configured with
- * reasonable default settings and registered schemes for Android, and
- * also lets the user add {@link HttpRequestInterceptor} classes.
+ * reasonable default settings and registered schemes for Android.
* Don't create this directly, use the {@link #newInstance} factory method.
*
* <p>This client processes cookies but does not retain them by default.
diff --git a/core/java/android/net/http/SslCertificate.java b/core/java/android/net/http/SslCertificate.java
index fe6d4eb..5b60c0d 100644
--- a/core/java/android/net/http/SslCertificate.java
+++ b/core/java/android/net/http/SslCertificate.java
@@ -334,9 +334,11 @@ public class SslCertificate {
/**
* A distinguished name helper class: a 3-tuple of:
- * - common name (CN),
- * - organization (O),
- * - organizational unit (OU)
+ * <ul>
+ * <li>the most specific common name (CN)</li>
+ * <li>the most specific organization (O)</li>
+ * <li>the most specific organizational unit (OU)</li>
+ * <ul>
*/
public class DName {
/**
@@ -360,8 +362,15 @@ public class SslCertificate {
private String mUName;
/**
- * Creates a new distinguished name
- * @param dName The distinguished name
+ * Creates a new {@code DName} from a string. The attributes
+ * are assumed to come in most significant to least
+ * significant order which is true of human readable values
+ * returned by methods such as {@code X500Principal.getName()}.
+ * Be aware that the underlying sources of distinguished names
+ * such as instances of {@code X509Certificate} are encoded in
+ * least significant to most significant order, so make sure
+ * the value passed here has the expected ordering of
+ * attributes.
*/
public DName(String dName) {
if (dName != null) {
@@ -374,18 +383,24 @@ public class SslCertificate {
for (int i = 0; i < oid.size(); i++) {
if (oid.elementAt(i).equals(X509Name.CN)) {
- mCName = (String) val.elementAt(i);
+ if (mCName == null) {
+ mCName = (String) val.elementAt(i);
+ }
continue;
}
if (oid.elementAt(i).equals(X509Name.O)) {
- mOName = (String) val.elementAt(i);
- continue;
+ if (mOName == null) {
+ mOName = (String) val.elementAt(i);
+ continue;
+ }
}
if (oid.elementAt(i).equals(X509Name.OU)) {
- mUName = (String) val.elementAt(i);
- continue;
+ if (mUName == null) {
+ mUName = (String) val.elementAt(i);
+ continue;
+ }
}
}
} catch (IllegalArgumentException ex) {
@@ -402,21 +417,21 @@ public class SslCertificate {
}
/**
- * @return The Common-name (CN) component of this name
+ * @return The most specific Common-name (CN) component of this name
*/
public String getCName() {
return mCName != null ? mCName : "";
}
/**
- * @return The Organization (O) component of this name
+ * @return The most specific Organization (O) component of this name
*/
public String getOName() {
return mOName != null ? mOName : "";
}
/**
- * @return The Organizational Unit (OU) component of this name
+ * @return The most specific Organizational Unit (OU) component of this name
*/
public String getUName() {
return mUName != null ? mUName : "";
diff --git a/core/java/android/net/http/package.html b/core/java/android/net/http/package.html
index a81cbce..a81cbce 100755..100644
--- a/core/java/android/net/http/package.html
+++ b/core/java/android/net/http/package.html
diff --git a/core/java/android/net/package.html b/core/java/android/net/package.html
index 47c57e6..47c57e6 100755..100644
--- a/core/java/android/net/package.html
+++ b/core/java/android/net/package.html
diff --git a/core/java/android/os/CommonTimeUtils.java b/core/java/android/os/CommonTimeUtils.java
index 9081ee4..20755d9 100644
--- a/core/java/android/os/CommonTimeUtils.java
+++ b/core/java/android/os/CommonTimeUtils.java
@@ -19,6 +19,7 @@ import java.net.InetAddress;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetSocketAddress;
+import java.util.Locale;
import static libcore.io.OsConstants.*;
class CommonTimeUtils {
@@ -192,10 +193,11 @@ class CommonTimeUtils {
if (AF_INET == type) {
int addr = reply.readInt();
port = reply.readInt();
- addrStr = String.format("%d.%d.%d.%d", (addr >> 24) & 0xFF,
- (addr >> 16) & 0xFF,
- (addr >> 8) & 0xFF,
- addr & 0xFF);
+ addrStr = String.format(Locale.US, "%d.%d.%d.%d",
+ (addr >> 24) & 0xFF,
+ (addr >> 16) & 0xFF,
+ (addr >> 8) & 0xFF,
+ addr & 0xFF);
} else if (AF_INET6 == type) {
int addr1 = reply.readInt();
int addr2 = reply.readInt();
@@ -207,11 +209,11 @@ class CommonTimeUtils {
int flowinfo = reply.readInt();
int scope_id = reply.readInt();
- addrStr = String.format("[%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X]",
- (addr1 >> 16) & 0xFFFF, addr1 & 0xFFFF,
- (addr2 >> 16) & 0xFFFF, addr2 & 0xFFFF,
- (addr3 >> 16) & 0xFFFF, addr3 & 0xFFFF,
- (addr4 >> 16) & 0xFFFF, addr4 & 0xFFFF);
+ addrStr = String.format(Locale.US, "[%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X]",
+ (addr1 >> 16) & 0xFFFF, addr1 & 0xFFFF,
+ (addr2 >> 16) & 0xFFFF, addr2 & 0xFFFF,
+ (addr3 >> 16) & 0xFFFF, addr3 & 0xFFFF,
+ (addr4 >> 16) & 0xFFFF, addr4 & 0xFFFF);
}
if (null != addrStr) {
diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java
index e50c948..2e77237 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -45,7 +45,7 @@ import dalvik.system.VMDebug;
/**
- * Provides various debugging functions for Android applications, including
+ * Provides various debugging methods for Android applications, including
* tracing and allocation counts.
* <p><strong>Logging Trace Files</strong></p>
* <p>Debug can create log files that give details about an application, such as
@@ -130,7 +130,7 @@ public final class Debug
public int otherSharedDirty;
/** @hide */
- public static final int NUM_OTHER_STATS = 9;
+ public static final int NUM_OTHER_STATS = 10;
private int[] otherStats = new int[NUM_OTHER_STATS*3];
@@ -177,15 +177,16 @@ public final class Debug
/* @hide */
public static String getOtherLabel(int which) {
switch (which) {
- case 0: return "Cursor";
- case 1: return "Ashmem";
- case 2: return "Other dev";
- case 3: return ".so mmap";
- case 4: return ".jar mmap";
- case 5: return ".apk mmap";
- case 6: return ".ttf mmap";
- case 7: return ".dex mmap";
- case 8: return "Other mmap";
+ case 0: return "Stack";
+ case 1: return "Cursor";
+ case 2: return "Ashmem";
+ case 3: return "Other dev";
+ case 4: return ".so mmap";
+ case 5: return ".jar mmap";
+ case 6: return ".apk mmap";
+ case 7: return ".ttf mmap";
+ case 8: return ".dex mmap";
+ case 9: return "Other mmap";
default: return "????";
}
}
@@ -554,16 +555,19 @@ href="{@docRoot}guide/developing/tools/traceview.html">Traceview: A Graphical Lo
/**
* Start counting the number and aggregate size of memory allocations.
*
- * <p>The {@link #startAllocCounting() start} function resets the counts and enables counting.
- * The {@link #stopAllocCounting() stop} function disables the counting so that the analysis
- * code doesn't cause additional allocations. The various <code>get</code> functions return
- * the specified value. And the various <code>reset</code> functions reset the specified
+ * <p>The {@link #startAllocCounting() start} method resets the counts and enables counting.
+ * The {@link #stopAllocCounting() stop} method disables the counting so that the analysis
+ * code doesn't cause additional allocations. The various <code>get</code> methods return
+ * the specified value. And the various <code>reset</code> methods reset the specified
* count.</p>
*
- * <p>Counts are kept for the system as a whole and for each thread.
+ * <p>Counts are kept for the system as a whole (global) and for each thread.
* The per-thread counts for threads other than the current thread
* are not cleared by the "reset" or "start" calls.</p>
+ *
+ * @deprecated Accurate counting is a burden on the runtime and may be removed.
*/
+ @Deprecated
public static void startAllocCounting() {
VMDebug.startAllocCounting();
}
@@ -577,211 +581,269 @@ href="{@docRoot}guide/developing/tools/traceview.html">Traceview: A Graphical Lo
VMDebug.stopAllocCounting();
}
+ /**
+ * Returns the global count of objects allocated by the runtime between a
+ * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}.
+ */
public static int getGlobalAllocCount() {
return VMDebug.getAllocCount(VMDebug.KIND_GLOBAL_ALLOCATED_OBJECTS);
}
+
+ /**
+ * Clears the global count of objects allocated.
+ * @see #getGlobalAllocCount()
+ */
+ public static void resetGlobalAllocCount() {
+ VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_ALLOCATED_OBJECTS);
+ }
+
+ /**
+ * Returns the global size, in bytes, of objects allocated by the runtime between a
+ * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}.
+ */
public static int getGlobalAllocSize() {
return VMDebug.getAllocCount(VMDebug.KIND_GLOBAL_ALLOCATED_BYTES);
}
+
+ /**
+ * Clears the global size of objects allocated.
+ * @see #getGlobalAllocCountSize()
+ */
+ public static void resetGlobalAllocSize() {
+ VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_ALLOCATED_BYTES);
+ }
+
+ /**
+ * Returns the global count of objects freed by the runtime between a
+ * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}.
+ */
public static int getGlobalFreedCount() {
return VMDebug.getAllocCount(VMDebug.KIND_GLOBAL_FREED_OBJECTS);
}
+
+ /**
+ * Clears the global count of objects freed.
+ * @see #getGlobalFreedCount()
+ */
+ public static void resetGlobalFreedCount() {
+ VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_FREED_OBJECTS);
+ }
+
+ /**
+ * Returns the global size, in bytes, of objects freed by the runtime between a
+ * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}.
+ */
public static int getGlobalFreedSize() {
return VMDebug.getAllocCount(VMDebug.KIND_GLOBAL_FREED_BYTES);
}
+
+ /**
+ * Clears the global size of objects freed.
+ * @see #getGlobalFreedSize()
+ */
+ public static void resetGlobalFreedSize() {
+ VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_FREED_BYTES);
+ }
+
+ /**
+ * Returns the number of non-concurrent GC invocations between a
+ * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}.
+ */
+ public static int getGlobalGcInvocationCount() {
+ return VMDebug.getAllocCount(VMDebug.KIND_GLOBAL_GC_INVOCATIONS);
+ }
+
+ /**
+ * Clears the count of non-concurrent GC invocations.
+ * @see #getGlobalGcInvocationCount()
+ */
+ public static void resetGlobalGcInvocationCount() {
+ VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_GC_INVOCATIONS);
+ }
+
+ /**
+ * Returns the number of classes successfully initialized (ie those that executed without
+ * throwing an exception) between a {@link #startAllocCounting() start} and
+ * {@link #stopAllocCounting() stop}.
+ */
public static int getGlobalClassInitCount() {
- /* number of classes that have been successfully initialized */
return VMDebug.getAllocCount(VMDebug.KIND_GLOBAL_CLASS_INIT_COUNT);
}
+
+ /**
+ * Clears the count of classes initialized.
+ * @see #getGlobalClassInitCount()
+ */
+ public static void resetGlobalClassInitCount() {
+ VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_CLASS_INIT_COUNT);
+ }
+
+ /**
+ * Returns the time spent successfully initializing classes between a
+ * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}.
+ */
public static int getGlobalClassInitTime() {
/* cumulative elapsed time for class initialization, in usec */
return VMDebug.getAllocCount(VMDebug.KIND_GLOBAL_CLASS_INIT_TIME);
}
/**
- * Returns the global count of external allocation requests. The
- * external allocation tracking feature was removed in Honeycomb.
- * This method exists for compatibility and always returns 0.
- *
- * @deprecated This method is now obsolete.
+ * Clears the count of time spent initializing classes.
+ * @see #getGlobalClassInitTime()
*/
- @Deprecated
- public static int getGlobalExternalAllocCount() {
- return 0;
+ public static void resetGlobalClassInitTime() {
+ VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_CLASS_INIT_TIME);
}
/**
- * Returns the global count of bytes externally allocated. The
- * external allocation tracking feature was removed in Honeycomb.
* This method exists for compatibility and always returns 0.
- *
* @deprecated This method is now obsolete.
*/
@Deprecated
- public static int getGlobalExternalAllocSize() {
+ public static int getGlobalExternalAllocCount() {
return 0;
}
/**
- * Returns the global count of freed external allocation requests.
- * The external allocation tracking feature was removed in
- * Honeycomb. This method exists for compatibility and always
- * returns 0.
- *
+ * This method exists for compatibility and has no effect.
* @deprecated This method is now obsolete.
*/
@Deprecated
- public static int getGlobalExternalFreedCount() {
- return 0;
- }
+ public static void resetGlobalExternalAllocSize() {}
/**
- * Returns the global count of freed bytes from external
- * allocation requests. The external allocation tracking feature
- * was removed in Honeycomb. This method exists for compatibility
- * and always returns 0.
- *
+ * This method exists for compatibility and has no effect.
* @deprecated This method is now obsolete.
*/
@Deprecated
- public static int getGlobalExternalFreedSize() {
- return 0;
- }
-
- public static int getGlobalGcInvocationCount() {
- return VMDebug.getAllocCount(VMDebug.KIND_GLOBAL_GC_INVOCATIONS);
- }
- public static int getThreadAllocCount() {
- return VMDebug.getAllocCount(VMDebug.KIND_THREAD_ALLOCATED_OBJECTS);
- }
- public static int getThreadAllocSize() {
- return VMDebug.getAllocCount(VMDebug.KIND_THREAD_ALLOCATED_BYTES);
- }
+ public static void resetGlobalExternalAllocCount() {}
/**
- * Returns the count of external allocation requests made by the
- * current thread. The external allocation tracking feature was
- * removed in Honeycomb. This method exists for compatibility and
- * always returns 0.
- *
+ * This method exists for compatibility and always returns 0.
* @deprecated This method is now obsolete.
*/
@Deprecated
- public static int getThreadExternalAllocCount() {
+ public static int getGlobalExternalAllocSize() {
return 0;
}
/**
- * Returns the global count of bytes externally allocated. The
- * external allocation tracking feature was removed in Honeycomb.
* This method exists for compatibility and always returns 0.
- *
* @deprecated This method is now obsolete.
*/
@Deprecated
- public static int getThreadExternalAllocSize() {
+ public static int getGlobalExternalFreedCount() {
return 0;
}
- public static int getThreadGcInvocationCount() {
- return VMDebug.getAllocCount(VMDebug.KIND_THREAD_GC_INVOCATIONS);
- }
-
- public static void resetGlobalAllocCount() {
- VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_ALLOCATED_OBJECTS);
- }
- public static void resetGlobalAllocSize() {
- VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_ALLOCATED_BYTES);
- }
- public static void resetGlobalFreedCount() {
- VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_FREED_OBJECTS);
- }
- public static void resetGlobalFreedSize() {
- VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_FREED_BYTES);
- }
- public static void resetGlobalClassInitCount() {
- VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_CLASS_INIT_COUNT);
- }
- public static void resetGlobalClassInitTime() {
- VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_CLASS_INIT_TIME);
- }
-
/**
- * Resets the global count of external allocation requests. The
- * external allocation tracking feature was removed in Honeycomb.
* This method exists for compatibility and has no effect.
- *
* @deprecated This method is now obsolete.
*/
@Deprecated
- public static void resetGlobalExternalAllocCount() {}
+ public static void resetGlobalExternalFreedCount() {}
/**
- * Resets the global count of bytes externally allocated. The
- * external allocation tracking feature was removed in Honeycomb.
* This method exists for compatibility and has no effect.
- *
* @deprecated This method is now obsolete.
*/
@Deprecated
- public static void resetGlobalExternalAllocSize() {}
+ public static int getGlobalExternalFreedSize() {
+ return 0;
+ }
/**
- * Resets the global count of freed external allocations. The
- * external allocation tracking feature was removed in Honeycomb.
* This method exists for compatibility and has no effect.
- *
* @deprecated This method is now obsolete.
*/
@Deprecated
- public static void resetGlobalExternalFreedCount() {}
+ public static void resetGlobalExternalFreedSize() {}
/**
- * Resets the global count counter of freed bytes from external
- * allocations. The external allocation tracking feature was
- * removed in Honeycomb. This method exists for compatibility and
- * has no effect.
- *
- * @deprecated This method is now obsolete.
+ * Returns the thread-local count of objects allocated by the runtime between a
+ * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}.
*/
- @Deprecated
- public static void resetGlobalExternalFreedSize() {}
-
- public static void resetGlobalGcInvocationCount() {
- VMDebug.resetAllocCount(VMDebug.KIND_GLOBAL_GC_INVOCATIONS);
+ public static int getThreadAllocCount() {
+ return VMDebug.getAllocCount(VMDebug.KIND_THREAD_ALLOCATED_OBJECTS);
}
+
+ /**
+ * Clears the thread-local count of objects allocated.
+ * @see #getThreadAllocCount()
+ */
public static void resetThreadAllocCount() {
VMDebug.resetAllocCount(VMDebug.KIND_THREAD_ALLOCATED_OBJECTS);
}
+
+ /**
+ * Returns the thread-local size of objects allocated by the runtime between a
+ * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}.
+ * @return The allocated size in bytes.
+ */
+ public static int getThreadAllocSize() {
+ return VMDebug.getAllocCount(VMDebug.KIND_THREAD_ALLOCATED_BYTES);
+ }
+
+ /**
+ * Clears the thread-local count of objects allocated.
+ * @see #getThreadAllocSize()
+ */
public static void resetThreadAllocSize() {
VMDebug.resetAllocCount(VMDebug.KIND_THREAD_ALLOCATED_BYTES);
}
/**
- * Resets the count of external allocation requests made by the
- * current thread. The external allocation tracking feature was
- * removed in Honeycomb. This method exists for compatibility and
- * has no effect.
- *
+ * This method exists for compatibility and has no effect.
+ * @deprecated This method is now obsolete.
+ */
+ @Deprecated
+ public static int getThreadExternalAllocCount() {
+ return 0;
+ }
+
+ /**
+ * This method exists for compatibility and has no effect.
* @deprecated This method is now obsolete.
*/
@Deprecated
public static void resetThreadExternalAllocCount() {}
/**
- * Resets the count of bytes externally allocated by the current
- * thread. The external allocation tracking feature was removed
- * in Honeycomb. This method exists for compatibility and has no
- * effect.
- *
+ * This method exists for compatibility and has no effect.
+ * @deprecated This method is now obsolete.
+ */
+ @Deprecated
+ public static int getThreadExternalAllocSize() {
+ return 0;
+ }
+
+ /**
+ * This method exists for compatibility and has no effect.
* @deprecated This method is now obsolete.
*/
@Deprecated
public static void resetThreadExternalAllocSize() {}
+ /**
+ * Returns the number of thread-local non-concurrent GC invocations between a
+ * {@link #startAllocCounting() start} and {@link #stopAllocCounting() stop}.
+ */
+ public static int getThreadGcInvocationCount() {
+ return VMDebug.getAllocCount(VMDebug.KIND_THREAD_GC_INVOCATIONS);
+ }
+
+ /**
+ * Clears the thread-local count of non-concurrent GC invocations.
+ * @see #getThreadGcInvocationCount()
+ */
public static void resetThreadGcInvocationCount() {
VMDebug.resetAllocCount(VMDebug.KIND_THREAD_GC_INVOCATIONS);
}
+
+ /**
+ * Clears all the global and thread-local memory allocation counters.
+ * @see #startAllocCounting()
+ */
public static void resetAllCounts() {
VMDebug.resetAllocCount(VMDebug.KIND_ALL_COUNTS);
}
@@ -1380,7 +1442,7 @@ href="{@docRoot}guide/developing/tools/traceview.html">Traceview: A Graphical Lo
}
/**
- * @return a String describing the immediate caller of the calling function.
+ * @return a String describing the immediate caller of the calling method.
* {@hide}
*/
public static String getCaller() {
diff --git a/core/java/android/os/IHardwareService.aidl b/core/java/android/os/IHardwareService.aidl
index 38abfc0..38abfc0 100755..100644
--- a/core/java/android/os/IHardwareService.aidl
+++ b/core/java/android/os/IHardwareService.aidl
diff --git a/core/java/android/os/IVibratorService.aidl b/core/java/android/os/IVibratorService.aidl
index 2c2fe8a..2c2fe8a 100755..100644
--- a/core/java/android/os/IVibratorService.aidl
+++ b/core/java/android/os/IVibratorService.aidl
diff --git a/core/java/android/os/TokenWatcher.java b/core/java/android/os/TokenWatcher.java
index 9b3a2d6..9b3a2d6 100755..100644
--- a/core/java/android/os/TokenWatcher.java
+++ b/core/java/android/os/TokenWatcher.java
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index 965d38d..965d38d 100755..100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java
index 0e7ab52..cb6300f 100644
--- a/core/java/android/provider/MediaStore.java
+++ b/core/java/android/provider/MediaStore.java
@@ -1324,6 +1324,18 @@ public final class MediaStore {
}
public static final class Media implements AudioColumns {
+
+ private static final String[] EXTERNAL_PATHS;
+
+ static {
+ String secondary_storage = System.getenv("SECONDARY_STORAGE");
+ if (secondary_storage != null) {
+ EXTERNAL_PATHS = secondary_storage.split(":");
+ } else {
+ EXTERNAL_PATHS = new String[0];
+ }
+ }
+
/**
* Get the content:// style URI for the audio media table on the
* given volume.
@@ -1337,6 +1349,12 @@ public final class MediaStore {
}
public static Uri getContentUriForPath(String path) {
+ for (String ep : EXTERNAL_PATHS) {
+ if (path.startsWith(ep)) {
+ return EXTERNAL_CONTENT_URI;
+ }
+ }
+
return (path.startsWith(Environment.getExternalStorageDirectory().getPath()) ?
EXTERNAL_CONTENT_URI : INTERNAL_CONTENT_URI);
}
diff --git a/core/java/android/security/IKeystoreService.java b/core/java/android/security/IKeystoreService.java
new file mode 100644
index 0000000..a890d9b
--- /dev/null
+++ b/core/java/android/security/IKeystoreService.java
@@ -0,0 +1,542 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.security;
+
+import android.os.Binder;
+import android.os.IBinder;
+import android.os.IInterface;
+import android.os.Parcel;
+import android.os.RemoteException;
+
+/**
+ * This must be kept manually in sync with system/security/keystore until AIDL
+ * can generate both Java and C++ bindings.
+ *
+ * @hide
+ */
+public interface IKeystoreService extends IInterface {
+ public static abstract class Stub extends Binder implements IKeystoreService {
+ private static class Proxy implements IKeystoreService {
+ private final IBinder mRemote;
+
+ Proxy(IBinder remote) {
+ mRemote = remote;
+ }
+
+ public IBinder asBinder() {
+ return mRemote;
+ }
+
+ public String getInterfaceDescriptor() {
+ return DESCRIPTOR;
+ }
+
+ public int test() throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ mRemote.transact(Stub.TRANSACTION_test, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ public byte[] get(String name) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ byte[] _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(name);
+ mRemote.transact(Stub.TRANSACTION_get, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.createByteArray();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ public int insert(String name, byte[] item, int uid) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(name);
+ _data.writeByteArray(item);
+ _data.writeInt(uid);
+ mRemote.transact(Stub.TRANSACTION_insert, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ public int del(String name, int uid) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(name);
+ _data.writeInt(uid);
+ mRemote.transact(Stub.TRANSACTION_del, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ public int exist(String name, int uid) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(name);
+ _data.writeInt(uid);
+ mRemote.transact(Stub.TRANSACTION_exist, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ public String[] saw(String name, int uid) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ String[] _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(name);
+ _data.writeInt(uid);
+ mRemote.transact(Stub.TRANSACTION_saw, _data, _reply, 0);
+ _reply.readException();
+ int size = _reply.readInt();
+ _result = new String[size];
+ for (int i = 0; i < size; i++) {
+ _result[i] = _reply.readString();
+ }
+ int _ret = _reply.readInt();
+ if (_ret != 1) {
+ return null;
+ }
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ @Override
+ public int reset() throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ mRemote.transact(Stub.TRANSACTION_reset, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ public int password(String password) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(password);
+ mRemote.transact(Stub.TRANSACTION_password, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ public int lock() throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ mRemote.transact(Stub.TRANSACTION_lock, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ public int unlock(String password) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(password);
+ mRemote.transact(Stub.TRANSACTION_unlock, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ @Override
+ public int zero() throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ mRemote.transact(Stub.TRANSACTION_zero, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ public int generate(String name, int uid) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(name);
+ _data.writeInt(uid);
+ mRemote.transact(Stub.TRANSACTION_generate, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ public int import_key(String name, byte[] data, int uid) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(name);
+ _data.writeByteArray(data);
+ _data.writeInt(uid);
+ mRemote.transact(Stub.TRANSACTION_import, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ public byte[] sign(String name, byte[] data) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ byte[] _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(name);
+ _data.writeByteArray(data);
+ mRemote.transact(Stub.TRANSACTION_sign, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.createByteArray();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ public int verify(String name, byte[] data, byte[] signature) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(name);
+ _data.writeByteArray(data);
+ _data.writeByteArray(signature);
+ mRemote.transact(Stub.TRANSACTION_verify, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ public byte[] get_pubkey(String name) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ byte[] _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(name);
+ mRemote.transact(Stub.TRANSACTION_get_pubkey, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.createByteArray();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ public int del_key(String name, int uid) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(name);
+ _data.writeInt(uid);
+ mRemote.transact(Stub.TRANSACTION_del_key, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ public int grant(String name, int granteeUid) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(name);
+ _data.writeInt(granteeUid);
+ mRemote.transact(Stub.TRANSACTION_grant, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ public int ungrant(String name, int granteeUid) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(name);
+ _data.writeInt(granteeUid);
+ mRemote.transact(Stub.TRANSACTION_ungrant, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ @Override
+ public long getmtime(String name) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ long _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(name);
+ mRemote.transact(Stub.TRANSACTION_getmtime, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readLong();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
+ @Override
+ public int duplicate(String srcKey, int srcUid, String destKey, int destUid)
+ throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(srcKey);
+ _data.writeInt(srcUid);
+ _data.writeString(destKey);
+ _data.writeInt(destUid);
+ mRemote.transact(Stub.TRANSACTION_duplicate, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+ }
+
+ private static final String DESCRIPTOR = "android.security.keystore";
+
+ static final int TRANSACTION_test = IBinder.FIRST_CALL_TRANSACTION + 0;
+ static final int TRANSACTION_get = IBinder.FIRST_CALL_TRANSACTION + 1;
+ static final int TRANSACTION_insert = IBinder.FIRST_CALL_TRANSACTION + 2;
+ static final int TRANSACTION_del = IBinder.FIRST_CALL_TRANSACTION + 3;
+ static final int TRANSACTION_exist = IBinder.FIRST_CALL_TRANSACTION + 4;
+ static final int TRANSACTION_saw = IBinder.FIRST_CALL_TRANSACTION + 5;
+ static final int TRANSACTION_reset = IBinder.FIRST_CALL_TRANSACTION + 6;
+ static final int TRANSACTION_password = IBinder.FIRST_CALL_TRANSACTION + 7;
+ static final int TRANSACTION_lock = IBinder.FIRST_CALL_TRANSACTION + 8;
+ static final int TRANSACTION_unlock = IBinder.FIRST_CALL_TRANSACTION + 9;
+ static final int TRANSACTION_zero = IBinder.FIRST_CALL_TRANSACTION + 10;
+ static final int TRANSACTION_generate = IBinder.FIRST_CALL_TRANSACTION + 11;
+ static final int TRANSACTION_import = IBinder.FIRST_CALL_TRANSACTION + 12;
+ static final int TRANSACTION_sign = IBinder.FIRST_CALL_TRANSACTION + 13;
+ static final int TRANSACTION_verify = IBinder.FIRST_CALL_TRANSACTION + 14;
+ static final int TRANSACTION_get_pubkey = IBinder.FIRST_CALL_TRANSACTION + 15;
+ static final int TRANSACTION_del_key = IBinder.FIRST_CALL_TRANSACTION + 16;
+ static final int TRANSACTION_grant = IBinder.FIRST_CALL_TRANSACTION + 17;
+ static final int TRANSACTION_ungrant = IBinder.FIRST_CALL_TRANSACTION + 18;
+ static final int TRANSACTION_getmtime = IBinder.FIRST_CALL_TRANSACTION + 19;
+ static final int TRANSACTION_duplicate = IBinder.FIRST_CALL_TRANSACTION + 20;
+
+ /**
+ * Cast an IBinder object into an IKeystoreService interface, generating
+ * a proxy if needed.
+ */
+ public static IKeystoreService asInterface(IBinder obj) {
+ if (obj == null) {
+ return null;
+ }
+ IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
+ if (iin != null && iin instanceof IKeystoreService) {
+ return (IKeystoreService) iin;
+ }
+ return new IKeystoreService.Stub.Proxy(obj);
+ }
+
+ /** Construct the stub at attach it to the interface. */
+ public Stub() {
+ attachInterface(this, DESCRIPTOR);
+ }
+
+ public IBinder asBinder() {
+ return this;
+ }
+
+ @Override
+ public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
+ throws RemoteException {
+ switch (code) {
+ case INTERFACE_TRANSACTION: {
+ reply.writeString(DESCRIPTOR);
+ return true;
+ }
+ case TRANSACTION_test: {
+ data.enforceInterface(DESCRIPTOR);
+ int resultCode = test();
+ reply.writeNoException();
+ reply.writeInt(resultCode);
+ return true;
+ }
+ }
+ return super.onTransact(code, data, reply, flags);
+ }
+ }
+
+ public int test() throws RemoteException;
+
+ public byte[] get(String name) throws RemoteException;
+
+ public int insert(String name, byte[] item, int uid) throws RemoteException;
+
+ public int del(String name, int uid) throws RemoteException;
+
+ public int exist(String name, int uid) throws RemoteException;
+
+ public String[] saw(String name, int uid) throws RemoteException;
+
+ public int reset() throws RemoteException;
+
+ public int password(String password) throws RemoteException;
+
+ public int lock() throws RemoteException;
+
+ public int unlock(String password) throws RemoteException;
+
+ public int zero() throws RemoteException;
+
+ public int generate(String name, int uid) throws RemoteException;
+
+ public int import_key(String name, byte[] data, int uid) throws RemoteException;
+
+ public byte[] sign(String name, byte[] data) throws RemoteException;
+
+ public int verify(String name, byte[] data, byte[] signature) throws RemoteException;
+
+ public byte[] get_pubkey(String name) throws RemoteException;
+
+ public int del_key(String name, int uid) throws RemoteException;
+
+ public int grant(String name, int granteeUid) throws RemoteException;
+
+ public int ungrant(String name, int granteeUid) throws RemoteException;
+
+ public long getmtime(String name) throws RemoteException;
+
+ public int duplicate(String srcKey, int srcUid, String destKey, int destUid)
+ throws RemoteException;
+}
diff --git a/core/java/android/server/package.html b/core/java/android/server/package.html
index c9f96a6..c9f96a6 100755..100644
--- a/core/java/android/server/package.html
+++ b/core/java/android/server/package.html
diff --git a/core/java/android/speech/tts/ITextToSpeechCallback.aidl b/core/java/android/speech/tts/ITextToSpeechCallback.aidl
index f0287d4..f0287d4 100755..100644
--- a/core/java/android/speech/tts/ITextToSpeechCallback.aidl
+++ b/core/java/android/speech/tts/ITextToSpeechCallback.aidl
diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java
index 5e367cb..5e367cb 100755..100644
--- a/core/java/android/speech/tts/TextToSpeech.java
+++ b/core/java/android/speech/tts/TextToSpeech.java
diff --git a/core/java/android/text/format/DateFormat.java b/core/java/android/text/format/DateFormat.java
index 3c984b5..50b1a29 100644
--- a/core/java/android/text/format/DateFormat.java
+++ b/core/java/android/text/format/DateFormat.java
@@ -31,179 +31,85 @@ import java.util.Locale;
import java.util.TimeZone;
import java.text.SimpleDateFormat;
+import libcore.icu.LocaleData;
+
/**
- Utility class for producing strings with formatted date/time.
-
- <p>
- Most callers should avoid supplying their own format strings to this
- class' {@code format} methods and rely on the correctly localized ones
- supplied by the system. This class' factory methods return
- appropriately-localized {@link java.text.DateFormat} instances, suitable
- for both formatting and parsing dates. For the canonical documentation
- of format strings, see {@link java.text.SimpleDateFormat}.
- </p>
- <p>
- The format methods in this class takes as inputs a format string and a representation of a date/time.
- The format string controls how the output is generated.
- This class only supports a subset of the full Unicode specification.
- Use {@link java.text.SimpleDateFormat} if you need more.
- Formatting characters may be repeated in order to get more detailed representations
- of that field. For instance, the format character &apos;M&apos; is used to
- represent the month. Depending on how many times that character is repeated
- you get a different representation.
- </p>
- <p>
- For the month of September:<br/>
- M -&gt; 9<br/>
- MM -&gt; 09<br/>
- MMM -&gt; Sep<br/>
- MMMM -&gt; September
- </p>
- <p>
- The effects of the duplication vary depending on the nature of the field.
- See the notes on the individual field formatters for details. For purely numeric
- fields such as <code>HOUR</code> adding more copies of the designator will
- zero-pad the value to that number of characters.
- </p>
- <p>
- For 7 minutes past the hour:<br/>
- m -&gt; 7<br/>
- mm -&gt; 07<br/>
- mmm -&gt; 007<br/>
- mmmm -&gt; 0007
- </p>
- <p>
- Examples for April 6, 1970 at 3:23am:<br/>
- &quot;MM/dd/yy h:mmaa&quot; -&gt; &quot;04/06/70 3:23am&quot<br/>
- &quot;MMM dd, yyyy h:mmaa&quot; -&gt; &quot;Apr 6, 1970 3:23am&quot<br/>
- &quot;MMMM dd, yyyy h:mmaa&quot; -&gt; &quot;April 6, 1970 3:23am&quot<br/>
- &quot;E, MMMM dd, yyyy h:mmaa&quot; -&gt; &quot;Mon, April 6, 1970 3:23am&<br/>
- &quot;EEEE, MMMM dd, yyyy h:mmaa&quot; -&gt; &quot;Monday, April 6, 1970 3:23am&quot;<br/>
- &quot;&apos;Noteworthy day: &apos;M/d/yy&quot; -&gt; &quot;Noteworthy day: 4/6/70&quot;
+ * Utility class for producing strings with formatted date/time.
+ *
+ * <p>Most callers should avoid supplying their own format strings to this
+ * class' {@code format} methods and rely on the correctly localized ones
+ * supplied by the system. This class' factory methods return
+ * appropriately-localized {@link java.text.DateFormat} instances, suitable
+ * for both formatting and parsing dates. For the canonical documentation
+ * of format strings, see {@link java.text.SimpleDateFormat}.
+ *
+ * <p>The {@code format} methods in this class implement a subset of Unicode
+ * <a href="http://www.unicode.org/reports/tr35/#Date_Format_Patterns">UTS #35</a> patterns.
+ * The subset currently supported by this class includes the following format characters:
+ * {@code acdEHhLKkLMmsyz}. Up to API level 17, only {@code adEhkMmszy} were supported.
+ * Note that this class incorrectly implements {@code k} as if it were {@code H} for backwards
+ * compatibility.
+ *
+ * <p>See {@link java.text.SimpleDateFormat} for more documentation
+ * about patterns, or if you need a more complete or correct implementation.
+ * Note that the non-{@code format} methods in this class are implemented by
+ * {@code SimpleDateFormat}.
*/
-
public class DateFormat {
- /**
- Text in the format string that should be copied verbatim rather that
- interpreted as formatting codes must be surrounded by the <code>QUOTE</code>
- character. If you need to embed a literal <code>QUOTE</code> character in
- the output text then use two in a row.
- */
+ /** @deprecated Use a literal {@code '} instead. */
+ @Deprecated
public static final char QUOTE = '\'';
-
- /**
- This designator indicates whether the <code>HOUR</code> field is before
- or after noon. The output is lower-case.
-
- Examples:
- a -> a or p
- aa -> am or pm
- */
+
+ /** @deprecated Use a literal {@code 'a'} instead. */
+ @Deprecated
public static final char AM_PM = 'a';
- /**
- This designator indicates whether the <code>HOUR</code> field is before
- or after noon. The output is capitalized.
-
- Examples:
- A -> A or P
- AA -> AM or PM
- */
+ /** @deprecated Use a literal {@code 'a'} instead; 'A' was always equivalent to 'a'. */
+ @Deprecated
public static final char CAPITAL_AM_PM = 'A';
- /**
- This designator indicates the day of the month.
-
- Examples for the 9th of the month:
- d -> 9
- dd -> 09
- */
+ /** @deprecated Use a literal {@code 'd'} instead. */
+ @Deprecated
public static final char DATE = 'd';
- /**
- This designator indicates the name of the day of the week.
-
- Examples for Sunday:
- E -> Sun
- EEEE -> Sunday
- */
+ /** @deprecated Use a literal {@code 'E'} instead. */
+ @Deprecated
public static final char DAY = 'E';
- /**
- This designator indicates the hour of the day in 12 hour format.
-
- Examples for 3pm:
- h -> 3
- hh -> 03
- */
+ /** @deprecated Use a literal {@code 'h'} instead. */
+ @Deprecated
public static final char HOUR = 'h';
/**
- This designator indicates the hour of the day in 24 hour format.
-
- Example for 3pm:
- k -> 15
-
- Examples for midnight:
- k -> 0
- kk -> 00
+ * @deprecated Use a literal {@code 'H'} (for compatibility with {@link SimpleDateFormat}
+ * and Unicode) or {@code 'k'} (for compatibility with Android releases up to and including
+ * Jelly Bean MR-1) instead. Note that the two are incompatible.
*/
+ @Deprecated
public static final char HOUR_OF_DAY = 'k';
- /**
- This designator indicates the minute of the hour.
-
- Examples for 7 minutes past the hour:
- m -> 7
- mm -> 07
- */
+ /** @deprecated Use a literal {@code 'm'} instead. */
+ @Deprecated
public static final char MINUTE = 'm';
- /**
- This designator indicates the month of the year. See also
- {@link #STANDALONE_MONTH}.
-
- Examples for September:
- M -> 9
- MM -> 09
- MMM -> Sep
- MMMM -> September
- */
+ /** @deprecated Use a literal {@code 'M'} instead. */
+ @Deprecated
public static final char MONTH = 'M';
- /**
- This designator indicates the standalone month of the year,
- necessary in some format strings in some languages. For
- example, Russian distinguishes between the "June" in
- "June" and that in "June 2010".
- */
+ /** @deprecated Use a literal {@code 'L'} instead. */
+ @Deprecated
public static final char STANDALONE_MONTH = 'L';
- /**
- This designator indicates the seconds of the minute.
-
- Examples for 7 seconds past the minute:
- s -> 7
- ss -> 07
- */
+ /** @deprecated Use a literal {@code 's'} instead. */
+ @Deprecated
public static final char SECONDS = 's';
- /**
- This designator indicates the offset of the timezone from GMT.
-
- Example for US/Pacific timezone:
- z -> -0800
- zz -> PST
- */
+ /** @deprecated Use a literal {@code 'z'} instead. */
+ @Deprecated
public static final char TIME_ZONE = 'z';
- /**
- This designator indicates the year.
-
- Examples for 2006
- y -> 06
- yyyy -> 2006
- */
+ /** @deprecated Use a literal {@code 'y'} instead. */
+ @Deprecated
public static final char YEAR = 'y';
@@ -231,8 +137,7 @@ public class DateFormat {
}
java.text.DateFormat natural =
- java.text.DateFormat.getTimeInstance(
- java.text.DateFormat.LONG, locale);
+ java.text.DateFormat.getTimeInstance(java.text.DateFormat.LONG, locale);
if (natural instanceof SimpleDateFormat) {
SimpleDateFormat sdf = (SimpleDateFormat) natural;
@@ -265,20 +170,22 @@ public class DateFormat {
* @return the {@link java.text.DateFormat} object that properly formats the time.
*/
public static java.text.DateFormat getTimeFormat(Context context) {
- boolean b24 = is24HourFormat(context);
- int res;
-
- if (b24) {
- res = R.string.twenty_four_hour_time_format;
- } else {
- res = R.string.twelve_hour_time_format;
- }
+ return new java.text.SimpleDateFormat(getTimeFormatString(context));
+ }
- return new java.text.SimpleDateFormat(context.getString(res));
+ /**
+ * Returns a String pattern that can be used to format the time according
+ * to the current locale and the user's 12-/24-hour clock preference.
+ * @param context the application context
+ * @hide
+ */
+ public static String getTimeFormatString(Context context) {
+ LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale);
+ return is24HourFormat(context) ? d.timeFormat24 : d.timeFormat12;
}
/**
- * Returns a {@link java.text.DateFormat} object that can format the date
+ * Returns a {@link java.text.DateFormat} object that can format the date
* in short form (such as 12/31/1999) according
* to the current locale and the user's date-order preference.
* @param context the application context
@@ -303,7 +210,6 @@ public class DateFormat {
public static java.text.DateFormat getDateFormatForSetting(Context context,
String value) {
String format = getDateFormatStringForSetting(context, value);
-
return new java.text.SimpleDateFormat(format);
}
@@ -347,10 +253,10 @@ public class DateFormat {
value = context.getString(R.string.numeric_date_format);
return value;
}
-
+
/**
* Returns a {@link java.text.DateFormat} object that can format the date
- * in long form (such as December 31, 1999) for the current locale.
+ * in long form (such as {@code Monday, January 3, 2000}) for the current locale.
* @param context the application context
* @return the {@link java.text.DateFormat} object that formats the date in long form.
*/
@@ -360,7 +266,7 @@ public class DateFormat {
/**
* Returns a {@link java.text.DateFormat} object that can format the date
- * in medium form (such as Dec. 31, 1999) for the current locale.
+ * in medium form (such as {@code Jan 3, 2000}) for the current locale.
* @param context the application context
* @return the {@link java.text.DateFormat} object that formats the date in long form.
*/
@@ -370,13 +276,13 @@ public class DateFormat {
/**
* Gets the current date format stored as a char array. The array will contain
- * 3 elements ({@link #DATE}, {@link #MONTH}, and {@link #YEAR}) in the order
+ * 3 elements ({@link #DATE}, {@link #MONTH}, and {@link #YEAR}) in the order
* specified by the user's format preference. Note that this order is
* only appropriate for all-numeric dates; spelled-out (MEDIUM and LONG)
* dates will generally contain other punctuation, spaces, or words,
* not just the day, month, and year, and not necessarily in the same
* order returned here.
- */
+ */
public static char[] getDateFormatOrder(Context context) {
char[] order = new char[] {DATE, MONTH, YEAR};
String value = getDateFormatString(context);
@@ -406,7 +312,7 @@ public class DateFormat {
}
return order;
}
-
+
private static String getDateFormatString(Context context) {
String value = Settings.System.getString(context.getContentResolver(),
Settings.System.DATE_FORMAT);
@@ -415,7 +321,7 @@ public class DateFormat {
}
/**
- * Given a format string and a time in milliseconds since Jan 1, 1970 GMT, returns a
+ * Given a format string and a time in milliseconds since Jan 1, 1970 GMT, returns a
* CharSequence containing the requested date.
* @param inFormat the format string, as described in {@link android.text.format.DateFormat}
* @param inTimeInMillis in milliseconds since Jan 1, 1970 GMT
@@ -433,22 +339,20 @@ public class DateFormat {
* @return a {@link CharSequence} containing the requested text
*/
public static CharSequence format(CharSequence inFormat, Date inDate) {
- Calendar c = new GregorianCalendar();
-
+ Calendar c = new GregorianCalendar();
c.setTime(inDate);
-
return format(inFormat, c);
}
/**
* Indicates whether the specified format string contains seconds.
- *
+ *
* Always returns false if the input format is null.
- *
+ *
* @param inFormat the format string, as described in {@link android.text.format.DateFormat}
- *
+ *
* @return true if the format string contains {@link #SECONDS}, false otherwise
- *
+ *
* @hide
*/
public static boolean hasSeconds(CharSequence inFormat) {
@@ -503,24 +407,23 @@ public class DateFormat {
}
/**
- * Given a format string and a {@link java.util.Calendar} object, returns a CharSequence
+ * Given a format string and a {@link java.util.Calendar} object, returns a CharSequence
* containing the requested date.
* @param inFormat the format string, as described in {@link android.text.format.DateFormat}
* @param inDate the date to format
* @return a {@link CharSequence} containing the requested text
*/
public static CharSequence format(CharSequence inFormat, Calendar inDate) {
- SpannableStringBuilder s = new SpannableStringBuilder(inFormat);
- int c;
- int count;
+ SpannableStringBuilder s = new SpannableStringBuilder(inFormat);
+ int count;
+
+ LocaleData localeData = LocaleData.get(Locale.getDefault());
int len = inFormat.length();
for (int i = 0; i < len; i += count) {
- int temp;
-
count = 1;
- c = s.charAt(i);
+ int c = s.charAt(i);
if (c == QUOTE) {
count = appendQuotedText(s, i, len);
@@ -533,102 +436,105 @@ public class DateFormat {
}
String replacement;
-
switch (c) {
- case AM_PM:
- replacement = DateUtils.getAMPMString(inDate.get(Calendar.AM_PM));
+ case 'A':
+ case 'a':
+ replacement = localeData.amPm[inDate.get(Calendar.AM_PM) - Calendar.AM];
break;
-
- case CAPITAL_AM_PM:
- //FIXME: this is the same as AM_PM? no capital?
- replacement = DateUtils.getAMPMString(inDate.get(Calendar.AM_PM));
- break;
-
- case DATE:
+ case 'd':
replacement = zeroPad(inDate.get(Calendar.DATE), count);
break;
-
- case DAY:
- temp = inDate.get(Calendar.DAY_OF_WEEK);
- replacement = DateUtils.getDayOfWeekString(temp,
- count < 4 ?
- DateUtils.LENGTH_MEDIUM :
- DateUtils.LENGTH_LONG);
+ case 'c':
+ case 'E':
+ replacement = getDayOfWeekString(localeData,
+ inDate.get(Calendar.DAY_OF_WEEK), count, c);
break;
-
- case HOUR:
- temp = inDate.get(Calendar.HOUR);
-
- if (0 == temp)
- temp = 12;
-
- replacement = zeroPad(temp, count);
+ case 'K': // hour in am/pm (0-11)
+ case 'h': // hour in am/pm (1-12)
+ {
+ int hour = inDate.get(Calendar.HOUR);
+ if (c == 'h' && hour == 0) {
+ hour = 12;
+ }
+ replacement = zeroPad(hour, count);
+ }
break;
-
- case HOUR_OF_DAY:
- replacement = zeroPad(inDate.get(Calendar.HOUR_OF_DAY), count);
+ case 'H': // hour in day (0-23)
+ case 'k': // hour in day (1-24) [but see note below]
+ {
+ int hour = inDate.get(Calendar.HOUR_OF_DAY);
+ // Historically on Android 'k' was interpreted as 'H', which wasn't
+ // implemented, so pretty much all callers that want to format 24-hour
+ // times are abusing 'k'. http://b/8359981.
+ if (false && c == 'k' && hour == 0) {
+ hour = 24;
+ }
+ replacement = zeroPad(hour, count);
+ }
break;
-
- case MINUTE:
- replacement = zeroPad(inDate.get(Calendar.MINUTE), count);
+ case 'L':
+ case 'M':
+ replacement = getMonthString(localeData,
+ inDate.get(Calendar.MONTH), count, c);
break;
-
- case MONTH:
- case STANDALONE_MONTH:
- replacement = getMonthString(inDate, count, c);
+ case 'm':
+ replacement = zeroPad(inDate.get(Calendar.MINUTE), count);
break;
-
- case SECONDS:
+ case 's':
replacement = zeroPad(inDate.get(Calendar.SECOND), count);
break;
-
- case TIME_ZONE:
- replacement = getTimeZoneString(inDate, count);
+ case 'y':
+ replacement = getYearString(inDate.get(Calendar.YEAR), count);
break;
-
- case YEAR:
- replacement = getYearString(inDate, count);
+ case 'z':
+ replacement = getTimeZoneString(inDate, count);
break;
-
default:
replacement = null;
break;
}
-
+
if (replacement != null) {
s.replace(i, i + count, replacement);
count = replacement.length(); // CARE: count is used in the for loop above
len = s.length();
}
}
-
- if (inFormat instanceof Spanned)
+
+ if (inFormat instanceof Spanned) {
return new SpannedString(s);
- else
+ } else {
return s.toString();
+ }
}
-
- private static String getMonthString(Calendar inDate, int count, int kind) {
- boolean standalone = (kind == STANDALONE_MONTH);
- int month = inDate.get(Calendar.MONTH);
-
- if (count >= 4) {
- return standalone
- ? DateUtils.getStandaloneMonthString(month, DateUtils.LENGTH_LONG)
- : DateUtils.getMonthString(month, DateUtils.LENGTH_LONG);
+
+ private static String getDayOfWeekString(LocaleData ld, int day, int count, int kind) {
+ boolean standalone = (kind == 'c');
+ if (count == 5) {
+ return standalone ? ld.tinyStandAloneWeekdayNames[day] : ld.tinyWeekdayNames[day];
+ } else if (count == 4) {
+ return standalone ? ld.longStandAloneWeekdayNames[day] : ld.longWeekdayNames[day];
+ } else {
+ return standalone ? ld.shortStandAloneWeekdayNames[day] : ld.shortWeekdayNames[day];
+ }
+ }
+
+ private static String getMonthString(LocaleData ld, int month, int count, int kind) {
+ boolean standalone = (kind == 'L');
+ if (count == 5) {
+ return standalone ? ld.tinyStandAloneMonthNames[month] : ld.tinyMonthNames[month];
+ } else if (count == 4) {
+ return standalone ? ld.longStandAloneMonthNames[month] : ld.longMonthNames[month];
} else if (count == 3) {
- return standalone
- ? DateUtils.getStandaloneMonthString(month, DateUtils.LENGTH_MEDIUM)
- : DateUtils.getMonthString(month, DateUtils.LENGTH_MEDIUM);
+ return standalone ? ld.shortStandAloneMonthNames[month] : ld.shortMonthNames[month];
} else {
// Calendar.JANUARY == 0, so add 1 to month.
return zeroPad(month+1, count);
}
}
-
+
private static String getTimeZoneString(Calendar inDate, int count) {
TimeZone tz = inDate.getTimeZone();
-
if (count < 2) { // FIXME: shouldn't this be <= 2 ?
return formatZoneOffset(inDate.get(Calendar.DST_OFFSET) +
inDate.get(Calendar.ZONE_OFFSET),
@@ -657,13 +563,12 @@ public class DateFormat {
tb.append(zeroPad(minutes, 2));
return tb.toString();
}
-
- private static String getYearString(Calendar inDate, int count) {
- int year = inDate.get(Calendar.YEAR);
+
+ private static String getYearString(int year, int count) {
return (count <= 2) ? zeroPad(year % 100, 2)
: String.format(Locale.getDefault(), "%d", year);
}
-
+
private static int appendQuotedText(SpannableStringBuilder s, int i, int len) {
if (i + 1 < len && s.charAt(i + 1) == QUOTE) {
s.delete(i, i + 1);
diff --git a/core/java/android/text/format/DateUtils.java b/core/java/android/text/format/DateUtils.java
index bcce61d..5a88cf6 100644
--- a/core/java/android/text/format/DateUtils.java
+++ b/core/java/android/text/format/DateUtils.java
@@ -39,15 +39,9 @@ public class DateUtils
{
private static final Object sLock = new Object();
private static Configuration sLastConfig;
- private static java.text.DateFormat sStatusTimeFormat;
private static String sElapsedFormatMMSS;
private static String sElapsedFormatHMMSS;
- private static final String FAST_FORMAT_HMMSS = "%1$d:%2$02d:%3$02d";
- private static final String FAST_FORMAT_MMSS = "%1$02d:%2$02d";
- private static final char TIME_SEPARATOR = ':';
-
-
public static final long SECOND_IN_MILLIS = 1000;
public static final long MINUTE_IN_MILLIS = SECOND_IN_MILLIS * 60;
public static final long HOUR_IN_MILLIS = MINUTE_IN_MILLIS * 60;
@@ -100,14 +94,14 @@ public class DateUtils
// translated.
/**
* This is not actually the preferred 24-hour date format in all locales.
- * @deprecated use {@link java.text.SimpleDateFormat} instead.
+ * @deprecated Use {@link java.text.SimpleDateFormat} instead.
*/
@Deprecated
public static final String HOUR_MINUTE_24 = "%H:%M";
public static final String MONTH_FORMAT = "%B";
/**
* This is not actually a useful month name in all locales.
- * @deprecated use {@link java.text.SimpleDateFormat} instead.
+ * @deprecated Use {@link java.text.SimpleDateFormat} instead.
*/
@Deprecated
public static final String ABBREV_MONTH_FORMAT = "%b";
@@ -123,7 +117,7 @@ public class DateUtils
// The index is constructed from a bit-wise OR of the boolean values:
// {showTime, showYear, showWeekDay}. For example, if showYear and
// showWeekDay are both true, then the index would be 3.
- /** @deprecated do not use. */
+ /** @deprecated Do not use. */
public static final int sameYearTable[] = {
com.android.internal.R.string.same_year_md1_md2,
com.android.internal.R.string.same_year_wday1_md1_wday2_md2,
@@ -150,7 +144,7 @@ public class DateUtils
// The index is constructed from a bit-wise OR of the boolean values:
// {showTime, showYear, showWeekDay}. For example, if showYear and
// showWeekDay are both true, then the index would be 3.
- /** @deprecated do not use. */
+ /** @deprecated Do not use. */
public static final int sameMonthTable[] = {
com.android.internal.R.string.same_month_md1_md2,
com.android.internal.R.string.same_month_wday1_md1_wday2_md2,
@@ -177,7 +171,7 @@ public class DateUtils
*
* @more <p>
* e.g. "Sunday" or "January"
- * @deprecated use {@link java.text.SimpleDateFormat} instead.
+ * @deprecated Use {@link java.text.SimpleDateFormat} instead.
*/
@Deprecated
public static final int LENGTH_LONG = 10;
@@ -188,7 +182,7 @@ public class DateUtils
*
* @more <p>
* e.g. "Sun" or "Jan"
- * @deprecated use {@link java.text.SimpleDateFormat} instead.
+ * @deprecated Use {@link java.text.SimpleDateFormat} instead.
*/
@Deprecated
public static final int LENGTH_MEDIUM = 20;
@@ -200,7 +194,7 @@ public class DateUtils
* <p>e.g. "Su" or "Jan"
* <p>In most languages, the results returned for LENGTH_SHORT will be the same as
* the results returned for {@link #LENGTH_MEDIUM}.
- * @deprecated use {@link java.text.SimpleDateFormat} instead.
+ * @deprecated Use {@link java.text.SimpleDateFormat} instead.
*/
@Deprecated
public static final int LENGTH_SHORT = 30;
@@ -209,7 +203,7 @@ public class DateUtils
* Request an even shorter abbreviated version of the name.
* Do not use this. Currently this will always return the same result
* as {@link #LENGTH_SHORT}.
- * @deprecated use {@link java.text.SimpleDateFormat} instead.
+ * @deprecated Use {@link java.text.SimpleDateFormat} instead.
*/
@Deprecated
public static final int LENGTH_SHORTER = 40;
@@ -221,7 +215,7 @@ public class DateUtils
* <p>e.g. "S", "T", "T" or "J"
* <p>In some languages, the results returned for LENGTH_SHORTEST will be the same as
* the results returned for {@link #LENGTH_SHORT}.
- * @deprecated use {@link java.text.SimpleDateFormat} instead.
+ * @deprecated Use {@link java.text.SimpleDateFormat} instead.
*/
@Deprecated
public static final int LENGTH_SHORTEST = 50;
@@ -237,7 +231,7 @@ public class DateUtils
* Undefined lengths will return {@link #LENGTH_MEDIUM}
* but may return something different in the future.
* @throws IndexOutOfBoundsException if the dayOfWeek is out of bounds.
- * @deprecated use {@link java.text.SimpleDateFormat} instead.
+ * @deprecated Use {@link java.text.SimpleDateFormat} instead.
*/
@Deprecated
public static String getDayOfWeekString(int dayOfWeek, int abbrev) {
@@ -259,7 +253,7 @@ public class DateUtils
* @param ampm Either {@link Calendar#AM Calendar.AM} or {@link Calendar#PM Calendar.PM}.
* @throws IndexOutOfBoundsException if the ampm is out of bounds.
* @return Localized version of "AM" or "PM".
- * @deprecated use {@link java.text.SimpleDateFormat} instead.
+ * @deprecated Use {@link java.text.SimpleDateFormat} instead.
*/
@Deprecated
public static String getAMPMString(int ampm) {
@@ -275,14 +269,10 @@ public class DateUtils
* Undefined lengths will return {@link #LENGTH_MEDIUM}
* but may return something different in the future.
* @return Localized month of the year.
- * @deprecated use {@link java.text.SimpleDateFormat} instead.
+ * @deprecated Use {@link java.text.SimpleDateFormat} instead.
*/
@Deprecated
public static String getMonthString(int month, int abbrev) {
- // Note that here we use d.shortMonthNames for MEDIUM, SHORT and SHORTER.
- // This is a shortcut to not spam the translators with too many variations
- // of the same string. If we find that in a language the distinction
- // is necessary, we can can add more without changing this API.
LocaleData d = LocaleData.get(Locale.getDefault());
String[] names;
switch (abbrev) {
@@ -297,41 +287,6 @@ public class DateUtils
}
/**
- * Return a localized string for the month of the year, for
- * contexts where the month is not formatted together with
- * a day of the month.
- *
- * @param month One of {@link Calendar#JANUARY Calendar.JANUARY},
- * {@link Calendar#FEBRUARY Calendar.FEBRUARY}, etc.
- * @param abbrev One of {@link #LENGTH_LONG}, {@link #LENGTH_MEDIUM},
- * or {@link #LENGTH_SHORTEST}.
- * Undefined lengths will return {@link #LENGTH_MEDIUM}
- * but may return something different in the future.
- * @return Localized month of the year.
- * @hide Pending API council approval
- * @deprecated use {@link java.text.SimpleDateFormat} instead.
- */
- @Deprecated
- public static String getStandaloneMonthString(int month, int abbrev) {
- // Note that here we use d.shortMonthNames for MEDIUM, SHORT and SHORTER.
- // This is a shortcut to not spam the translators with too many variations
- // of the same string. If we find that in a language the distinction
- // is necessary, we can can add more without changing this API.
- LocaleData d = LocaleData.get(Locale.getDefault());
- String[] names;
- switch (abbrev) {
- case LENGTH_LONG: names = d.longStandAloneMonthNames;
- break;
- case LENGTH_MEDIUM: names = d.shortMonthNames; break;
- case LENGTH_SHORT: names = d.shortMonthNames; break;
- case LENGTH_SHORTER: names = d.shortMonthNames; break;
- case LENGTH_SHORTEST: names = d.tinyMonthNames; break;
- default: names = d.shortMonthNames; break;
- }
- return names[month];
- }
-
- /**
* Returns a string describing the elapsed time since startTime.
* @param startTime some time in the past.
* @return a String object containing the elapsed time.
@@ -434,20 +389,7 @@ public class DateUtils
}
}
} else if (duration < WEEK_IN_MILLIS && minResolution < WEEK_IN_MILLIS) {
- count = getNumberOfDaysPassed(time, now);
- if (past) {
- if (abbrevRelative) {
- resId = com.android.internal.R.plurals.abbrev_num_days_ago;
- } else {
- resId = com.android.internal.R.plurals.num_days_ago;
- }
- } else {
- if (abbrevRelative) {
- resId = com.android.internal.R.plurals.abbrev_in_num_days;
- } else {
- resId = com.android.internal.R.plurals.in_num_days;
- }
- }
+ return getRelativeDayString(r, time, now);
} else {
// We know that we won't be showing the time, so it is safe to pass
// in a null context.
@@ -459,24 +401,6 @@ public class DateUtils
}
/**
- * Returns the number of days passed between two dates.
- *
- * @param date1 first date
- * @param date2 second date
- * @return number of days passed between to dates.
- */
- private synchronized static long getNumberOfDaysPassed(long date1, long date2) {
- if (sThenTime == null) {
- sThenTime = new Time();
- }
- sThenTime.set(date1);
- int day1 = Time.getJulianDay(date1, sThenTime.gmtoff);
- sThenTime.set(date2);
- int day2 = Time.getJulianDay(date2, sThenTime.gmtoff);
- return Math.abs(day2 - day1);
- }
-
- /**
* Return string describing the elapsed time since startTime formatted like
* "[relative time/date], [time]".
* <p>
@@ -534,28 +458,29 @@ public class DateUtils
* today this function returns "Today", if the day was a week ago it returns "7 days ago", and
* if the day is in 2 weeks it returns "in 14 days".
*
- * @param r the resources to get the strings from
+ * @param r the resources
* @param day the relative day to describe in UTC milliseconds
* @param today the current time in UTC milliseconds
- * @return a formatting string
*/
private static final String getRelativeDayString(Resources r, long day, long today) {
+ Locale locale = r.getConfiguration().locale;
+ if (locale == null) {
+ locale = Locale.getDefault();
+ }
+
+ // TODO: use TimeZone.getOffset instead.
Time startTime = new Time();
startTime.set(day);
+ int startDay = Time.getJulianDay(day, startTime.gmtoff);
+
Time currentTime = new Time();
currentTime.set(today);
-
- int startDay = Time.getJulianDay(day, startTime.gmtoff);
int currentDay = Time.getJulianDay(today, currentTime.gmtoff);
int days = Math.abs(currentDay - startDay);
boolean past = (today > day);
// TODO: some locales name other days too, such as de_DE's "Vorgestern" (today - 2).
- Locale locale = r.getConfiguration().locale;
- if (locale == null) {
- locale = Locale.getDefault();
- }
if (days == 1) {
if (past) {
return LocaleData.get(locale).yesterday;
@@ -588,25 +513,12 @@ public class DateUtils
Configuration cfg = r.getConfiguration();
if (sLastConfig == null || !sLastConfig.equals(cfg)) {
sLastConfig = cfg;
- sStatusTimeFormat = java.text.DateFormat.getTimeInstance(java.text.DateFormat.SHORT);
sElapsedFormatMMSS = r.getString(com.android.internal.R.string.elapsed_time_short_format_mm_ss);
sElapsedFormatHMMSS = r.getString(com.android.internal.R.string.elapsed_time_short_format_h_mm_ss);
}
}
/**
- * Format a time so it appears like it would in the status bar clock.
- * @deprecated use {@link #DateFormat.getTimeFormat(Context)} instead.
- * @hide
- */
- public static final CharSequence timeString(long millis) {
- synchronized (sLock) {
- initFormatStringsLocked();
- return sStatusTimeFormat.format(millis);
- }
- }
-
- /**
* Return given duration in a human-friendly format. For example, "4
* minutes" or "1 second". Returns only largest meaningful unit of time,
* from seconds up to hours.
@@ -640,19 +552,18 @@ public class DateUtils
}
/**
- * Formats an elapsed time in the form "MM:SS" or "H:MM:SS"
- * for display on the call-in-progress screen.
+ * Formats an elapsed time in a format like "MM:SS" or "H:MM:SS" (using a form
+ * suited to the current locale), similar to that used on the call-in-progress
+ * screen.
*
- * @param recycle {@link StringBuilder} to recycle, if possible
+ * @param recycle {@link StringBuilder} to recycle, or null to use a temporary one.
* @param elapsedSeconds the elapsed time in seconds.
*/
public static String formatElapsedTime(StringBuilder recycle, long elapsedSeconds) {
- initFormatStrings();
-
+ // Break the elapsed seconds into hours, minutes, and seconds.
long hours = 0;
long minutes = 0;
long seconds = 0;
-
if (elapsedSeconds >= 3600) {
hours = elapsedSeconds / 3600;
elapsedSeconds -= hours * 3600;
@@ -663,70 +574,23 @@ public class DateUtils
}
seconds = elapsedSeconds;
- String result;
- if (hours > 0) {
- return formatElapsedTime(recycle, sElapsedFormatHMMSS, hours, minutes, seconds);
- } else {
- return formatElapsedTime(recycle, sElapsedFormatMMSS, minutes, seconds);
- }
- }
-
- private static void append(StringBuilder sb, long value, boolean pad, char zeroDigit) {
- if (value < 10) {
- if (pad) {
- sb.append(zeroDigit);
- }
- } else {
- sb.append((char) (zeroDigit + (value / 10)));
- }
- sb.append((char) (zeroDigit + (value % 10)));
- }
-
- /**
- * Fast formatting of h:mm:ss.
- */
- private static String formatElapsedTime(StringBuilder recycle, String format, long hours,
- long minutes, long seconds) {
- if (FAST_FORMAT_HMMSS.equals(format)) {
- char zeroDigit = LocaleData.get(Locale.getDefault()).zeroDigit;
-
- StringBuilder sb = recycle;
- if (sb == null) {
- sb = new StringBuilder(8);
- } else {
- sb.setLength(0);
- }
- append(sb, hours, false, zeroDigit);
- sb.append(TIME_SEPARATOR);
- append(sb, minutes, true, zeroDigit);
- sb.append(TIME_SEPARATOR);
- append(sb, seconds, true, zeroDigit);
- return sb.toString();
+ // Create a StringBuilder if we weren't given one to recycle.
+ // TODO: if we cared, we could have a thread-local temporary StringBuilder.
+ StringBuilder sb = recycle;
+ if (sb == null) {
+ sb = new StringBuilder(8);
} else {
- return String.format(format, hours, minutes, seconds);
+ sb.setLength(0);
}
- }
- /**
- * Fast formatting of mm:ss.
- */
- private static String formatElapsedTime(StringBuilder recycle, String format, long minutes,
- long seconds) {
- if (FAST_FORMAT_MMSS.equals(format)) {
- char zeroDigit = LocaleData.get(Locale.getDefault()).zeroDigit;
-
- StringBuilder sb = recycle;
- if (sb == null) {
- sb = new StringBuilder(8);
- } else {
- sb.setLength(0);
- }
- append(sb, minutes, false, zeroDigit);
- sb.append(TIME_SEPARATOR);
- append(sb, seconds, true, zeroDigit);
- return sb.toString();
+ // Format the broken-down time in a locale-appropriate way.
+ // TODO: use icu4c when http://unicode.org/cldr/trac/ticket/3407 is fixed.
+ Formatter f = new Formatter(sb, Locale.getDefault());
+ initFormatStrings();
+ if (hours > 0) {
+ return f.format(sElapsedFormatHMMSS, hours, minutes, seconds).toString();
} else {
- return String.format(format, minutes, seconds);
+ return f.format(sElapsedFormatMMSS, minutes, seconds).toString();
}
}
@@ -768,18 +632,6 @@ public class DateUtils
}
/**
- * @hide
- * @deprecated use {@link android.text.format.Time}
- */
- public static Calendar newCalendar(boolean zulu)
- {
- if (zulu)
- return Calendar.getInstance(TimeZone.getTimeZone("GMT"));
-
- return Calendar.getInstance();
- }
-
- /**
* @return true if the supplied when is today else false
*/
public static boolean isToday(long when) {
@@ -797,127 +649,6 @@ public class DateUtils
}
/**
- * @hide
- * @deprecated use {@link android.text.format.Time}
- * Return true if this date string is local time
- */
- public static boolean isUTC(String s)
- {
- if (s.length() == 16 && s.charAt(15) == 'Z') {
- return true;
- }
- if (s.length() == 9 && s.charAt(8) == 'Z') {
- // XXX not sure if this case possible/valid
- return true;
- }
- return false;
- }
-
- /**
- * Return a string containing the date and time in RFC2445 format.
- * Ensures that the time is written in UTC. The Calendar class doesn't
- * really help out with this, so this is slower than it ought to be.
- *
- * @param cal the date and time to write
- * @hide
- * @deprecated use {@link android.text.format.Time}
- */
- public static String writeDateTime(Calendar cal)
- {
- TimeZone tz = TimeZone.getTimeZone("GMT");
- GregorianCalendar c = new GregorianCalendar(tz);
- c.setTimeInMillis(cal.getTimeInMillis());
- return writeDateTime(c, true);
- }
-
- /**
- * Return a string containing the date and time in RFC2445 format.
- *
- * @param cal the date and time to write
- * @param zulu If the calendar is in UTC, pass true, and a Z will
- * be written at the end as per RFC2445. Otherwise, the time is
- * considered in localtime.
- * @hide
- * @deprecated use {@link android.text.format.Time}
- */
- public static String writeDateTime(Calendar cal, boolean zulu)
- {
- StringBuilder sb = new StringBuilder();
- sb.ensureCapacity(16);
- if (zulu) {
- sb.setLength(16);
- sb.setCharAt(15, 'Z');
- } else {
- sb.setLength(15);
- }
- return writeDateTime(cal, sb);
- }
-
- /**
- * Return a string containing the date and time in RFC2445 format.
- *
- * @param cal the date and time to write
- * @param sb a StringBuilder to use. It is assumed that setLength
- * has already been called on sb to the appropriate length
- * which is sb.setLength(zulu ? 16 : 15)
- * @hide
- * @deprecated use {@link android.text.format.Time}
- */
- public static String writeDateTime(Calendar cal, StringBuilder sb)
- {
- int n;
-
- n = cal.get(Calendar.YEAR);
- sb.setCharAt(3, (char)('0'+n%10));
- n /= 10;
- sb.setCharAt(2, (char)('0'+n%10));
- n /= 10;
- sb.setCharAt(1, (char)('0'+n%10));
- n /= 10;
- sb.setCharAt(0, (char)('0'+n%10));
-
- n = cal.get(Calendar.MONTH) + 1;
- sb.setCharAt(5, (char)('0'+n%10));
- n /= 10;
- sb.setCharAt(4, (char)('0'+n%10));
-
- n = cal.get(Calendar.DAY_OF_MONTH);
- sb.setCharAt(7, (char)('0'+n%10));
- n /= 10;
- sb.setCharAt(6, (char)('0'+n%10));
-
- sb.setCharAt(8, 'T');
-
- n = cal.get(Calendar.HOUR_OF_DAY);
- sb.setCharAt(10, (char)('0'+n%10));
- n /= 10;
- sb.setCharAt(9, (char)('0'+n%10));
-
- n = cal.get(Calendar.MINUTE);
- sb.setCharAt(12, (char)('0'+n%10));
- n /= 10;
- sb.setCharAt(11, (char)('0'+n%10));
-
- n = cal.get(Calendar.SECOND);
- sb.setCharAt(14, (char)('0'+n%10));
- n /= 10;
- sb.setCharAt(13, (char)('0'+n%10));
-
- return sb.toString();
- }
-
- /**
- * @hide
- * @deprecated use {@link android.text.format.Time}
- */
- public static void assign(Calendar lval, Calendar rval)
- {
- // there should be a faster way.
- lval.clear();
- lval.setTimeInMillis(rval.getTimeInMillis());
- }
-
- /**
* Formats a date or a time range according to the local conventions.
* <p>
* Note that this is a convenience method. Using it involves creating an
@@ -1149,30 +880,34 @@ public class DateUtils
// computation below that'd otherwise be thrown out.
boolean isInstant = (startMillis == endMillis);
- Time startDate;
+ Calendar startCalendar, endCalendar;
+ Time startDate = new Time();
if (timeZone != null) {
- startDate = new Time(timeZone);
+ startCalendar = Calendar.getInstance(TimeZone.getTimeZone(timeZone));
} else if (useUTC) {
- startDate = new Time(Time.TIMEZONE_UTC);
+ startCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
} else {
- startDate = new Time();
+ startCalendar = Calendar.getInstance();
}
- startDate.set(startMillis);
+ startCalendar.setTimeInMillis(startMillis);
+ setTimeFromCalendar(startDate, startCalendar);
- Time endDate;
+ Time endDate = new Time();
int dayDistance;
if (isInstant) {
endDate = startDate;
dayDistance = 0;
} else {
if (timeZone != null) {
- endDate = new Time(timeZone);
+ endCalendar = Calendar.getInstance(TimeZone.getTimeZone(timeZone));
} else if (useUTC) {
- endDate = new Time(Time.TIMEZONE_UTC);
+ endCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
} else {
- endDate = new Time();
+ endCalendar = Calendar.getInstance();
}
- endDate.set(endMillis);
+ endCalendar.setTimeInMillis(endMillis);
+ setTimeFromCalendar(endDate, endCalendar);
+
int startJulianDay = Time.getJulianDay(startMillis, startDate.gmtoff);
int endJulianDay = Time.getJulianDay(endMillis, endDate.gmtoff);
dayDistance = endJulianDay - startJulianDay;
@@ -1515,6 +1250,20 @@ public class DateUtils
return formatter.format(fullFormat, timeString, startWeekDayString, dateString);
}
+ private static void setTimeFromCalendar(Time t, Calendar c) {
+ t.hour = c.get(Calendar.HOUR_OF_DAY);
+ t.minute = c.get(Calendar.MINUTE);
+ t.month = c.get(Calendar.MONTH);
+ t.monthDay = c.get(Calendar.DAY_OF_MONTH);
+ t.second = c.get(Calendar.SECOND);
+ t.weekDay = c.get(Calendar.DAY_OF_WEEK) - 1;
+ t.year = c.get(Calendar.YEAR);
+ t.yearDay = c.get(Calendar.DAY_OF_YEAR);
+ t.isDst = (c.get(Calendar.DST_OFFSET) != 0) ? 1 : 0;
+ t.gmtoff = c.get(Calendar.ZONE_OFFSET) + c.get(Calendar.DST_OFFSET);
+ t.timezone = c.getTimeZone().getID();
+ }
+
/**
* Formats a date or a time according to the local conventions. There are
* lots of options that allow the caller to control, for example, if the
diff --git a/core/java/android/text/format/Formatter.java b/core/java/android/text/format/Formatter.java
index 121c6f2..9c98b98 100644
--- a/core/java/android/text/format/Formatter.java
+++ b/core/java/android/text/format/Formatter.java
@@ -95,16 +95,12 @@ public final class Formatter {
}
/**
- * Returns a string in the canonical IP format ###.###.###.### from a packed integer containing
- * the IP address. The IP address is expected to be in little-endian format (LSB first). That
- * is, 0x01020304 will return "4.3.2.1".
+ * Returns a string in the canonical IPv4 format ###.###.###.### from a packed integer
+ * containing the IP address. The IPv4 address is expected to be in little-endian
+ * format (LSB first). That is, 0x01020304 will return "4.3.2.1".
*
- * @param ipv4Address the IP address as a packed integer with LSB first.
- * @return string with canonical IP address format.
- *
- * @deprecated this method doesn't support IPv6 addresses. Prefer {@link
- * java.net.InetAddress#getHostAddress()}, which supports both IPv4 and
- * IPv6 addresses.
+ * @deprecated Use {@link java.net.InetAddress#getHostAddress()}, which supports both IPv4 and
+ * IPv6 addresses. This method does not support IPv6 addresses.
*/
@Deprecated
public static String formatIpAddress(int ipv4Address) {
diff --git a/core/java/android/text/format/Time.java b/core/java/android/text/format/Time.java
index 200b57b..5ef86b1 100644
--- a/core/java/android/text/format/Time.java
+++ b/core/java/android/text/format/Time.java
@@ -411,6 +411,9 @@ public class Time {
* @throws android.util.TimeFormatException if s cannot be parsed.
*/
public boolean parse(String s) {
+ if (s == null) {
+ throw new NullPointerException("time string is null");
+ }
if (nativeParse(s)) {
timezone = TIMEZONE_UTC;
return true;
diff --git a/core/java/android/util/FloatMath.java b/core/java/android/util/FloatMath.java
index 9556223..0ffd5bd 100644
--- a/core/java/android/util/FloatMath.java
+++ b/core/java/android/util/FloatMath.java
@@ -17,12 +17,10 @@
package android.util;
/**
- * Math routines similar to those found in {@link java.lang.Math}. Performs
- * computations on {@code float} values directly without incurring the overhead
- * of conversions to and from {@code double}.
- *
- * <p>On one platform, {@code FloatMath.sqrt(100)} executes in one third of the
- * time required by {@code java.lang.Math.sqrt(100)}.</p>
+ * Math routines similar to those found in {@link java.lang.Math}. On
+ * versions of Android with a JIT, these are significantly slower than
+ * the equivalent {@code Math} functions, which should be used in preference
+ * to these.
*/
public class FloatMath {
diff --git a/core/java/android/util/Patterns.java b/core/java/android/util/Patterns.java
index 152827d..9522112 100644
--- a/core/java/android/util/Patterns.java
+++ b/core/java/android/util/Patterns.java
@@ -169,10 +169,10 @@ public class Patterns {
* </ul>
*/
public static final Pattern PHONE
- = Pattern.compile( // sdd = space, dot, or dash
- "(\\+[0-9]+[\\- \\.]*)?" // +<digits><sdd>*
- + "(\\([0-9]+\\)[\\- \\.]*)?" // (<digits>)<sdd>*
- + "([0-9][0-9\\- \\.][0-9\\- \\.]+[0-9])"); // <digit><digit|sdd>+<digit>
+ = Pattern.compile( // sdd = space, dot, or dash
+ "(\\+[0-9]+[\\- \\.]*)?" // +<digits><sdd>*
+ + "(\\([0-9]+\\)[\\- \\.]*)?" // (<digits>)<sdd>*
+ + "([0-9][0-9\\- \\.]+[0-9])"); // <digit><digit|sdd>+<digit>
/**
* Convenience method to take all of the non-null matching groups in a
diff --git a/core/java/android/util/PropertyValueModel.java b/core/java/android/util/PropertyValueModel.java
deleted file mode 100755
index eb9c47d..0000000
--- a/core/java/android/util/PropertyValueModel.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.util;
-
-/**
- * A value model for a {@link Property property} of a host object. This class can be used for
- * both reflective and non-reflective property implementations.
- *
- * @param <H> the host type, where the host is the object that holds this property
- * @param <T> the value type
- *
- * @see Property
- * @see ValueModel
- */
-public class PropertyValueModel<H, T> extends ValueModel<T> {
- private final H mHost;
- private final Property<H, T> mProperty;
-
- private PropertyValueModel(H host, Property<H, T> property) {
- mProperty = property;
- mHost = host;
- }
-
- /**
- * Returns the host.
- *
- * @return the host
- */
- public H getHost() {
- return mHost;
- }
-
- /**
- * Returns the property.
- *
- * @return the property
- */
- public Property<H, T> getProperty() {
- return mProperty;
- }
-
- @Override
- public Class<T> getType() {
- return mProperty.getType();
- }
-
- @Override
- public T get() {
- return mProperty.get(mHost);
- }
-
- @Override
- public void set(T value) {
- mProperty.set(mHost, value);
- }
-
- /**
- * Return an appropriate PropertyValueModel for this host and property.
- *
- * @param host the host
- * @param property the property
- * @return the value model
- */
- public static <H, T> PropertyValueModel<H, T> of(H host, Property<H, T> property) {
- return new PropertyValueModel<H, T>(host, property);
- }
-
- /**
- * Return a PropertyValueModel for this {@code host} and a
- * reflective property, constructed from this {@code propertyType} and {@code propertyName}.
- *
- * @param host
- * @param propertyType the property type
- * @param propertyName the property name
- * @return a value model with this host and a reflective property with this type and name
- *
- * @see Property#of
- */
- public static <H, T> PropertyValueModel<H, T> of(H host, Class<T> propertyType,
- String propertyName) {
- return of(host, Property.of((Class<H>) host.getClass(), propertyType, propertyName));
- }
-
- private static Class getNullaryMethodReturnType(Class c, String name) {
- try {
- return c.getMethod(name).getReturnType();
- } catch (NoSuchMethodException e) {
- return null;
- }
- }
-
- private static Class getFieldType(Class c, String name) {
- try {
- return c.getField(name).getType();
- } catch (NoSuchFieldException e) {
- return null;
- }
- }
-
- private static String capitalize(String name) {
- if (name.isEmpty()) {
- return name;
- }
- return Character.toUpperCase(name.charAt(0)) + name.substring(1);
- }
-
- /**
- * Return a PropertyValueModel for this {@code host} and and {@code propertyName}.
- *
- * @param host the host
- * @param propertyName the property name
- * @return a value model with this host and a reflective property with this name
- */
- public static PropertyValueModel of(Object host, String propertyName) {
- Class clazz = host.getClass();
- String suffix = capitalize(propertyName);
- Class propertyType = getNullaryMethodReturnType(clazz, "get" + suffix);
- if (propertyType == null) {
- propertyType = getNullaryMethodReturnType(clazz, "is" + suffix);
- }
- if (propertyType == null) {
- propertyType = getFieldType(clazz, propertyName);
- }
- if (propertyType == null) {
- throw new NoSuchPropertyException(propertyName);
- }
- return of(host, propertyType, propertyName);
- }
-}
diff --git a/core/java/android/util/ValueModel.java b/core/java/android/util/ValueModel.java
deleted file mode 100755
index 4789682..0000000
--- a/core/java/android/util/ValueModel.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.util;
-
-/**
- * A ValueModel is an abstraction for a 'slot' or place in memory in which a value
- * may be stored and retrieved. A common implementation of ValueModel is a regular property of
- * an object, whose value may be retrieved by calling the appropriate <em>getter</em>
- * method and set by calling the corresponding <em>setter</em> method.
- *
- * @param <T> the value type
- *
- * @see PropertyValueModel
- */
-public abstract class ValueModel<T> {
- /**
- * The empty model should be used in place of {@code null} to indicate that a
- * model has not been set. The empty model has no value and does nothing when it is set.
- */
- public static final ValueModel EMPTY = new ValueModel() {
- @Override
- public Class getType() {
- return Object.class;
- }
-
- @Override
- public Object get() {
- return null;
- }
-
- @Override
- public void set(Object value) {
-
- }
- };
-
- protected ValueModel() {
- }
-
- /**
- * Returns the type of this property.
- *
- * @return the property type
- */
- public abstract Class<T> getType();
-
- /**
- * Returns the value of this property.
- *
- * @return the property value
- */
- public abstract T get();
-
- /**
- * Sets the value of this property.
- *
- * @param value the new value for this property
- */
- public abstract void set(T value);
-} \ No newline at end of file
diff --git a/core/java/android/view/InputDevice.java b/core/java/android/view/InputDevice.java
index 3bb9c01..3bb9c01 100755..100644
--- a/core/java/android/view/InputDevice.java
+++ b/core/java/android/view/InputDevice.java
diff --git a/core/java/android/view/InputEvent.java b/core/java/android/view/InputEvent.java
index ef810a3..ef810a3 100755..100644
--- a/core/java/android/view/InputEvent.java
+++ b/core/java/android/view/InputEvent.java
diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
index c2a3e58..c2a3e58 100755..100644
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
diff --git a/core/java/android/view/OrientationEventListener.java b/core/java/android/view/OrientationEventListener.java
index cd48a4f..cd48a4f 100755..100644
--- a/core/java/android/view/OrientationEventListener.java
+++ b/core/java/android/view/OrientationEventListener.java
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index f05371a..0d2141f 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -8071,8 +8071,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
// in onHoverEvent.
// Note that onGenericMotionEvent will be called by default when
// onHoverEvent returns false (refer to dispatchGenericMotionEvent).
- dispatchGenericMotionEventInternal(event);
- return true;
+ return dispatchGenericMotionEventInternal(event);
}
return false;
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 58e6fbe..3b91e00 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -3751,6 +3751,12 @@ public final class ViewRootImpl implements ViewParent,
if (mView.dispatchUnhandledMove(focused, direction)) {
return EVENT_HANDLED;
}
+ } else {
+ // find the best view to give focus to in this non-touch-mode with no-focus
+ View v = focusSearch(null, direction);
+ if (v != null && v.requestFocus(direction)) {
+ return EVENT_HANDLED;
+ }
}
}
}
diff --git a/core/java/android/view/ViewStub.java b/core/java/android/view/ViewStub.java
index 69a26c2..a5dc3ae 100644
--- a/core/java/android/view/ViewStub.java
+++ b/core/java/android/view/ViewStub.java
@@ -212,7 +212,8 @@ public final class ViewStub extends View {
/**
* When visibility is set to {@link #VISIBLE} or {@link #INVISIBLE},
* {@link #inflate()} is invoked and this StubbedView is replaced in its parent
- * by the inflated layout resource.
+ * by the inflated layout resource. After that calls to this function are passed
+ * through to the inflated view.
*
* @param visibility One of {@link #VISIBLE}, {@link #INVISIBLE}, or {@link #GONE}.
*
diff --git a/core/java/android/view/WindowManager.aidl b/core/java/android/view/WindowManager.aidl
index 556dc72..556dc72 100755..100644
--- a/core/java/android/view/WindowManager.aidl
+++ b/core/java/android/view/WindowManager.aidl
diff --git a/core/java/android/view/WindowOrientationListener.java b/core/java/android/view/WindowOrientationListener.java
index 4c34dd4..bf77c67 100755..100644
--- a/core/java/android/view/WindowOrientationListener.java
+++ b/core/java/android/view/WindowOrientationListener.java
@@ -98,6 +98,7 @@ public abstract class WindowOrientationListener {
if (LOG) {
Log.d(TAG, "WindowOrientationListener enabled");
}
+ mSensorEventListener.reset();
mSensorManager.registerListener(mSensorEventListener, mSensor, mRate);
mEnabled = true;
}
diff --git a/core/java/android/view/animation/package.html b/core/java/android/view/animation/package.html
index 87c99bb..87c99bb 100755..100644
--- a/core/java/android/view/animation/package.html
+++ b/core/java/android/view/animation/package.html
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java
index 4dbca23..023dfa8 100644
--- a/core/java/android/webkit/BrowserFrame.java
+++ b/core/java/android/webkit/BrowserFrame.java
@@ -56,8 +56,8 @@ import java.util.Map;
import java.util.Set;
import org.apache.harmony.security.provider.cert.X509CertImpl;
-import org.apache.harmony.xnet.provider.jsse.OpenSSLDSAPrivateKey;
-import org.apache.harmony.xnet.provider.jsse.OpenSSLRSAPrivateKey;
+import org.apache.harmony.xnet.provider.jsse.OpenSSLKey;
+import org.apache.harmony.xnet.provider.jsse.OpenSSLKeyHolder;
class BrowserFrame extends Handler {
@@ -1129,13 +1129,10 @@ class BrowserFrame extends Handler {
if (table.IsAllowed(hostAndPort)) {
// previously allowed
PrivateKey pkey = table.PrivateKey(hostAndPort);
- if (pkey instanceof OpenSSLRSAPrivateKey) {
+ if (pkey instanceof OpenSSLKeyHolder) {
+ OpenSSLKey sslKey = ((OpenSSLKeyHolder) pkey).getOpenSSLKey();
nativeSslClientCert(handle,
- ((OpenSSLRSAPrivateKey)pkey).getPkeyContext(),
- table.CertificateChain(hostAndPort));
- } else if (pkey instanceof OpenSSLDSAPrivateKey) {
- nativeSslClientCert(handle,
- ((OpenSSLDSAPrivateKey)pkey).getPkeyContext(),
+ sslKey.getPkeyContext(),
table.CertificateChain(hostAndPort));
} else {
nativeSslClientCert(handle,
@@ -1327,7 +1324,7 @@ class BrowserFrame extends Handler {
private native void nativeSslCertErrorCancel(int handle, int certError);
native void nativeSslClientCert(int handle,
- int ctx,
+ long ctx,
byte[][] asn1DerEncodedCertificateChain);
native void nativeSslClientCert(int handle,
diff --git a/core/java/android/webkit/ClientCertRequestHandler.java b/core/java/android/webkit/ClientCertRequestHandler.java
index 6570a9b8..f5a60f6 100644
--- a/core/java/android/webkit/ClientCertRequestHandler.java
+++ b/core/java/android/webkit/ClientCertRequestHandler.java
@@ -21,8 +21,8 @@ import java.security.PrivateKey;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import org.apache.harmony.xnet.provider.jsse.NativeCrypto;
-import org.apache.harmony.xnet.provider.jsse.OpenSSLDSAPrivateKey;
-import org.apache.harmony.xnet.provider.jsse.OpenSSLRSAPrivateKey;
+import org.apache.harmony.xnet.provider.jsse.OpenSSLKey;
+import org.apache.harmony.xnet.provider.jsse.OpenSSLKeyHolder;
/**
* ClientCertRequestHandler: class responsible for handling client
@@ -56,14 +56,11 @@ public final class ClientCertRequestHandler extends Handler {
byte[][] chainBytes = NativeCrypto.encodeCertificates(chain);
mTable.Allow(mHostAndPort, privateKey, chainBytes);
- if (privateKey instanceof OpenSSLRSAPrivateKey) {
- setSslClientCertFromCtx(((OpenSSLRSAPrivateKey)privateKey).getPkeyContext(),
- chainBytes);
- } else if (privateKey instanceof OpenSSLDSAPrivateKey) {
- setSslClientCertFromCtx(((OpenSSLDSAPrivateKey)privateKey).getPkeyContext(),
- chainBytes);
+ if (privateKey instanceof OpenSSLKeyHolder) {
+ OpenSSLKey pkey = ((OpenSSLKeyHolder) privateKey).getOpenSSLKey();
+ setSslClientCertFromCtx(pkey.getPkeyContext(), chainBytes);
} else {
- setSslClientCertFromPKCS8(privateKey.getEncoded(),chainBytes);
+ setSslClientCertFromPKCS8(privateKey.getEncoded(), chainBytes);
}
} catch (CertificateEncodingException e) {
post(new Runnable() {
@@ -78,7 +75,7 @@ public final class ClientCertRequestHandler extends Handler {
/**
* Proceed with the specified private key bytes and client certificate chain.
*/
- private void setSslClientCertFromCtx(final int ctx, final byte[][] chainBytes) {
+ private void setSslClientCertFromCtx(final long ctx, final byte[][] chainBytes) {
post(new Runnable() {
public void run() {
mBrowserFrame.nativeSslClientCert(mHandle, ctx, chainBytes);
diff --git a/core/java/android/webkit/DeviceMotionService.java b/core/java/android/webkit/DeviceMotionService.java
index 9121429..9121429 100755..100644
--- a/core/java/android/webkit/DeviceMotionService.java
+++ b/core/java/android/webkit/DeviceMotionService.java
diff --git a/core/java/android/webkit/DeviceOrientationService.java b/core/java/android/webkit/DeviceOrientationService.java
index a4d240d..a4d240d 100755..100644
--- a/core/java/android/webkit/DeviceOrientationService.java
+++ b/core/java/android/webkit/DeviceOrientationService.java
diff --git a/core/java/android/webkit/FindActionModeCallback.java b/core/java/android/webkit/FindActionModeCallback.java
index 1a4ccfa..6a627e1 100644
--- a/core/java/android/webkit/FindActionModeCallback.java
+++ b/core/java/android/webkit/FindActionModeCallback.java
@@ -152,7 +152,7 @@ class FindActionModeCallback implements ActionMode.Callback, TextWatcher,
mActiveMatchIndex = matchIndex;
updateMatchesString();
} else {
- mMatches.setVisibility(View.INVISIBLE);
+ mMatches.setVisibility(View.GONE);
mNumberOfMatches = 0;
}
}
diff --git a/core/java/android/webkit/GeolocationPermissions.java b/core/java/android/webkit/GeolocationPermissions.java
index 9c0f754..9c0f754 100755..100644
--- a/core/java/android/webkit/GeolocationPermissions.java
+++ b/core/java/android/webkit/GeolocationPermissions.java
diff --git a/core/java/android/webkit/GeolocationPermissionsClassic.java b/core/java/android/webkit/GeolocationPermissionsClassic.java
index 8a9df39..8a9df39 100755..100644
--- a/core/java/android/webkit/GeolocationPermissionsClassic.java
+++ b/core/java/android/webkit/GeolocationPermissionsClassic.java
diff --git a/core/java/android/webkit/GeolocationService.java b/core/java/android/webkit/GeolocationService.java
index 225053b..225053b 100755..100644
--- a/core/java/android/webkit/GeolocationService.java
+++ b/core/java/android/webkit/GeolocationService.java
diff --git a/core/java/android/webkit/HTML5Audio.java b/core/java/android/webkit/HTML5Audio.java
index fc5df2d..684ec07 100644
--- a/core/java/android/webkit/HTML5Audio.java
+++ b/core/java/android/webkit/HTML5Audio.java
@@ -54,14 +54,15 @@ class HTML5Audio extends Handler
// The private status of the view that created this player
private IsPrivateBrowsingEnabledGetter mIsPrivateBrowsingEnabledGetter;
- private static int IDLE = 0;
- private static int INITIALIZED = 1;
- private static int PREPARED = 2;
- private static int STARTED = 4;
- private static int COMPLETE = 5;
- private static int PAUSED = 6;
- private static int STOPPED = -2;
- private static int ERROR = -1;
+ private static int IDLE = 0;
+ private static int INITIALIZED = 1;
+ private static int PREPARED = 2;
+ private static int STARTED = 4;
+ private static int COMPLETE = 5;
+ private static int PAUSED = 6;
+ private static int PAUSED_TRANSITORILY = 7;
+ private static int STOPPED = -2;
+ private static int ERROR = -1;
private int mState = IDLE;
@@ -247,7 +248,7 @@ class HTML5Audio extends Handler
// resume playback
if (mMediaPlayer == null) {
resetMediaPlayer();
- } else if (mState != ERROR && !mMediaPlayer.isPlaying()) {
+ } else if (mState == PAUSED_TRANSITORILY && !mMediaPlayer.isPlaying()) {
mMediaPlayer.start();
mState = STARTED;
}
@@ -265,7 +266,9 @@ class HTML5Audio extends Handler
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
// Lost focus for a short time, but we have to stop
// playback.
- if (mState != ERROR && mMediaPlayer.isPlaying()) pause();
+ if (mState != ERROR && mMediaPlayer.isPlaying()) {
+ pause(PAUSED_TRANSITORILY);
+ }
break;
}
}
@@ -298,12 +301,16 @@ class HTML5Audio extends Handler
}
private void pause() {
+ pause(PAUSED);
+ }
+
+ private void pause(int state) {
if (mState == STARTED) {
if (mTimer != null) {
mTimer.purge();
}
mMediaPlayer.pause();
- mState = PAUSED;
+ mState = state;
}
}
diff --git a/core/java/android/webkit/WebCoreThreadWatchdog.java b/core/java/android/webkit/WebCoreThreadWatchdog.java
index a22e6e8..c27bb5f 100644
--- a/core/java/android/webkit/WebCoreThreadWatchdog.java
+++ b/core/java/android/webkit/WebCoreThreadWatchdog.java
@@ -270,7 +270,7 @@ class WebCoreThreadWatchdog implements Runnable {
SUBSEQUENT_TIMEOUT_PERIOD);
}
})
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.show();
}
}
diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java
index ae56e6b..4db9f6c 100644
--- a/core/java/android/webkit/WebViewClassic.java
+++ b/core/java/android/webkit/WebViewClassic.java
@@ -1258,6 +1258,40 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
mAutoFillData = new WebViewCore.AutoFillData();
mEditTextScroller = new Scroller(context);
+
+ // Calculate channel distance
+ calculateChannelDistance(context);
+ }
+
+ /**
+ * Calculate sChannelDistance based on the screen information.
+ * @param context A Context object used to access application assets.
+ */
+ private void calculateChannelDistance(Context context) {
+ // The channel distance is adjusted for density and screen size
+ final DisplayMetrics metrics = context.getResources().getDisplayMetrics();
+ final double screenSize = Math.hypot((double)(metrics.widthPixels/metrics.densityDpi),
+ (double)(metrics.heightPixels/metrics.densityDpi));
+ if (screenSize < 3.0) {
+ sChannelDistance = 16;
+ } else if (screenSize < 5.0) {
+ sChannelDistance = 22;
+ } else if (screenSize < 7.0) {
+ sChannelDistance = 28;
+ } else {
+ sChannelDistance = 34;
+ }
+ sChannelDistance = (int)(sChannelDistance * metrics.density);
+ if (sChannelDistance < 16) sChannelDistance = 16;
+
+ if (DebugFlags.WEB_VIEW) {
+ Log.v(LOGTAG, "sChannelDistance : " + sChannelDistance
+ + ", density : " + metrics.density
+ + ", screenSize : " + screenSize
+ + ", metrics.heightPixels : " + metrics.heightPixels
+ + ", metrics.widthPixels : " + metrics.widthPixels
+ + ", metrics.densityDpi : " + metrics.densityDpi);
+ }
}
// WebViewProvider bindings
@@ -5382,7 +5416,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
ClipData clipData = cm.getPrimaryClip();
if (clipData != null) {
ClipData.Item clipItem = clipData.getItemAt(0);
- CharSequence pasteText = clipItem.getText();
+ CharSequence pasteText = clipItem.coerceToText(mContext);
if (mInputConnection != null) {
mInputConnection.replaceSelection(pasteText);
}
@@ -5715,32 +5749,13 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
}
return mWebViewPrivate.super_dispatchKeyEvent(event);
}
-
- /*
- * Here is the snap align logic:
- * 1. If it starts nearly horizontally or vertically, snap align;
- * 2. If there is a dramitic direction change, let it go;
- *
- * Adjustable parameters. Angle is the radians on a unit circle, limited
- * to quadrant 1. Values range from 0f (horizontal) to PI/2 (vertical)
- */
- private static final float HSLOPE_TO_START_SNAP = .25f;
- private static final float HSLOPE_TO_BREAK_SNAP = .4f;
- private static final float VSLOPE_TO_START_SNAP = 1.25f;
- private static final float VSLOPE_TO_BREAK_SNAP = .95f;
- /*
- * These values are used to influence the average angle when entering
- * snap mode. If is is the first movement entering snap, we set the average
- * to the appropriate ideal. If the user is entering into snap after the
- * first movement, then we average the average angle with these values.
- */
- private static final float ANGLE_VERT = 2f;
- private static final float ANGLE_HORIZ = 0f;
- /*
- * The modified moving average weight.
- * Formula: MAV[t]=MAV[t-1] + (P[t]-MAV[t-1])/n
- */
- private static final float MMA_WEIGHT_N = 5;
+
+ private static final int SNAP_BOUND = 16;
+ private static int sChannelDistance = 16;
+ private int mFirstTouchX = -1; // the first touched point
+ private int mFirstTouchY = -1;
+ private int mDistanceX = 0;
+ private int mDistanceY = 0;
private boolean inFullScreenMode() {
return mFullScreenHolder != null;
@@ -5830,12 +5845,6 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
}
}
- private float calculateDragAngle(int dx, int dy) {
- dx = Math.abs(dx);
- dy = Math.abs(dy);
- return (float) Math.atan2(dy, dx);
- }
-
/*
* Common code for single touch and multi-touch.
* (x, y) denotes current focus point, which is the touch point for single touch
@@ -5861,6 +5870,12 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
switch (action) {
case MotionEvent.ACTION_DOWN: {
mConfirmMove = false;
+
+ // Channel Scrolling
+ mFirstTouchX = x;
+ mFirstTouchY = y;
+ mDistanceX = mDistanceY = 0;
+
if (!mEditTextScroller.isFinished()) {
mEditTextScroller.abortAnimation();
}
@@ -5998,20 +6013,16 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
break;
}
- // Only lock dragging to one axis if we don't have a scale in progress.
- // Scaling implies free-roaming movement. Note this is only ever a question
- // if mZoomManager.supportsPanDuringZoom() is true.
- mAverageAngle = calculateDragAngle(deltaX, deltaY);
- if (detector == null || !detector.isInProgress()) {
- // if it starts nearly horizontal or vertical, enforce it
- if (mAverageAngle < HSLOPE_TO_START_SNAP) {
- mSnapScrollMode = SNAP_X;
- mSnapPositive = deltaX > 0;
- mAverageAngle = ANGLE_HORIZ;
- } else if (mAverageAngle > VSLOPE_TO_START_SNAP) {
+ if ((detector == null || !detector.isInProgress())
+ && SNAP_NONE == mSnapScrollMode) {
+ int ax = Math.abs(x - mFirstTouchX);
+ int ay = Math.abs(y - mFirstTouchY);
+ if (ax < SNAP_BOUND && ay < SNAP_BOUND) {
+ break;
+ } else if (ax < SNAP_BOUND) {
mSnapScrollMode = SNAP_Y;
- mSnapPositive = deltaY > 0;
- mAverageAngle = ANGLE_VERT;
+ } else if (ay < SNAP_BOUND) {
+ mSnapScrollMode = SNAP_X;
}
}
@@ -6030,31 +6041,21 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
if (deltaX == 0 && deltaY == 0) {
keepScrollBarsVisible = true;
} else {
- mAverageAngle +=
- (calculateDragAngle(deltaX, deltaY) - mAverageAngle)
- / MMA_WEIGHT_N;
- if (mSnapScrollMode != SNAP_NONE) {
- if (mSnapScrollMode == SNAP_Y) {
- // radical change means getting out of snap mode
- if (mAverageAngle < VSLOPE_TO_BREAK_SNAP) {
- mSnapScrollMode = SNAP_NONE;
- }
- }
+ if (mSnapScrollMode == SNAP_X || mSnapScrollMode == SNAP_Y) {
+ mDistanceX += Math.abs(deltaX);
+ mDistanceY += Math.abs(deltaY);
if (mSnapScrollMode == SNAP_X) {
- // radical change means getting out of snap mode
- if (mAverageAngle > HSLOPE_TO_BREAK_SNAP) {
+ if (mDistanceY > sChannelDistance) {
mSnapScrollMode = SNAP_NONE;
- }
+ } else if (mDistanceX > sChannelDistance) {
+ mDistanceX = mDistanceY = 0;
}
} else {
- if (mAverageAngle < HSLOPE_TO_START_SNAP) {
- mSnapScrollMode = SNAP_X;
- mSnapPositive = deltaX > 0;
- mAverageAngle = (mAverageAngle + ANGLE_HORIZ) / 2;
- } else if (mAverageAngle > VSLOPE_TO_START_SNAP) {
- mSnapScrollMode = SNAP_Y;
- mSnapPositive = deltaY > 0;
- mAverageAngle = (mAverageAngle + ANGLE_VERT) / 2;
+ if (mDistanceX > sChannelDistance) {
+ mSnapScrollMode = SNAP_NONE;
+ } else if (mDistanceY > sChannelDistance) {
+ mDistanceX = mDistanceY = 0;
+ }
}
}
if (mSnapScrollMode != SNAP_NONE) {
@@ -6089,6 +6090,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
break;
}
case MotionEvent.ACTION_UP: {
+ mFirstTouchX = mFirstTouchY = -1;
if (mIsEditingText && mSelectionStarted) {
endScrollEdit();
mPrivateHandler.sendEmptyMessageDelayed(SCROLL_HANDLE_INTO_VIEW,
@@ -8366,8 +8368,10 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
mListBoxDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
+ if (mWebViewCore != null) {
mWebViewCore.sendMessage(
EventHub.SINGLE_LISTBOX_CHOICE, -2, 0);
+ }
mListBoxDialog = null;
}
});
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 3fb3ec6..c35b768 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -1278,6 +1278,7 @@ public final class WebViewCore {
mBrowserFrame = null;
mSettings.onDestroyed();
mNativeClass = 0;
+ WebCoreThreadWatchdog.unregisterWebView(mWebViewClassic);
mWebViewClassic = null;
}
break;
@@ -1982,7 +1983,6 @@ public final class WebViewCore {
mEventHub.sendMessageAtFrontOfQueue(
Message.obtain(null, EventHub.DESTROY));
mEventHub.blockMessages();
- WebCoreThreadWatchdog.unregisterWebView(mWebViewClassic);
}
}
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 33a8531..57bf0d3 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -2637,7 +2637,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
if (mTouchModeReset != null) {
removeCallbacks(mTouchModeReset);
- mTouchModeReset = null;
+ mTouchModeReset.run();
}
mIsAttached = false;
}
@@ -3416,6 +3416,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
mTouchModeReset = new Runnable() {
@Override
public void run() {
+ mTouchModeReset = null;
mTouchMode = TOUCH_MODE_REST;
child.setPressed(false);
setPressed(false);
diff --git a/core/java/android/widget/AppSecurityPermissions.java b/core/java/android/widget/AppSecurityPermissions.java
index 06dadb0..06dadb0 100755..100644
--- a/core/java/android/widget/AppSecurityPermissions.java
+++ b/core/java/android/widget/AppSecurityPermissions.java
diff --git a/core/java/android/widget/CheckBox.java b/core/java/android/widget/CheckBox.java
index 41ab5f2..f1804f8 100644
--- a/core/java/android/widget/CheckBox.java
+++ b/core/java/android/widget/CheckBox.java
@@ -20,7 +20,6 @@ import android.content.Context;
import android.util.AttributeSet;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
-import android.util.ValueModel;
/**
@@ -56,9 +55,7 @@ import android.util.ValueModel;
* {@link android.R.styleable#View View Attributes}
* </p>
*/
-public class CheckBox extends CompoundButton implements ValueEditor<Boolean> {
- private ValueModel<Boolean> mValueModel = ValueModel.EMPTY;
-
+public class CheckBox extends CompoundButton {
public CheckBox(Context context) {
this(context, null);
}
@@ -82,22 +79,4 @@ public class CheckBox extends CompoundButton implements ValueEditor<Boolean> {
super.onInitializeAccessibilityNodeInfo(info);
info.setClassName(CheckBox.class.getName());
}
-
- @Override
- public ValueModel<Boolean> getValueModel() {
- return mValueModel;
- }
-
- @Override
- public void setValueModel(ValueModel<Boolean> valueModel) {
- mValueModel = valueModel;
- setChecked(mValueModel.get());
- }
-
- @Override
- public boolean performClick() {
- boolean handled = super.performClick();
- mValueModel.set(isChecked());
- return handled;
- }
}
diff --git a/core/java/android/widget/DateTimeView.java b/core/java/android/widget/DateTimeView.java
index 6e6e4af..af6bbcb 100644
--- a/core/java/android/widget/DateTimeView.java
+++ b/core/java/android/widget/DateTimeView.java
@@ -189,15 +189,7 @@ public class DateTimeView extends TextView {
}
private DateFormat getTimeFormat() {
- int res;
- Context context = getContext();
- if (android.text.format.DateFormat.is24HourFormat(context)) {
- res = R.string.twenty_four_hour_time_format;
- } else {
- res = R.string.twelve_hour_time_format;
- }
- String format = context.getString(res);
- return new SimpleDateFormat(format);
+ return android.text.format.DateFormat.getTimeFormat(getContext());
}
private DateFormat getDateFormat() {
diff --git a/core/java/android/widget/DigitalClock.java b/core/java/android/widget/DigitalClock.java
index c6b6dd6..b6c1e5b 100644
--- a/core/java/android/widget/DigitalClock.java
+++ b/core/java/android/widget/DigitalClock.java
@@ -39,8 +39,6 @@ public class DigitalClock extends TextView {
// proportional fonts don't shake rendering
Calendar mCalendar;
- private final static String m12 = "h:mm:ss aa";
- private final static String m24 = "k:mm:ss";
@SuppressWarnings("FieldCanBeLocal") // We must keep a reference to this observer
private FormatChangeObserver mFormatChangeObserver;
@@ -102,19 +100,8 @@ public class DigitalClock extends TextView {
mTickerStopped = true;
}
- /**
- * Pulls 12/24 mode from system settings
- */
- private boolean get24HourMode() {
- return android.text.format.DateFormat.is24HourFormat(getContext());
- }
-
private void setFormat() {
- if (get24HourMode()) {
- mFormat = m24;
- } else {
- mFormat = m12;
- }
+ mFormat = DateFormat.getTimeFormatString(getContext());
}
private class FormatChangeObserver extends ContentObserver {
diff --git a/core/java/android/widget/EditText.java b/core/java/android/widget/EditText.java
index ec81214..57e51c2 100644
--- a/core/java/android/widget/EditText.java
+++ b/core/java/android/widget/EditText.java
@@ -17,7 +17,6 @@
package android.widget;
import android.content.Context;
-import android.graphics.Rect;
import android.text.Editable;
import android.text.Selection;
import android.text.Spannable;
@@ -25,7 +24,6 @@ import android.text.TextUtils;
import android.text.method.ArrowKeyMovementMethod;
import android.text.method.MovementMethod;
import android.util.AttributeSet;
-import android.util.ValueModel;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
@@ -49,9 +47,7 @@ import android.view.accessibility.AccessibilityNodeInfo;
* {@link android.R.styleable#TextView TextView Attributes},
* {@link android.R.styleable#View View Attributes}
*/
-public class EditText extends TextView implements ValueEditor<CharSequence> {
- private ValueModel<CharSequence> mValueModel = ValueModel.EMPTY;
-
+public class EditText extends TextView {
public EditText(Context context) {
this(context, null);
}
@@ -132,21 +128,4 @@ public class EditText extends TextView implements ValueEditor<CharSequence> {
super.onInitializeAccessibilityNodeInfo(info);
info.setClassName(EditText.class.getName());
}
-
- @Override
- public ValueModel<CharSequence> getValueModel() {
- return mValueModel;
- }
-
- @Override
- public void setValueModel(ValueModel<CharSequence> valueModel) {
- mValueModel = valueModel;
- setText(mValueModel.get());
- }
-
- @Override
- void sendAfterTextChanged(Editable text) {
- super.sendAfterTextChanged(text);
- mValueModel.set(text);
- }
}
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 30d022c..8892316 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -2696,23 +2696,14 @@ public class Editor {
TypedArray styledAttributes = mTextView.getContext().obtainStyledAttributes(
com.android.internal.R.styleable.SelectionModeDrawables);
- boolean allowText = mTextView.getContext().getResources().getBoolean(
- com.android.internal.R.bool.config_allowActionMenuItemTextWithIcon);
-
mode.setTitle(mTextView.getContext().getString(
com.android.internal.R.string.textSelectionCABTitle));
mode.setSubtitle(null);
mode.setTitleOptionalHint(true);
- int selectAllIconId = 0; // No icon by default
- if (!allowText) {
- // Provide an icon, text will not be displayed on smaller screens.
- selectAllIconId = styledAttributes.getResourceId(
- R.styleable.SelectionModeDrawables_actionModeSelectAllDrawable, 0);
- }
-
menu.add(0, TextView.ID_SELECT_ALL, 0, com.android.internal.R.string.selectAll).
- setIcon(selectAllIconId).
+ setIcon(styledAttributes.getResourceId(
+ R.styleable.SelectionModeDrawables_actionModeSelectAllDrawable, 0)).
setAlphabeticShortcut('a').
setShowAsAction(
MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
diff --git a/core/java/android/widget/HeaderViewListAdapter.java b/core/java/android/widget/HeaderViewListAdapter.java
index e2a269e..0685e61 100644
--- a/core/java/android/widget/HeaderViewListAdapter.java
+++ b/core/java/android/widget/HeaderViewListAdapter.java
@@ -79,7 +79,8 @@ public class HeaderViewListAdapter implements WrapperListAdapter, Filterable {
}
public boolean isEmpty() {
- return mAdapter == null || mAdapter.isEmpty();
+ return (mAdapter == null || mAdapter.isEmpty())
+ && getFootersCount() + getHeadersCount() == 0;
}
private boolean areAllListInfosSelectable(ArrayList<ListView.FixedViewInfo> infos) {
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index 03507b5..4436fbb 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -2429,7 +2429,9 @@ public class ListView extends AbsListView {
View selectedView = getSelectedView();
int selectedPos = mSelectedPosition;
- int nextSelectedPosition = lookForSelectablePositionOnScreen(direction);
+ int nextSelectedPosition = (direction == View.FOCUS_DOWN) ?
+ lookForSelectablePosition(selectedPos + 1, true) :
+ lookForSelectablePosition(selectedPos - 1, false);
int amountToScroll = amountToScroll(direction, nextSelectedPosition);
// if we are moving focus, we may OVERRIDE the default behavior
@@ -2641,14 +2643,18 @@ public class ListView extends AbsListView {
final int listBottom = getHeight() - mListPadding.bottom;
final int listTop = mListPadding.top;
- final int numChildren = getChildCount();
+ int numChildren = getChildCount();
if (direction == View.FOCUS_DOWN) {
int indexToMakeVisible = numChildren - 1;
if (nextSelectedPosition != INVALID_POSITION) {
indexToMakeVisible = nextSelectedPosition - mFirstPosition;
}
-
+ while (numChildren <= indexToMakeVisible) {
+ // Child to view is not attached yet.
+ addViewBelow(getChildAt(numChildren - 1), mFirstPosition + numChildren - 1);
+ numChildren++;
+ }
final int positionToMakeVisible = mFirstPosition + indexToMakeVisible;
final View viewToMakeVisible = getChildAt(indexToMakeVisible);
@@ -2682,6 +2688,12 @@ public class ListView extends AbsListView {
if (nextSelectedPosition != INVALID_POSITION) {
indexToMakeVisible = nextSelectedPosition - mFirstPosition;
}
+ while (indexToMakeVisible < 0) {
+ // Child to view is not attached yet.
+ addViewAbove(getChildAt(0), mFirstPosition);
+ mFirstPosition--;
+ indexToMakeVisible = nextSelectedPosition - mFirstPosition;
+ }
final int positionToMakeVisible = mFirstPosition + indexToMakeVisible;
final View viewToMakeVisible = getChildAt(indexToMakeVisible);
int goalTop = listTop;
@@ -2981,11 +2993,9 @@ public class ListView extends AbsListView {
while (first.getBottom() < listTop) {
AbsListView.LayoutParams layoutParams = (LayoutParams) first.getLayoutParams();
if (recycleBin.shouldRecycleViewType(layoutParams.viewType)) {
- detachViewFromParent(first);
recycleBin.addScrapView(first, mFirstPosition);
- } else {
- removeViewInLayout(first);
}
+ detachViewFromParent(first);
first = getChildAt(0);
mFirstPosition++;
}
@@ -3012,11 +3022,9 @@ public class ListView extends AbsListView {
while (last.getTop() > listBottom) {
AbsListView.LayoutParams layoutParams = (LayoutParams) last.getLayoutParams();
if (recycleBin.shouldRecycleViewType(layoutParams.viewType)) {
- detachViewFromParent(last);
recycleBin.addScrapView(last, mFirstPosition+lastIndex);
- } else {
- removeViewInLayout(last);
}
+ detachViewFromParent(last);
last = getChildAt(--lastIndex);
}
}
diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java
index 74ded18..2ac5a12 100644
--- a/core/java/android/widget/NumberPicker.java
+++ b/core/java/android/widget/NumberPicker.java
@@ -1969,8 +1969,10 @@ public class NumberPicker extends LinearLayout {
* Ensure the user can't type in a value greater than the max
* allowed. We have to allow less than min as the user might
* want to delete some numbers and then type a new number.
+ * And prevent multiple-"0" that exceeds the length of upper
+ * bound number.
*/
- if (val > mMaxValue) {
+ if (val > mMaxValue || result.length() > String.valueOf(mMaxValue).length()) {
return "";
} else {
return filtered;
diff --git a/core/java/android/widget/SeekBar.java b/core/java/android/widget/SeekBar.java
index a6486a8..2737f94 100644
--- a/core/java/android/widget/SeekBar.java
+++ b/core/java/android/widget/SeekBar.java
@@ -18,7 +18,6 @@ package android.widget;
import android.content.Context;
import android.util.AttributeSet;
-import android.util.ValueModel;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
@@ -34,7 +33,7 @@ import android.view.accessibility.AccessibilityNodeInfo;
*
* @attr ref android.R.styleable#SeekBar_thumb
*/
-public class SeekBar extends AbsSeekBar implements ValueEditor<Integer> {
+public class SeekBar extends AbsSeekBar {
/**
* A callback that notifies clients when the progress level has been
@@ -70,9 +69,8 @@ public class SeekBar extends AbsSeekBar implements ValueEditor<Integer> {
void onStopTrackingTouch(SeekBar seekBar);
}
- private ValueModel<Integer> mValueModel = ValueModel.EMPTY;
private OnSeekBarChangeListener mOnSeekBarChangeListener;
-
+
public SeekBar(Context context) {
this(context, null);
}
@@ -91,23 +89,9 @@ public class SeekBar extends AbsSeekBar implements ValueEditor<Integer> {
if (mOnSeekBarChangeListener != null) {
mOnSeekBarChangeListener.onProgressChanged(this, getProgress(), fromUser);
- if (fromUser) {
- mValueModel.set(getProgress());
- }
}
}
- @Override
- public ValueModel<Integer> getValueModel() {
- return mValueModel;
- }
-
- @Override
- public void setValueModel(ValueModel<Integer> valueModel) {
- mValueModel = valueModel;
- setProgress(mValueModel.get());
- }
-
/**
* Sets a listener to receive notifications of changes to the SeekBar's progress level. Also
* provides notifications of when the user starts and stops a touch gesture within the SeekBar.
diff --git a/core/java/android/widget/TextClock.java b/core/java/android/widget/TextClock.java
index 290d9b5..2f08253 100644
--- a/core/java/android/widget/TextClock.java
+++ b/core/java/android/widget/TextClock.java
@@ -36,21 +36,24 @@ import com.android.internal.R;
import java.util.Calendar;
import java.util.TimeZone;
+import libcore.icu.LocaleData;
+
import static android.view.ViewDebug.ExportedProperty;
import static android.widget.RemoteViews.*;
/**
* <p><code>TextClock</code> can display the current date and/or time as
* a formatted string.</p>
- *
+ *
* <p>This view honors the 24-hour format system setting. As such, it is
* possible and recommended to provide two different formatting patterns:
* one to display the date/time in 24-hour mode and one to display the
- * date/time in 12-hour mode.</p>
- *
+ * date/time in 12-hour mode. Most callers will want to use the defaults,
+ * though, which will be appropriate for the user's locale.</p>
+ *
* <p>It is possible to determine whether the system is currently in
* 24-hour mode by calling {@link #is24HourModeEnabled()}.</p>
- *
+ *
* <p>The rules used by this widget to decide how to format the date and
* time are the following:</p>
* <ul>
@@ -58,22 +61,24 @@ import static android.widget.RemoteViews.*;
* <ul>
* <li>Use the value returned by {@link #getFormat24Hour()} when non-null</li>
* <li>Otherwise, use the value returned by {@link #getFormat12Hour()} when non-null</li>
- * <li>Otherwise, use {@link #DEFAULT_FORMAT_24_HOUR}</li>
+ * <li>Otherwise, use a default value appropriate for the user's locale, such as {@code h:mm a}</li>
* </ul>
* </li>
* <li>In 12-hour mode:
* <ul>
* <li>Use the value returned by {@link #getFormat12Hour()} when non-null</li>
* <li>Otherwise, use the value returned by {@link #getFormat24Hour()} when non-null</li>
- * <li>Otherwise, use {@link #DEFAULT_FORMAT_12_HOUR}</li>
+ * <li>Otherwise, use a default value appropriate for the user's locale, such as {@code HH:mm}</li>
* </ul>
* </li>
* </ul>
- *
+ *
* <p>The {@link CharSequence} instances used as formatting patterns when calling either
* {@link #setFormat24Hour(CharSequence)} or {@link #setFormat12Hour(CharSequence)} can
- * contain styling information. To do so, use a {@link android.text.Spanned} object.</p>
- *
+ * contain styling information. To do so, use a {@link android.text.Spanned} object.
+ * Note that if you customize these strings, it is your responsibility to supply strings
+ * appropriate for formatting dates and/or times in the user's locale.</p>
+ *
* @attr ref android.R.styleable#TextClock_format12Hour
* @attr ref android.R.styleable#TextClock_format24Hour
* @attr ref android.R.styleable#TextClock_timeZone
@@ -81,32 +86,34 @@ import static android.widget.RemoteViews.*;
@RemoteView
public class TextClock extends TextView {
/**
- * The default formatting pattern in 12-hour mode. This pattenr is used
+ * The default formatting pattern in 12-hour mode. This pattern is used
* if {@link #setFormat12Hour(CharSequence)} is called with a null pattern
* or if no pattern was specified when creating an instance of this class.
- *
+ *
* This default pattern shows only the time, hours and minutes, and an am/pm
* indicator.
*
* @see #setFormat12Hour(CharSequence)
* @see #getFormat12Hour()
+ * @deprecated Let the system use locale-appropriate defaults instead.
*/
- public static final CharSequence DEFAULT_FORMAT_12_HOUR = "h:mm aa";
+ public static final CharSequence DEFAULT_FORMAT_12_HOUR = "h:mm a";
/**
- * The default formatting pattern in 24-hour mode. This pattenr is used
+ * The default formatting pattern in 24-hour mode. This pattern is used
* if {@link #setFormat24Hour(CharSequence)} is called with a null pattern
* or if no pattern was specified when creating an instance of this class.
*
* This default pattern shows only the time, hours and minutes.
- *
- * @see #setFormat24Hour(CharSequence)
- * @see #getFormat24Hour()
+ *
+ * @see #setFormat24Hour(CharSequence)
+ * @see #getFormat24Hour()
+ * @deprecated Let the system use locale-appropriate defaults instead.
*/
- public static final CharSequence DEFAULT_FORMAT_24_HOUR = "k:mm";
+ public static final CharSequence DEFAULT_FORMAT_24_HOUR = "H:mm";
- private CharSequence mFormat12 = DEFAULT_FORMAT_12_HOUR;
- private CharSequence mFormat24 = DEFAULT_FORMAT_24_HOUR;
+ private CharSequence mFormat12;
+ private CharSequence mFormat24;
@ExportedProperty
private CharSequence mFormat;
@@ -158,7 +165,7 @@ public class TextClock extends TextView {
* Creates a new clock using the default patterns
* {@link #DEFAULT_FORMAT_24_HOUR} and {@link #DEFAULT_FORMAT_12_HOUR}
* respectively for the 24-hour and 12-hour modes.
- *
+ *
* @param context The Context the view is running in, through which it can
* access the current theme, resources, etc.
*/
@@ -171,7 +178,7 @@ public class TextClock extends TextView {
/**
* Creates a new clock inflated from XML. This object's properties are
* intialized from the attributes specified in XML.
- *
+ *
* This constructor uses a default style of 0, so the only attribute values
* applied are those in the Context's Theme and the given AttributeSet.
*
@@ -201,14 +208,8 @@ public class TextClock extends TextView {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TextClock, defStyle, 0);
try {
- CharSequence format;
-
- format = a.getText(R.styleable.TextClock_format12Hour);
- mFormat12 = format == null ? DEFAULT_FORMAT_12_HOUR : format;
-
- format = a.getText(R.styleable.TextClock_format24Hour);
- mFormat24 = format == null ? DEFAULT_FORMAT_24_HOUR : format;
-
+ mFormat12 = a.getText(R.styleable.TextClock_format12Hour);
+ mFormat24 = a.getText(R.styleable.TextClock_format24Hour);
mTimeZone = a.getString(R.styleable.TextClock_timeZone);
} finally {
a.recycle();
@@ -218,6 +219,16 @@ public class TextClock extends TextView {
}
private void init() {
+ if (mFormat12 == null || mFormat24 == null) {
+ LocaleData ld = LocaleData.get(getContext().getResources().getConfiguration().locale);
+ if (mFormat12 == null) {
+ mFormat12 = ld.timeFormat12;
+ }
+ if (mFormat24 == null) {
+ mFormat24 = ld.timeFormat24;
+ }
+ }
+
createTime(mTimeZone);
// Wait until onAttachedToWindow() to handle the ticker
chooseFormat(false);
@@ -235,11 +246,11 @@ public class TextClock extends TextView {
* Returns the formatting pattern used to display the date and/or time
* in 12-hour mode. The formatting pattern syntax is described in
* {@link DateFormat}.
- *
+ *
* @return A {@link CharSequence} or null.
- *
- * @see #setFormat12Hour(CharSequence)
- * @see #is24HourModeEnabled()
+ *
+ * @see #setFormat12Hour(CharSequence)
+ * @see #is24HourModeEnabled()
*/
@ExportedProperty
public CharSequence getFormat12Hour() {
@@ -257,12 +268,12 @@ public class TextClock extends TextView {
* {@link #DEFAULT_FORMAT_12_HOUR} will be used instead.
*
* @param format A date/time formatting pattern as described in {@link DateFormat}
- *
+ *
* @see #getFormat12Hour()
* @see #is24HourModeEnabled()
* @see #DEFAULT_FORMAT_12_HOUR
* @see DateFormat
- *
+ *
* @attr ref android.R.styleable#TextClock_format12Hour
*/
@RemotableViewMethod
@@ -292,7 +303,7 @@ public class TextClock extends TextView {
* Specifies the formatting pattern used to display the date and/or time
* in 24-hour mode. The formatting pattern syntax is described in
* {@link DateFormat}.
- *
+ *
* If this pattern is set to null, {@link #getFormat12Hour()} will be used
* even in 24-hour mode. If both 24-hour and 12-hour formatting patterns
* are set to null, {@link #DEFAULT_FORMAT_24_HOUR} and
@@ -301,7 +312,7 @@ public class TextClock extends TextView {
* @param format A date/time formatting pattern as described in {@link DateFormat}
*
* @see #getFormat24Hour()
- * @see #is24HourModeEnabled()
+ * @see #is24HourModeEnabled()
* @see #DEFAULT_FORMAT_24_HOUR
* @see DateFormat
*
@@ -317,22 +328,22 @@ public class TextClock extends TextView {
/**
* Indicates whether the system is currently using the 24-hour mode.
- *
+ *
* When the system is in 24-hour mode, this view will use the pattern
* returned by {@link #getFormat24Hour()}. In 12-hour mode, the pattern
* returned by {@link #getFormat12Hour()} is used instead.
- *
+ *
* If either one of the formats is null, the other format is used. If
* both formats are null, the default values {@link #DEFAULT_FORMAT_12_HOUR}
* and {@link #DEFAULT_FORMAT_24_HOUR} are used instead.
- *
+ *
* @return true if time should be displayed in 24-hour format, false if it
* should be displayed in 12-hour format.
- *
+ *
* @see #setFormat12Hour(CharSequence)
- * @see #getFormat12Hour()
+ * @see #getFormat12Hour()
* @see #setFormat24Hour(CharSequence)
- * @see #getFormat24Hour()
+ * @see #getFormat24Hour()
*/
public boolean is24HourModeEnabled() {
return DateFormat.is24HourFormat(getContext());
@@ -340,13 +351,13 @@ public class TextClock extends TextView {
/**
* Indicates which time zone is currently used by this view.
- *
+ *
* @return The ID of the current time zone or null if the default time zone,
* as set by the user, must be used
*
* @see TimeZone
* @see java.util.TimeZone#getAvailableIDs()
- * @see #setTimeZone(String)
+ * @see #setTimeZone(String)
*/
public String getTimeZone() {
return mTimeZone;
@@ -378,7 +389,7 @@ public class TextClock extends TextView {
/**
* Selects either one of {@link #getFormat12Hour()} or {@link #getFormat24Hour()}
* depending on whether the user has selected 24-hour format.
- *
+ *
* Calling this method does not schedule or unschedule the time ticker.
*/
private void chooseFormat() {
@@ -388,17 +399,19 @@ public class TextClock extends TextView {
/**
* Selects either one of {@link #getFormat12Hour()} or {@link #getFormat24Hour()}
* depending on whether the user has selected 24-hour format.
- *
+ *
* @param handleTicker true if calling this method should schedule/unschedule the
* time ticker, false otherwise
*/
private void chooseFormat(boolean handleTicker) {
final boolean format24Requested = is24HourModeEnabled();
+ LocaleData ld = LocaleData.get(getContext().getResources().getConfiguration().locale);
+
if (format24Requested) {
- mFormat = abc(mFormat24, mFormat12, DEFAULT_FORMAT_24_HOUR);
+ mFormat = abc(mFormat24, mFormat12, ld.timeFormat24);
} else {
- mFormat = abc(mFormat12, mFormat24, DEFAULT_FORMAT_12_HOUR);
+ mFormat = abc(mFormat12, mFormat24, ld.timeFormat12);
}
boolean hadSeconds = mHasSeconds;
diff --git a/core/java/android/widget/ValueEditor.java b/core/java/android/widget/ValueEditor.java
deleted file mode 100755
index 2b91abf..0000000
--- a/core/java/android/widget/ValueEditor.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.widget;
-
-import android.util.ValueModel;
-
-/**
- * An interface for editors of simple values. Classes implementing this interface are normally
- * UI controls (subclasses of {@link android.view.View View}) that can provide a suitable
- * user interface to display and edit values of the specified type. This interface is
- * intended to describe editors for simple types, like {@code boolean}, {@code int} or
- * {@code String}, where the values themselves are immutable.
- * <p>
- * For example, {@link android.widget.CheckBox CheckBox} implements
- * this interface for the Boolean type as it is capable of providing an appropriate
- * mechanism for displaying and changing the value of a Boolean property.
- *
- * @param <T> the value type that this editor supports
- */
-public interface ValueEditor<T> {
- /**
- * Return the last value model that was set. If no value model has been set, the editor
- * should return the value {@link android.util.ValueModel#EMPTY}.
- *
- * @return the value model
- */
- public ValueModel<T> getValueModel();
-
- /**
- * Sets the value model for this editor. When the value model is set, the editor should
- * retrieve the value from the value model, using {@link android.util.ValueModel#get()},
- * and set its internal state accordingly. Likewise, when the editor's internal state changes
- * it should update the value model by calling {@link android.util.ValueModel#set(T)}
- * with the appropriate value.
- *
- * @param valueModel the new value model for this editor.
- */
- public void setValueModel(ValueModel<T> valueModel);
-}
diff --git a/core/java/com/android/internal/app/IMediaContainerService.aidl b/core/java/com/android/internal/app/IMediaContainerService.aidl
index 03d3b22..03d3b22 100755..100644
--- a/core/java/com/android/internal/app/IMediaContainerService.aidl
+++ b/core/java/com/android/internal/app/IMediaContainerService.aidl
diff --git a/core/java/com/android/internal/app/IUsageStats.aidl b/core/java/com/android/internal/app/IUsageStats.aidl
index 1ea7409..1ea7409 100755..100644
--- a/core/java/com/android/internal/app/IUsageStats.aidl
+++ b/core/java/com/android/internal/app/IUsageStats.aidl
diff --git a/core/java/com/android/internal/app/NetInitiatedActivity.java b/core/java/com/android/internal/app/NetInitiatedActivity.java
index e1166f1..e1166f1 100755..100644
--- a/core/java/com/android/internal/app/NetInitiatedActivity.java
+++ b/core/java/com/android/internal/app/NetInitiatedActivity.java
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index e63c57f..c22cd26 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -35,7 +35,6 @@ import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.PatternMatcher;
-import android.os.Process;
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.Log;
@@ -64,6 +63,7 @@ import java.util.Set;
*/
public class ResolverActivity extends AlertActivity implements AdapterView.OnItemClickListener {
private static final String TAG = "ResolverActivity";
+ private static final boolean DEBUG = false;
private int mLaunchedFromUid;
private ResolveListAdapter mAdapter;
@@ -323,7 +323,7 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
|| (!"file".equals(data.getScheme())
&& !"content".equals(data.getScheme()))) {
filter.addDataScheme(data.getScheme());
-
+
// Look through the resolved filter to determine which part
// of it matched the original Intent.
Iterator<IntentFilter.AuthorityEntry> aIt = ri.filter.authoritiesIterator();
@@ -402,7 +402,6 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
private final int mLaunchedFromUid;
private final LayoutInflater mInflater;
- private List<ResolveInfo> mCurrentResolveList;
private List<DisplayResolveInfo> mList;
public ResolveListAdapter(Context context, Intent intent,
@@ -413,6 +412,7 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
mBaseResolveList = rList;
mLaunchedFromUid = launchedFromUid;
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ mList = new ArrayList<DisplayResolveInfo>();
rebuildList();
}
@@ -420,22 +420,23 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
final int oldItemCount = getCount();
rebuildList();
notifyDataSetChanged();
- if (mList.size() <= 0) {
+ final int newItemCount = getCount();
+ if (newItemCount == 0) {
// We no longer have any items... just finish the activity.
finish();
- }
-
- final int newItemCount = getCount();
- if (newItemCount != oldItemCount) {
+ } else if (newItemCount != oldItemCount) {
resizeGrid();
}
}
private void rebuildList() {
+ List<ResolveInfo> currentResolveList;
+
+ mList.clear();
if (mBaseResolveList != null) {
- mCurrentResolveList = mBaseResolveList;
+ currentResolveList = mBaseResolveList;
} else {
- mCurrentResolveList = mPm.queryIntentActivities(
+ currentResolveList = mPm.queryIntentActivities(
mIntent, PackageManager.MATCH_DEFAULT_ONLY
| (mAlwaysUseOption ? PackageManager.GET_RESOLVED_FILTER : 0));
// Filter out any activities that the launched uid does not
@@ -443,36 +444,36 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
// list of resolved activities, because that only happens when
// we are being subclassed, so we can safely launch whatever
// they gave us.
- if (mCurrentResolveList != null) {
- for (int i=mCurrentResolveList.size()-1; i >= 0; i--) {
- ActivityInfo ai = mCurrentResolveList.get(i).activityInfo;
+ if (currentResolveList != null) {
+ for (int i=currentResolveList.size()-1; i >= 0; i--) {
+ ActivityInfo ai = currentResolveList.get(i).activityInfo;
int granted = ActivityManager.checkComponentPermission(
ai.permission, mLaunchedFromUid,
ai.applicationInfo.uid, ai.exported);
if (granted != PackageManager.PERMISSION_GRANTED) {
// Access not allowed!
- mCurrentResolveList.remove(i);
+ currentResolveList.remove(i);
}
}
}
}
int N;
- if ((mCurrentResolveList != null) && ((N = mCurrentResolveList.size()) > 0)) {
+ if ((currentResolveList != null) && ((N = currentResolveList.size()) > 0)) {
// Only display the first matches that are either of equal
// priority or have asked to be default options.
- ResolveInfo r0 = mCurrentResolveList.get(0);
+ ResolveInfo r0 = currentResolveList.get(0);
for (int i=1; i<N; i++) {
- ResolveInfo ri = mCurrentResolveList.get(i);
- if (false) Log.v(
+ ResolveInfo ri = currentResolveList.get(i);
+ if (DEBUG) Log.v(
"ResolveListActivity",
r0.activityInfo.name + "=" +
r0.priority + "/" + r0.isDefault + " vs " +
ri.activityInfo.name + "=" +
ri.priority + "/" + ri.isDefault);
- if (r0.priority != ri.priority ||
+ if (r0.priority != ri.priority ||
r0.isDefault != ri.isDefault) {
while (i < N) {
- mCurrentResolveList.remove(i);
+ currentResolveList.remove(i);
N--;
}
}
@@ -480,11 +481,8 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
if (N > 1) {
ResolveInfo.DisplayNameComparator rComparator =
new ResolveInfo.DisplayNameComparator(mPm);
- Collections.sort(mCurrentResolveList, rComparator);
+ Collections.sort(currentResolveList, rComparator);
}
-
- mList = new ArrayList<DisplayResolveInfo>();
-
// First put the initial items at the top.
if (mInitialIntents != null) {
for (int i=0; i<mInitialIntents.length; i++) {
@@ -512,10 +510,10 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
ri.loadLabel(getPackageManager()), null, ii));
}
}
-
+
// Check for applications with same name and use application name or
// package name if necessary
- r0 = mCurrentResolveList.get(0);
+ r0 = currentResolveList.get(0);
int start = 0;
CharSequence r0Label = r0.loadLabel(mPm);
mShowExtended = false;
@@ -523,7 +521,7 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
if (r0Label == null) {
r0Label = r0.activityInfo.packageName;
}
- ResolveInfo ri = mCurrentResolveList.get(i);
+ ResolveInfo ri = currentResolveList.get(i);
CharSequence riLabel = ri.loadLabel(mPm);
if (riLabel == null) {
riLabel = ri.activityInfo.packageName;
@@ -531,13 +529,13 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
if (riLabel.equals(r0Label)) {
continue;
}
- processGroup(mCurrentResolveList, start, (i-1), r0, r0Label);
+ processGroup(currentResolveList, start, (i-1), r0, r0Label);
r0 = ri;
r0Label = riLabel;
start = i;
}
// Process last group
- processGroup(mCurrentResolveList, start, (N-1), r0, r0Label);
+ processGroup(currentResolveList, start, (N-1), r0, r0Label);
}
}
@@ -589,18 +587,10 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
}
public ResolveInfo resolveInfoForPosition(int position) {
- if (mList == null) {
- return null;
- }
-
return mList.get(position).ri;
}
public Intent intentForPosition(int position) {
- if (mList == null) {
- return null;
- }
-
DisplayResolveInfo dri = mList.get(position);
Intent intent = new Intent(dri.origIntent != null
@@ -614,11 +604,11 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
}
public int getCount() {
- return mList != null ? mList.size() : 0;
+ return mList.size();
}
public Object getItem(int position) {
- return position;
+ return mList.get(position);
}
public long getItemId(int position) {
diff --git a/core/java/com/android/internal/backup/LocalTransport.java b/core/java/com/android/internal/backup/LocalTransport.java
index eed3e67..eb2d1fe 100644
--- a/core/java/com/android/internal/backup/LocalTransport.java
+++ b/core/java/com/android/internal/backup/LocalTransport.java
@@ -27,6 +27,7 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Environment;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
+import android.os.SELinux;
import android.util.Log;
import com.android.org.bouncycastle.util.encoders.Base64;
@@ -64,6 +65,10 @@ public class LocalTransport extends IBackupTransport.Stub {
public LocalTransport(Context context) {
mContext = context;
+ mDataDir.mkdirs();
+ if (!SELinux.restorecon(mDataDir)) {
+ Log.e(TAG, "SELinux restorecon failed for " + mDataDir);
+ }
}
public Intent configurationIntent() {
diff --git a/core/java/com/android/internal/os/PkgUsageStats.aidl b/core/java/com/android/internal/os/PkgUsageStats.aidl
index 8305271..8305271 100755..100644
--- a/core/java/com/android/internal/os/PkgUsageStats.aidl
+++ b/core/java/com/android/internal/os/PkgUsageStats.aidl
diff --git a/core/java/com/android/internal/os/PkgUsageStats.java b/core/java/com/android/internal/os/PkgUsageStats.java
index 8c2c405..8c2c405 100755..100644
--- a/core/java/com/android/internal/os/PkgUsageStats.java
+++ b/core/java/com/android/internal/os/PkgUsageStats.java
diff --git a/core/java/com/android/internal/os/SamplingProfilerIntegration.java b/core/java/com/android/internal/os/SamplingProfilerIntegration.java
index df0fcd9..6429aa4 100644
--- a/core/java/com/android/internal/os/SamplingProfilerIntegration.java
+++ b/core/java/com/android/internal/os/SamplingProfilerIntegration.java
@@ -106,7 +106,7 @@ public class SamplingProfilerIntegration {
}
ThreadGroup group = Thread.currentThread().getThreadGroup();
- SamplingProfiler.ThreadSet threadSet = SamplingProfiler.newThreadGroupTheadSet(group);
+ SamplingProfiler.ThreadSet threadSet = SamplingProfiler.newThreadGroupThreadSet(group);
samplingProfiler = new SamplingProfiler(samplingProfilerDepth, threadSet);
samplingProfiler.start(samplingProfilerMilliseconds);
startMillis = System.currentTimeMillis();
diff --git a/core/java/com/android/internal/util/AsyncChannel.java b/core/java/com/android/internal/util/AsyncChannel.java
index 5093b4d..52281d9 100644
--- a/core/java/com/android/internal/util/AsyncChannel.java
+++ b/core/java/com/android/internal/util/AsyncChannel.java
@@ -180,6 +180,9 @@ public class AsyncChannel {
/** CMD_FULLY_CONNECTED refused because a connection already exists*/
public static final int STATUS_FULL_CONNECTION_REFUSED_ALREADY_CONNECTED = 3;
+ /** Error indicating abnormal termination of destination messenger */
+ public static final int STATUS_REMOTE_DISCONNECTION = 4;
+
/** Service connection */
private AsyncChannelConnection mConnection;
@@ -195,6 +198,9 @@ public class AsyncChannel {
/** Messenger for destination */
private Messenger mDstMessenger;
+ /** Death Monitor for destination messenger */
+ private DeathMonitor mDeathMonitor;
+
/**
* AsyncChannel constructor
*/
@@ -434,6 +440,7 @@ public class AsyncChannel {
mSrcHandler = null;
mSrcMessenger = null;
mDstMessenger = null;
+ mDeathMonitor = null;
mConnection = null;
}
@@ -457,6 +464,10 @@ public class AsyncChannel {
if (mSrcHandler != null) {
replyDisconnected(STATUS_SUCCESSFUL);
}
+ // Unlink only when bindService isn't used
+ if (mConnection == null && mDstMessenger != null && mDeathMonitor!= null) {
+ mDstMessenger.getBinder().unlinkToDeath(mDeathMonitor, 0);
+ }
}
/**
@@ -832,6 +843,21 @@ public class AsyncChannel {
msg.arg1 = status;
msg.obj = this;
msg.replyTo = mDstMessenger;
+
+ /*
+ * Link to death only when bindService isn't used.
+ */
+ if (mConnection == null) {
+ mDeathMonitor = new DeathMonitor();
+ try {
+ mDstMessenger.getBinder().linkToDeath(mDeathMonitor, 0);
+ } catch (RemoteException e) {
+ mDeathMonitor = null;
+ // Override status to indicate failure
+ msg.arg1 = STATUS_BINDING_UNSUCCESSFUL;
+ }
+ }
+
mSrcHandler.sendMessage(msg);
}
@@ -877,4 +903,15 @@ public class AsyncChannel {
private static void log(String s) {
Slog.d(TAG, s);
}
+
+ private final class DeathMonitor implements IBinder.DeathRecipient {
+
+ DeathMonitor() {
+ }
+
+ public void binderDied() {
+ replyDisconnected(STATUS_REMOTE_DISCONNECTION);
+ }
+
+ }
}
diff --git a/core/java/com/android/internal/view/menu/MenuItemImpl.java b/core/java/com/android/internal/view/menu/MenuItemImpl.java
index 9f7441d..7189610 100644
--- a/core/java/com/android/internal/view/menu/MenuItemImpl.java
+++ b/core/java/com/android/internal/view/menu/MenuItemImpl.java
@@ -93,6 +93,7 @@ public final class MenuItemImpl implements MenuItem {
*/
private ContextMenuInfo mMenuInfo;
+ private static String sLanguage;
private static String sPrependShortcutLabel;
private static String sEnterShortcutLabel;
private static String sDeleteShortcutLabel;
@@ -114,7 +115,9 @@ public final class MenuItemImpl implements MenuItem {
MenuItemImpl(MenuBuilder menu, int group, int id, int categoryOrder, int ordering,
CharSequence title, int showAsAction) {
- if (sPrependShortcutLabel == null) {
+ String lang = menu.getContext().getResources().getConfiguration().locale.toString();
+ if (sPrependShortcutLabel == null || !lang.equals(sLanguage)) {
+ sLanguage = lang;
// This is instantiated from the UI thread, so no chance of sync issues
sPrependShortcutLabel = menu.getContext().getResources().getString(
com.android.internal.R.string.prepend_shortcut_label);
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index 3ca085b..d8f20c1 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -11,14 +11,6 @@ else
LOCAL_CFLAGS += -DPACKED=""
endif
-ifeq ($(WITH_JIT),true)
- LOCAL_CFLAGS += -DWITH_JIT
-endif
-
-ifneq ($(USE_CUSTOM_RUNTIME_HEAP_MAX),)
- LOCAL_CFLAGS += -DCUSTOM_RUNTIME_HEAP_MAX=$(USE_CUSTOM_RUNTIME_HEAP_MAX)
-endif
-
ifeq ($(USE_OPENGL_RENDERER),true)
LOCAL_CFLAGS += -DUSE_OPENGL_RENDERER
endif
@@ -200,6 +192,7 @@ LOCAL_SHARED_LIBRARIES := \
libETC1 \
libhardware \
libhardware_legacy \
+ libselinux \
libsonivox \
libcrypto \
libssl \
@@ -213,12 +206,6 @@ LOCAL_SHARED_LIBRARIES := \
libharfbuzz \
libz
-ifeq ($(HAVE_SELINUX),true)
-LOCAL_C_INCLUDES += external/libselinux/include
-LOCAL_SHARED_LIBRARIES += libselinux
-LOCAL_CFLAGS += -DHAVE_SELINUX
-endif # HAVE_SELINUX
-
ifeq ($(USE_OPENGL_RENDERER),true)
LOCAL_SHARED_LIBRARIES += libhwui
endif
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index 9820e60..94324f8 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -465,9 +465,7 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv)
kEMDefault,
kEMIntPortable,
kEMIntFast,
-#if defined(WITH_JIT)
kEMJitCompiler,
-#endif
} executionMode = kEMDefault;
@@ -487,10 +485,8 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv)
executionMode = kEMIntPortable;
} else if (strcmp(propBuf, "int:fast") == 0) {
executionMode = kEMIntFast;
-#if defined(WITH_JIT)
} else if (strcmp(propBuf, "int:jit") == 0) {
executionMode = kEMJitCompiler;
-#endif
}
property_get("dalvik.vm.stack-trace-file", stackTraceFileBuf, "");
@@ -660,7 +656,6 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv)
mOptions.add(opt);
}
-#if defined(WITH_JIT)
/* Force interpreter-only mode for selected opcodes. Eg "1-0a,3c,f1-ff" */
char jitOpBuf[sizeof("-Xjitop:") + PROPERTY_VALUE_MAX];
property_get("dalvik.vm.jit.op", propBuf, "");
@@ -680,7 +675,6 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv)
opt.optionString = jitMethodBuf;
mOptions.add(opt);
}
-#endif
if (executionMode == kEMIntPortable) {
opt.optionString = "-Xint:portable";
@@ -688,11 +682,9 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv)
} else if (executionMode == kEMIntFast) {
opt.optionString = "-Xint:fast";
mOptions.add(opt);
-#if defined(WITH_JIT)
} else if (executionMode == kEMJitCompiler) {
opt.optionString = "-Xint:jit";
mOptions.add(opt);
-#endif
}
if (checkDexSum) {
diff --git a/core/jni/android_database_SQLiteConnection.cpp b/core/jni/android_database_SQLiteConnection.cpp
index c9cf2fa..f70f0d1 100644
--- a/core/jni/android_database_SQLiteConnection.cpp
+++ b/core/jni/android_database_SQLiteConnection.cpp
@@ -706,7 +706,7 @@ static jlong nativeExecuteForCursorWindow(JNIEnv* env, jclass clazz,
}
CopyRowResult cpr = copyRow(env, window, statement, numColumns, startPos, addedRows);
- if (cpr == CPR_FULL && addedRows && startPos + addedRows < requiredPos) {
+ if (cpr == CPR_FULL && addedRows && startPos + addedRows <= requiredPos) {
// We filled the window before we got to the one row that we really wanted.
// Clear the window and start filling it again from here.
// TODO: Would be nicer if we could progressively replace earlier rows.
diff --git a/core/jni/android_ddm_DdmHandleNativeHeap.cpp b/core/jni/android_ddm_DdmHandleNativeHeap.cpp
index 42d408d..f5eaf94 100644
--- a/core/jni/android_ddm_DdmHandleNativeHeap.cpp
+++ b/core/jni/android_ddm_DdmHandleNativeHeap.cpp
@@ -2,16 +2,16 @@
**
** 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.
*/
@@ -23,20 +23,17 @@
#include <android_runtime/AndroidRuntime.h>
#include <utils/Log.h>
+#include <utils/String8.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
-#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);
-#endif
+extern "C" void get_malloc_leak_info(uint8_t** info, size_t* overallSize,
+ size_t* infoSize, size_t* totalMemory, size_t* backtraceSize);
-#define MAPS_FILE_SIZE 65 * 1024
+extern "C" void free_malloc_leak_info(uint8_t* info);
struct Header {
size_t mapSize;
@@ -48,96 +45,57 @@ struct Header {
namespace android {
+static void ReadFile(const char* path, String8& s) {
+ int fd = open(path, O_RDONLY);
+ if (fd != -1) {
+ char bytes[1024];
+ ssize_t byteCount;
+ while ((byteCount = TEMP_FAILURE_RETRY(read(fd, bytes, sizeof(bytes)))) > 0) {
+ s.append(bytes, byteCount);
+ }
+ close(fd);
+ }
+}
+
/*
- * Retrieve the native heap information and the info from /proc/<self>/maps,
+ * Retrieve the native heap information and the info from /proc/self/maps,
* copy them into a byte[] with a "struct Header" that holds data offsets,
* and return the array.
*/
-static jbyteArray getLeakInfo(JNIEnv *env, jobject clazz)
-{
-#if defined(__arm__)
- // get the info in /proc/[pid]/map
+static jbyteArray DdmHandleNativeHeap_getLeakInfo(JNIEnv* env, jobject) {
Header header;
memset(&header, 0, sizeof(header));
- pid_t pid = getpid();
-
- char path[FILENAME_MAX];
- sprintf(path, "/proc/%d/maps", pid);
-
- struct stat sb;
- int ret = stat(path, &sb);
-
- uint8_t* mapsFile = NULL;
- if (ret == 0) {
- mapsFile = (uint8_t*)malloc(MAPS_FILE_SIZE);
- int fd = open(path, O_RDONLY);
-
- if (mapsFile != NULL && fd != -1) {
- int amount = 0;
- do {
- uint8_t* ptr = mapsFile + header.mapSize;
- amount = read(fd, ptr, MAPS_FILE_SIZE);
- if (amount <= 0) {
- if (errno != EINTR)
- break;
- else
- continue;
- }
- header.mapSize += amount;
- } while (header.mapSize < MAPS_FILE_SIZE);
-
- ALOGD("**** read %d bytes from '%s'", (int) header.mapSize, path);
- }
- }
+ String8 maps;
+ ReadFile("/proc/self/maps", maps);
+ header.mapSize = maps.size();
uint8_t* allocBytes;
- get_malloc_leak_info(&allocBytes, &header.allocSize, &header.allocInfoSize,
- &header.totalMemory, &header.backtraceSize);
+ get_malloc_leak_info(&allocBytes, &header.allocSize, &header.allocInfoSize,
+ &header.totalMemory, &header.backtraceSize);
- jbyte* bytes = NULL;
- jbyte* ptr = NULL;
- jbyteArray array = env->NewByteArray(sizeof(Header) + header.mapSize + header.allocSize);
- if (array == NULL) {
- goto done;
- }
-
- bytes = env->GetByteArrayElements(array, NULL);
- ptr = bytes;
-
-// ALOGD("*** mapSize: %d allocSize: %d allocInfoSize: %d totalMemory: %d",
-// header.mapSize, header.allocSize, header.allocInfoSize, header.totalMemory);
+ ALOGD("*** mapSize: %d allocSize: %d allocInfoSize: %d totalMemory: %d",
+ header.mapSize, header.allocSize, header.allocInfoSize, header.totalMemory);
- memcpy(ptr, &header, sizeof(header));
- ptr += sizeof(header);
-
- if (header.mapSize > 0 && mapsFile != NULL) {
- memcpy(ptr, mapsFile, header.mapSize);
- ptr += header.mapSize;
+ jbyteArray array = env->NewByteArray(sizeof(Header) + header.mapSize + header.allocSize);
+ if (array != NULL) {
+ env->SetByteArrayRegion(array, 0,
+ sizeof(header), reinterpret_cast<jbyte*>(&header));
+ env->SetByteArrayRegion(array, sizeof(header),
+ maps.size(), reinterpret_cast<const jbyte*>(maps.string()));
+ env->SetByteArrayRegion(array, sizeof(header) + maps.size(),
+ header.allocSize, reinterpret_cast<jbyte*>(allocBytes));
}
-
- memcpy(ptr, allocBytes, header.allocSize);
- env->ReleaseByteArrayElements(array, bytes, 0);
-done:
- if (mapsFile != NULL) {
- free(mapsFile);
- }
- // free the info up!
free_malloc_leak_info(allocBytes);
-
return array;
-#else
- return NULL;
-#endif
}
static JNINativeMethod method_table[] = {
- { "getLeakInfo", "()[B", (void*)getLeakInfo },
+ { "getLeakInfo", "()[B", (void*) DdmHandleNativeHeap_getLeakInfo },
};
-int register_android_ddm_DdmHandleNativeHeap(JNIEnv *env)
-{
+int register_android_ddm_DdmHandleNativeHeap(JNIEnv* env) {
return AndroidRuntime::registerNativeMethods(env, "android/ddm/DdmHandleNativeHeap", method_table, NELEM(method_table));
}
diff --git a/core/jni/android_emoji_EmojiFactory.cpp b/core/jni/android_emoji_EmojiFactory.cpp
index a658561..4383997 100644
--- a/core/jni/android_emoji_EmojiFactory.cpp
+++ b/core/jni/android_emoji_EmojiFactory.cpp
@@ -3,8 +3,7 @@
#define LOG_TAG "EmojiFactory_jni"
#include <utils/Log.h>
-#include <utils/String8.h>
-#include <utils/String16.h>
+#include <ScopedUtfChars.h>
#include "EmojiFactory.h"
#include <nativehelper/JNIHelp.h>
@@ -125,16 +124,13 @@ static jobject android_emoji_EmojiFactory_newInstance(
return NULL;
}
- const jchar* jchars = env->GetStringChars(name, NULL);
- jsize len = env->GetStringLength(name);
- String8 str(String16(jchars, len));
+ ScopedUtfChars nameUtf(env, name);
- EmojiFactory *factory = gCaller->TryCallGetImplementation(str.string());
+ EmojiFactory *factory = gCaller->TryCallGetImplementation(nameUtf.c_str());
// EmojiFactory *factory = EmojiFactory::GetImplementation(str.string());
if (NULL == factory) {
return NULL;
}
- env->ReleaseStringChars(name, jchars);
return create_java_EmojiFactory(env, factory, name);
}
@@ -151,8 +147,8 @@ static jobject android_emoji_EmojiFactory_newAvailableInstance(
if (NULL == factory) {
return NULL;
}
- String16 name_16(String8(factory->Name()));
- jstring jname = env->NewString(name_16.string(), name_16.size());
+
+ jstring jname = env->NewStringUTF(factory->Name());
if (NULL == jname) {
return NULL;
}
diff --git a/core/jni/android_media_JetPlayer.cpp b/core/jni/android_media_JetPlayer.cpp
index a785f52..5795aba 100644
--- a/core/jni/android_media_JetPlayer.cpp
+++ b/core/jni/android_media_JetPlayer.cpp
@@ -130,9 +130,10 @@ android_media_JetPlayer_loadFromFile(JNIEnv *env, jobject thiz, jstring path)
{
JetPlayer *lpJet = (JetPlayer *)env->GetIntField(
thiz, javaJetPlayerFields.nativePlayerInJavaObj);
- if (lpJet == NULL ) {
+ if (lpJet == NULL) {
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for openFile()");
+ return JNI_FALSE;
}
// set up event callback function
@@ -166,9 +167,10 @@ android_media_JetPlayer_loadFromFileD(JNIEnv *env, jobject thiz,
{
JetPlayer *lpJet = (JetPlayer *)env->GetIntField(
thiz, javaJetPlayerFields.nativePlayerInJavaObj);
- if (lpJet == NULL ) {
+ if (lpJet == NULL) {
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for openFile()");
+ return JNI_FALSE;
}
// set up event callback function
@@ -195,9 +197,10 @@ android_media_JetPlayer_closeFile(JNIEnv *env, jobject thiz)
{
JetPlayer *lpJet = (JetPlayer *)env->GetIntField(
thiz, javaJetPlayerFields.nativePlayerInJavaObj);
- if (lpJet == NULL ) {
+ if (lpJet == NULL) {
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for closeFile()");
+ return JNI_FALSE;
}
if (lpJet->closeFile()==EAS_SUCCESS) {
@@ -216,9 +219,10 @@ android_media_JetPlayer_play(JNIEnv *env, jobject thiz)
{
JetPlayer *lpJet = (JetPlayer *)env->GetIntField(
thiz, javaJetPlayerFields.nativePlayerInJavaObj);
- if (lpJet == NULL ) {
+ if (lpJet == NULL) {
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for play()");
+ return JNI_FALSE;
}
EAS_RESULT result = lpJet->play();
@@ -239,9 +243,10 @@ android_media_JetPlayer_pause(JNIEnv *env, jobject thiz)
{
JetPlayer *lpJet = (JetPlayer *)env->GetIntField(
thiz, javaJetPlayerFields.nativePlayerInJavaObj);
- if (lpJet == NULL ) {
+ if (lpJet == NULL) {
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for pause()");
+ return JNI_FALSE;
}
EAS_RESULT result = lpJet->pause();
@@ -268,9 +273,10 @@ android_media_JetPlayer_queueSegment(JNIEnv *env, jobject thiz,
{
JetPlayer *lpJet = (JetPlayer *)env->GetIntField(
thiz, javaJetPlayerFields.nativePlayerInJavaObj);
- if (lpJet == NULL ) {
+ if (lpJet == NULL) {
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for queueSegment()");
+ return JNI_FALSE;
}
EAS_RESULT result
@@ -294,9 +300,10 @@ android_media_JetPlayer_queueSegmentMuteArray(JNIEnv *env, jobject thiz,
{
JetPlayer *lpJet = (JetPlayer *)env->GetIntField(
thiz, javaJetPlayerFields.nativePlayerInJavaObj);
- if (lpJet == NULL ) {
+ if (lpJet == NULL) {
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for queueSegmentMuteArray()");
+ return JNI_FALSE;
}
EAS_RESULT result=EAS_FAILURE;
@@ -339,9 +346,10 @@ android_media_JetPlayer_setMuteFlags(JNIEnv *env, jobject thiz,
{
JetPlayer *lpJet = (JetPlayer *)env->GetIntField(
thiz, javaJetPlayerFields.nativePlayerInJavaObj);
- if (lpJet == NULL ) {
+ if (lpJet == NULL) {
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for setMuteFlags()");
+ return JNI_FALSE;
}
EAS_RESULT result;
@@ -363,9 +371,10 @@ android_media_JetPlayer_setMuteArray(JNIEnv *env, jobject thiz,
{
JetPlayer *lpJet = (JetPlayer *)env->GetIntField(
thiz, javaJetPlayerFields.nativePlayerInJavaObj);
- if (lpJet == NULL ) {
+ if (lpJet == NULL) {
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for setMuteArray()");
+ return JNI_FALSE;
}
EAS_RESULT result=EAS_FAILURE;
@@ -408,9 +417,10 @@ android_media_JetPlayer_setMuteFlag(JNIEnv *env, jobject thiz,
{
JetPlayer *lpJet = (JetPlayer *)env->GetIntField(
thiz, javaJetPlayerFields.nativePlayerInJavaObj);
- if (lpJet == NULL ) {
+ if (lpJet == NULL) {
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for setMuteFlag()");
+ return JNI_FALSE;
}
EAS_RESULT result;
@@ -433,9 +443,10 @@ android_media_JetPlayer_triggerClip(JNIEnv *env, jobject thiz, jint clipId)
{
JetPlayer *lpJet = (JetPlayer *)env->GetIntField(
thiz, javaJetPlayerFields.nativePlayerInJavaObj);
- if (lpJet == NULL ) {
+ if (lpJet == NULL) {
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for triggerClip()");
+ return JNI_FALSE;
}
EAS_RESULT result;
@@ -457,9 +468,10 @@ android_media_JetPlayer_clearQueue(JNIEnv *env, jobject thiz)
{
JetPlayer *lpJet = (JetPlayer *)env->GetIntField(
thiz, javaJetPlayerFields.nativePlayerInJavaObj);
- if (lpJet == NULL ) {
+ if (lpJet == NULL) {
jniThrowException(env, "java/lang/IllegalStateException",
"Unable to retrieve JetPlayer pointer for clearQueue()");
+ return JNI_FALSE;
}
EAS_RESULT result = lpJet->clearQueue();
diff --git a/core/jni/android_media_ToneGenerator.cpp b/core/jni/android_media_ToneGenerator.cpp
index da6f1ed..de29b28 100644
--- a/core/jni/android_media_ToneGenerator.cpp
+++ b/core/jni/android_media_ToneGenerator.cpp
@@ -103,6 +103,7 @@ static void android_media_ToneGenerator_native_setup(JNIEnv *env, jobject thiz,
if (!lpToneGen->isInited()) {
ALOGE("ToneGenerator init failed");
jniThrowRuntimeException(env, "Init failed");
+ delete lpToneGen;
return;
}
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index 6724f36..2883c10 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -43,6 +43,7 @@ enum {
HEAP_UNKNOWN,
HEAP_DALVIK,
HEAP_NATIVE,
+ HEAP_STACK,
HEAP_CURSOR,
HEAP_ASHMEM,
HEAP_UNKNOWN_DEV,
@@ -109,7 +110,7 @@ static jlong android_os_Debug_getNativeHeapAllocatedSize(JNIEnv *env, jobject cl
static jlong android_os_Debug_getNativeHeapFreeSize(JNIEnv *env, jobject clazz)
{
-#ifdef HAVE_MALLOC_H
+#ifdef HAVE_MALLOC_H
struct mallinfo info = mallinfo();
return (jlong) info.fordblks;
#else
@@ -159,10 +160,13 @@ static void read_mapinfo(FILE *fp, stats_t* stats)
name = line + name_pos;
nameLen = strlen(name);
- if (strstr(name, "[heap]") == name) {
+ if ((strstr(name, "[heap]") == name) ||
+ (strstr(name, "/dev/ashmem/libc malloc") == name)) {
whichHeap = HEAP_NATIVE;
} else if (strstr(name, "/dev/ashmem/dalvik-") == name) {
whichHeap = HEAP_DALVIK;
+ } else if (strstr(name, "[stack") == name) {
+ whichHeap = HEAP_STACK;
} else if (strstr(name, "/dev/ashmem/CursorWindow") == name) {
whichHeap = HEAP_CURSOR;
} else if (strstr(name, "/dev/ashmem/") == name) {
@@ -177,7 +181,8 @@ static void read_mapinfo(FILE *fp, stats_t* stats)
whichHeap = HEAP_APK;
} else if (nameLen > 4 && strcmp(name+nameLen-4, ".ttf") == 0) {
whichHeap = HEAP_TTF;
- } else if (nameLen > 4 && strcmp(name+nameLen-4, ".dex") == 0) {
+ } else if ((nameLen > 4 && strcmp(name+nameLen-4, ".dex") == 0) ||
+ (nameLen > 5 && strcmp(name+nameLen-5, ".odex") == 0)) {
whichHeap = HEAP_DEX;
} else if (nameLen > 0) {
whichHeap = HEAP_UNKNOWN_MAP;
@@ -189,7 +194,7 @@ static void read_mapinfo(FILE *fp, stats_t* stats)
//ALOGI("native=%d dalvik=%d sqlite=%d: %s\n", isNativeHeap, isDalvikHeap,
// isSqliteHeap, line);
-
+
while (true) {
if (fgets(line, 1024, fp) == 0) {
done = true;
@@ -231,7 +236,7 @@ static void load_maps(int pid, stats_t* stats)
{
char tmp[128];
FILE *fp;
-
+
sprintf(tmp, "/proc/%d/smaps", pid);
fp = fopen(tmp, "r");
if (fp == 0) return;
@@ -245,7 +250,7 @@ static void android_os_Debug_getDirtyPagesPid(JNIEnv *env, jobject clazz,
{
stats_t stats[_NUM_HEAP];
memset(&stats, 0, sizeof(stats));
-
+
load_maps(pid, stats);
for (int i=_NUM_CORE_HEAP; i<_NUM_HEAP; i++) {
@@ -259,9 +264,9 @@ static void android_os_Debug_getDirtyPagesPid(JNIEnv *env, jobject clazz,
env->SetIntField(object, stat_fields[i].privateDirty_field, stats[i].privateDirty);
env->SetIntField(object, stat_fields[i].sharedDirty_field, stats[i].sharedDirty);
}
-
+
jintArray otherIntArray = (jintArray)env->GetObjectField(object, otherStats_field);
-
+
jint* otherArray = (jint*)env->GetPrimitiveArrayCritical(otherIntArray, 0);
if (otherArray == NULL) {
return;
@@ -326,7 +331,7 @@ static jint read_binder_stat(const char* stat)
char compare[128];
int len = snprintf(compare, 128, "proc %d", getpid());
-
+
// loop until we have the block that represents this process
do {
if (fgets(line, 1024, fp) == 0) {
@@ -334,15 +339,15 @@ static jint read_binder_stat(const char* stat)
}
} while (strncmp(compare, line, len));
- // now that we have this process, read until we find the stat that we are looking for
+ // now that we have this process, read until we find the stat that we are looking for
len = snprintf(compare, 128, " %s: ", stat);
-
+
do {
if (fgets(line, 1024, fp) == 0) {
return -1;
}
} while (strncmp(compare, line, len));
-
+
// we have the line, now increment the line ptr to the value
char* ptr = line + len;
return atoi(ptr);
@@ -508,7 +513,7 @@ static void android_os_Debug_dumpNativeHeap(JNIEnv* env, jobject clazz,
jobject fileDescriptor)
{
if (fileDescriptor == NULL) {
- jniThrowNullPointerException(env, NULL);
+ jniThrowNullPointerException(env, "fd == null");
return;
}
int origFd = jniGetFDFromFileDescriptor(env, fileDescriptor);
@@ -545,7 +550,7 @@ static void android_os_Debug_dumpNativeBacktraceToFile(JNIEnv* env, jobject claz
jint pid, jstring fileName)
{
if (fileName == NULL) {
- jniThrowNullPointerException(env, NULL);
+ jniThrowNullPointerException(env, "file == null");
return;
}
const jchar* str = env->GetStringCritical(fileName, 0);
@@ -609,6 +614,19 @@ int register_android_os_Debug(JNIEnv *env)
{
jclass clazz = env->FindClass("android/os/Debug$MemoryInfo");
+ // Sanity check the number of other statistics expected in Java matches here.
+ jfieldID numOtherStats_field = env->GetStaticFieldID(clazz, "NUM_OTHER_STATS", "I");
+ jint numOtherStats = env->GetStaticIntField(clazz, numOtherStats_field);
+ int expectedNumOtherStats = _NUM_HEAP - _NUM_CORE_HEAP;
+ if (numOtherStats != expectedNumOtherStats) {
+ jniThrowExceptionFmt(env, "java/lang/RuntimeException",
+ "android.os.Debug.Meminfo.NUM_OTHER_STATS=%d expected %d",
+ numOtherStats, expectedNumOtherStats);
+ return JNI_ERR;
+ }
+
+ otherStats_field = env->GetFieldID(clazz, "otherStats", "[I");
+
for (int i=0; i<_NUM_CORE_HEAP; i++) {
stat_fields[i].pss_field =
env->GetFieldID(clazz, stat_field_names[i].pss_name, "I");
@@ -618,8 +636,6 @@ int register_android_os_Debug(JNIEnv *env)
env->GetFieldID(clazz, stat_field_names[i].sharedDirty_name, "I");
}
- otherStats_field = env->GetFieldID(clazz, "otherStats", "[I");
-
return jniRegisterNativeMethods(env, "android/os/Debug", gMethods, NELEM(gMethods));
}
diff --git a/core/jni/android_os_SELinux.cpp b/core/jni/android_os_SELinux.cpp
index e813c38..0a97f39 100644
--- a/core/jni/android_os_SELinux.cpp
+++ b/core/jni/android_os_SELinux.cpp
@@ -20,486 +20,410 @@
#include "JNIHelp.h"
#include "jni.h"
#include "android_runtime/AndroidRuntime.h"
-#ifdef HAVE_SELINUX
#include "selinux/selinux.h"
#include "selinux/android.h"
-#endif
#include <errno.h>
+#include <ScopedLocalRef.h>
+#include <ScopedUtfChars.h>
+#include <UniquePtr.h>
namespace android {
- static jboolean isSELinuxDisabled = true;
-
- static void throw_NullPointerException(JNIEnv *env, const char* msg) {
- jclass clazz;
- clazz = env->FindClass("java/lang/NullPointerException");
- env->ThrowNew(clazz, msg);
- }
+struct SecurityContext_Delete {
+ void operator()(security_context_t p) const {
+ freecon(p);
+ }
+};
+typedef UniquePtr<char[], SecurityContext_Delete> Unique_SecurityContext;
- /*
- * Function: isSELinuxEnabled
- * Purpose: checks whether SELinux is enabled/disbaled
- * Parameters: none
- * Return value : true (enabled) or false (disabled)
- * Exceptions: none
- */
- static jboolean isSELinuxEnabled(JNIEnv *env, jobject classz) {
+static jboolean isSELinuxDisabled = true;
+/*
+ * Function: isSELinuxEnabled
+ * Purpose: checks whether SELinux is enabled/disbaled
+ * Parameters: none
+ * Return value : true (enabled) or false (disabled)
+ * Exceptions: none
+ */
+static jboolean isSELinuxEnabled(JNIEnv *env, jobject) {
return !isSELinuxDisabled;
- }
-
- /*
- * Function: isSELinuxEnforced
- * Purpose: return the current SELinux enforce mode
- * Parameters: none
- * Return value: true (enforcing) or false (permissive)
- * Exceptions: none
- */
- static jboolean isSELinuxEnforced(JNIEnv *env, jobject clazz) {
-#ifdef HAVE_SELINUX
+}
+
+/*
+ * Function: isSELinuxEnforced
+ * Purpose: return the current SELinux enforce mode
+ * Parameters: none
+ * Return value: true (enforcing) or false (permissive)
+ * Exceptions: none
+ */
+static jboolean isSELinuxEnforced(JNIEnv *env, jobject) {
return (security_getenforce() == 1) ? true : false;
-#else
- return false;
-#endif
- }
-
- /*
- * Function: setSELinuxEnforce
- * Purpose: set the SE Linux enforcing mode
- * Parameters: true (enforcing) or false (permissive)
- * Return value: true (success) or false (fail)
- * Exceptions: none
- */
- static jboolean setSELinuxEnforce(JNIEnv *env, jobject clazz, jboolean value) {
-#ifdef HAVE_SELINUX
- if (isSELinuxDisabled)
- return false;
-
- int enforce = (value) ? 1 : 0;
+}
+
+/*
+ * Function: setSELinuxEnforce
+ * Purpose: set the SE Linux enforcing mode
+ * Parameters: true (enforcing) or false (permissive)
+ * Return value: true (success) or false (fail)
+ * Exceptions: none
+ */
+static jboolean setSELinuxEnforce(JNIEnv *env, jobject, jboolean value) {
+ if (isSELinuxDisabled) {
+ return false;
+ }
+
+ int enforce = value ? 1 : 0;
return (security_setenforce(enforce) != -1) ? true : false;
-#else
- return false;
-#endif
- }
-
- /*
- * Function: getPeerCon
- * Purpose: retrieves security context of peer socket
- * Parameters:
- * fileDescriptor: peer socket file as a FileDescriptor object
- * Returns: jstring representing the security_context of socket or NULL if error
- * Exceptions: NullPointerException if fileDescriptor object is NULL
- */
- static jstring getPeerCon(JNIEnv *env, jobject clazz, jobject fileDescriptor) {
-#ifdef HAVE_SELINUX
- if (isSELinuxDisabled)
- return NULL;
+}
- if (fileDescriptor == NULL) {
- throw_NullPointerException(env, "Trying to check security context of a null peer socket.");
- return NULL;
+/*
+ * Function: getPeerCon
+ * Purpose: retrieves security context of peer socket
+ * Parameters:
+ * fileDescriptor: peer socket file as a FileDescriptor object
+ * Returns: jstring representing the security_context of socket or NULL if error
+ * Exceptions: NullPointerException if fileDescriptor object is NULL
+ */
+static jstring getPeerCon(JNIEnv *env, jobject, jobject fileDescriptor) {
+ if (isSELinuxDisabled) {
+ return NULL;
}
- security_context_t context = NULL;
- jstring securityString = NULL;
+ if (fileDescriptor == NULL) {
+ jniThrowNullPointerException(env,
+ "Trying to check security context of a null peer socket.");
+ return NULL;
+ }
int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
-
if (env->ExceptionOccurred() != NULL) {
- ALOGE("There was an issue with retrieving the file descriptor");
- goto bail;
+ ALOGE("getPeerCon => getFD for %p failed", fileDescriptor);
+ return NULL;
}
- if (getpeercon(fd, &context) == -1)
- goto bail;
+ security_context_t tmp;
+ int ret = getpeercon(fd, &tmp);
+ Unique_SecurityContext context(tmp);
- ALOGV("getPeerCon: Successfully retrived context of peer socket '%s'", context);
+ ScopedLocalRef<jstring> contextStr(env, NULL);
+ if (ret != -1) {
+ contextStr.reset(env->NewStringUTF(context.get()));
+ }
- securityString = env->NewStringUTF(context);
+ ALOGV("getPeerCon(%d) => %s", fd, contextStr.get());
+ return contextStr.release();
+}
- bail:
- if (context != NULL)
- freecon(context);
+/*
+ * Function: setFSCreateCon
+ * Purpose: set security context used for creating a new file system object
+ * Parameters:
+ * context: security_context_t representing the new context of a file system object,
+ * set to NULL to return to the default policy behavior
+ * Returns: true on success, false on error
+ * Exception: none
+ */
+static jboolean setFSCreateCon(JNIEnv *env, jobject, jstring contextStr) {
+ if (isSELinuxDisabled) {
+ return false;
+ }
- return securityString;
-#else
- return NULL;
-#endif
- }
+ UniquePtr<ScopedUtfChars> context;
+ const char* context_c_str = NULL;
+ if (contextStr != NULL) {
+ context.reset(new ScopedUtfChars(env, contextStr));
+ context_c_str = context->c_str();
+ if (context_c_str == NULL) {
+ return false;
+ }
+ }
- /*
- * Function: setFSCreateCon
- * Purpose: set security context used for creating a new file system object
- * Parameters:
- * context: security_context_t representing the new context of a file system object,
- * set to NULL to return to the default policy behavior
- * Returns: true on success, false on error
- * Exception: none
- */
- static jboolean setFSCreateCon(JNIEnv *env, jobject clazz, jstring context) {
-#ifdef HAVE_SELINUX
- if (isSELinuxDisabled)
- return false;
+ int ret = setfscreatecon(const_cast<char *>(context_c_str));
- char * securityContext = NULL;
- const char *constant_securityContext = NULL;
+ ALOGV("setFSCreateCon(%s) => %d", context_c_str, ret);
- if (context != NULL) {
- constant_securityContext = env->GetStringUTFChars(context, NULL);
+ return (ret == 0) ? true : false;
+}
- // GetStringUTFChars returns const char * yet setfscreatecon needs char *
- securityContext = const_cast<char *>(constant_securityContext);
+/*
+ * Function: setFileCon
+ * Purpose: set the security context of a file object
+ * Parameters:
+ * path: the location of the file system object
+ * context: the new security context of the file system object
+ * Returns: true on success, false on error
+ * Exception: NullPointerException is thrown if either path or context strign are NULL
+ */
+static jboolean setFileCon(JNIEnv *env, jobject, jstring pathStr, jstring contextStr) {
+ if (isSELinuxDisabled) {
+ return false;
}
- int ret;
- if ((ret = setfscreatecon(securityContext)) == -1)
- goto bail;
+ ScopedUtfChars path(env, pathStr);
+ if (path.c_str() == NULL) {
+ return false;
+ }
- ALOGV("setFSCreateCon: set new security context to '%s' ", context == NULL ? "default", context);
+ ScopedUtfChars context(env, contextStr);
+ if (context.c_str() == NULL) {
+ return false;
+ }
- bail:
- if (constant_securityContext != NULL)
- env->ReleaseStringUTFChars(context, constant_securityContext);
+ // GetStringUTFChars returns const char * yet setfilecon needs char *
+ char *tmp = const_cast<char *>(context.c_str());
+ int ret = setfilecon(path.c_str(), tmp);
+ ALOGV("setFileCon(%s, %s) => %d", path.c_str(), context.c_str(), ret);
return (ret == 0) ? true : false;
-#else
- return false;
-#endif
- }
-
- /*
- * Function: setFileCon
- * Purpose: set the security context of a file object
- * Parameters:
- * path: the location of the file system object
- * con: the new security context of the file system object
- * Returns: true on success, false on error
- * Exception: NullPointerException is thrown if either path or context strign are NULL
- */
- static jboolean setFileCon(JNIEnv *env, jobject clazz, jstring path, jstring con) {
-#ifdef HAVE_SELINUX
- if (isSELinuxDisabled)
- return false;
-
- if (path == NULL) {
- throw_NullPointerException(env, "Trying to change the security context of a NULL file object.");
- return false;
- }
-
- if (con == NULL) {
- throw_NullPointerException(env, "Trying to set the security context of a file object with NULL.");
- return false;
- }
-
- const char *objectPath = env->GetStringUTFChars(path, NULL);
- const char *constant_con = env->GetStringUTFChars(con, NULL);
+}
- // GetStringUTFChars returns const char * yet setfilecon needs char *
- char *newCon = const_cast<char *>(constant_con);
+/*
+ * Function: getFileCon
+ * Purpose: retrieves the context associated with the given path in the file system
+ * Parameters:
+ * path: given path in the file system
+ * Returns:
+ * string representing the security context string of the file object
+ * the string may be NULL if an error occured
+ * Exceptions: NullPointerException if the path object is null
+ */
+static jstring getFileCon(JNIEnv *env, jobject, jstring pathStr) {
+ if (isSELinuxDisabled) {
+ return NULL;
+ }
- int ret;
- if ((ret = setfilecon(objectPath, newCon)) == -1)
- goto bail;
+ ScopedUtfChars path(env, pathStr);
+ if (path.c_str() == NULL) {
+ return NULL;
+ }
- ALOGV("setFileCon: Succesfully set security context '%s' for '%s'", newCon, objectPath);
+ security_context_t tmp;
+ int ret = getfilecon(path.c_str(), &tmp);
+ Unique_SecurityContext context(tmp);
- bail:
- env->ReleaseStringUTFChars(path, objectPath);
- env->ReleaseStringUTFChars(con, constant_con);
- return (ret == 0) ? true : false;
-#else
- return false;
-#endif
- }
-
- /*
- * Function: getFileCon
- * Purpose: retrieves the context associated with the given path in the file system
- * Parameters:
- * path: given path in the file system
- * Returns:
- * string representing the security context string of the file object
- * the string may be NULL if an error occured
- * Exceptions: NullPointerException if the path object is null
- */
- static jstring getFileCon(JNIEnv *env, jobject clazz, jstring path) {
-#ifdef HAVE_SELINUX
- if (isSELinuxDisabled)
- return NULL;
-
- if (path == NULL) {
- throw_NullPointerException(env, "Trying to check security context of a null path.");
- return NULL;
- }
-
- const char *objectPath = env->GetStringUTFChars(path, NULL);
-
- security_context_t context = NULL;
- jstring securityString = NULL;
-
- if (getfilecon(objectPath, &context) == -1)
- goto bail;
-
- ALOGV("getFileCon: Successfully retrived context '%s' for file '%s'", context, objectPath);
-
- securityString = env->NewStringUTF(context);
-
- bail:
- if (context != NULL)
- freecon(context);
-
- env->ReleaseStringUTFChars(path, objectPath);
-
- return securityString;
-#else
- return NULL;
-#endif
- }
-
- /*
- * Function: getCon
- * Purpose: Get the context of the current process.
- * Parameters: none
- * Returns: a jstring representing the security context of the process,
- * the jstring may be NULL if there was an error
- * Exceptions: none
- */
- static jstring getCon(JNIEnv *env, jobject clazz) {
-#ifdef HAVE_SELINUX
- if (isSELinuxDisabled)
- return NULL;
-
- security_context_t context = NULL;
- jstring securityString = NULL;
-
- if (getcon(&context) == -1)
- goto bail;
-
- ALOGV("getCon: Successfully retrieved context '%s'", context);
-
- securityString = env->NewStringUTF(context);
-
- bail:
- if (context != NULL)
- freecon(context);
-
- return securityString;
-#else
- return NULL;
-#endif
- }
-
- /*
- * Function: getPidCon
- * Purpose: Get the context of a process identified by its pid
- * Parameters:
- * pid: a jint representing the process
- * Returns: a jstring representing the security context of the pid,
- * the jstring may be NULL if there was an error
- * Exceptions: none
- */
- static jstring getPidCon(JNIEnv *env, jobject clazz, jint pid) {
-#ifdef HAVE_SELINUX
- if (isSELinuxDisabled)
- return NULL;
-
- security_context_t context = NULL;
- jstring securityString = NULL;
-
- pid_t checkPid = (pid_t)pid;
-
- if (getpidcon(checkPid, &context) == -1)
- goto bail;
-
- ALOGV("getPidCon: Successfully retrived context '%s' for pid '%d'", context, checkPid);
-
- securityString = env->NewStringUTF(context);
-
- bail:
- if (context != NULL)
- freecon(context);
-
- return securityString;
-#else
- return NULL;
-#endif
- }
-
- /*
- * Function: getBooleanNames
- * Purpose: Gets a list of the SELinux boolean names.
- * Parameters: None
- * Returns: an array of strings containing the SELinux boolean names.
- * returns NULL string on error
- * Exceptions: None
- */
- static jobjectArray getBooleanNames(JNIEnv *env, JNIEnv clazz) {
-#ifdef HAVE_SELINUX
- if (isSELinuxDisabled)
- return NULL;
+ ScopedLocalRef<jstring> securityString(env, NULL);
+ if (ret != -1) {
+ securityString.reset(env->NewStringUTF(context.get()));
+ }
+
+ ALOGV("getFileCon(%s) => %s", path.c_str(), context.get());
+ return securityString.release();
+}
+
+/*
+ * Function: getCon
+ * Purpose: Get the context of the current process.
+ * Parameters: none
+ * Returns: a jstring representing the security context of the process,
+ * the jstring may be NULL if there was an error
+ * Exceptions: none
+ */
+static jstring getCon(JNIEnv *env, jobject) {
+ if (isSELinuxDisabled) {
+ return NULL;
+ }
+
+ security_context_t tmp;
+ int ret = getcon(&tmp);
+ Unique_SecurityContext context(tmp);
+
+ ScopedLocalRef<jstring> securityString(env, NULL);
+ if (ret != -1) {
+ securityString.reset(env->NewStringUTF(context.get()));
+ }
+
+ ALOGV("getCon() => %s", context.get());
+ return securityString.release();
+}
+
+/*
+ * Function: getPidCon
+ * Purpose: Get the context of a process identified by its pid
+ * Parameters:
+ * pid: a jint representing the process
+ * Returns: a jstring representing the security context of the pid,
+ * the jstring may be NULL if there was an error
+ * Exceptions: none
+ */
+static jstring getPidCon(JNIEnv *env, jobject, jint pid) {
+ if (isSELinuxDisabled) {
+ return NULL;
+ }
+
+ security_context_t tmp;
+ int ret = getpidcon(static_cast<pid_t>(pid), &tmp);
+ Unique_SecurityContext context(tmp);
+
+ ScopedLocalRef<jstring> securityString(env, NULL);
+ if (ret != -1) {
+ securityString.reset(env->NewStringUTF(context.get()));
+ }
+
+ ALOGV("getPidCon(%d) => %s", pid, context.get());
+ return securityString.release();
+}
+
+/*
+ * Function: getBooleanNames
+ * Purpose: Gets a list of the SELinux boolean names.
+ * Parameters: None
+ * Returns: an array of strings containing the SELinux boolean names.
+ * returns NULL string on error
+ * Exceptions: None
+ */
+static jobjectArray getBooleanNames(JNIEnv *env, JNIEnv) {
+ if (isSELinuxDisabled) {
+ return NULL;
+ }
char **list;
- int i, len, ret;
- jclass stringClass;
- jobjectArray stringArray = NULL;
-
- if (security_get_boolean_names(&list, &len) == -1)
- return NULL;
-
- stringClass = env->FindClass("java/lang/String");
- stringArray = env->NewObjectArray(len, stringClass, env->NewStringUTF(""));
- for (i = 0; i < len; i++) {
- jstring obj;
- obj = env->NewStringUTF(list[i]);
- env->SetObjectArrayElement(stringArray, i, obj);
- env->DeleteLocalRef(obj);
- free(list[i]);
+ int len;
+ if (security_get_boolean_names(&list, &len) == -1) {
+ return NULL;
+ }
+
+ jclass stringClass = env->FindClass("java/lang/String");
+ jobjectArray stringArray = env->NewObjectArray(len, stringClass, NULL);
+ for (int i = 0; i < len; i++) {
+ ScopedLocalRef<jstring> obj(env, env->NewStringUTF(list[i]));
+ env->SetObjectArrayElement(stringArray, i, obj.get());
+ free(list[i]);
}
free(list);
return stringArray;
-#else
- return NULL;
-#endif
- }
-
- /*
- * Function: getBooleanValue
- * Purpose: Gets the value for the given SELinux boolean name.
- * Parameters:
- * String: The name of the SELinux boolean.
- * Returns: a boolean: (true) boolean is set or (false) it is not.
- * Exceptions: None
- */
- static jboolean getBooleanValue(JNIEnv *env, jobject clazz, jstring name) {
-#ifdef HAVE_SELINUX
- if (isSELinuxDisabled)
- return false;
-
- const char *boolean_name;
- int ret;
-
- if (name == NULL)
- return false;
- boolean_name = env->GetStringUTFChars(name, NULL);
- ret = security_get_boolean_active(boolean_name);
- env->ReleaseStringUTFChars(name, boolean_name);
+}
+
+/*
+ * Function: getBooleanValue
+ * Purpose: Gets the value for the given SELinux boolean name.
+ * Parameters:
+ * String: The name of the SELinux boolean.
+ * Returns: a boolean: (true) boolean is set or (false) it is not.
+ * Exceptions: None
+ */
+static jboolean getBooleanValue(JNIEnv *env, jobject, jstring nameStr) {
+ if (isSELinuxDisabled) {
+ return false;
+ }
+
+ if (nameStr == NULL) {
+ return false;
+ }
+
+ ScopedUtfChars name(env, nameStr);
+ int ret = security_get_boolean_active(name.c_str());
+
+ ALOGV("getBooleanValue(%s) => %d", name.c_str(), ret);
return (ret == 1) ? true : false;
-#else
- return false;
-#endif
- }
-
- /*
- * Function: setBooleanNames
- * Purpose: Sets the value for the given SELinux boolean name.
- * Parameters:
- * String: The name of the SELinux boolean.
- * Boolean: The new value of the SELinux boolean.
- * Returns: a boolean indicating whether or not the operation succeeded.
- * Exceptions: None
- */
- static jboolean setBooleanValue(JNIEnv *env, jobject clazz, jstring name, jboolean value) {
-#ifdef HAVE_SELINUX
- if (isSELinuxDisabled)
- return false;
-
- const char *boolean_name = NULL;
- int ret;
-
- if (name == NULL)
- return false;
- boolean_name = env->GetStringUTFChars(name, NULL);
- ret = security_set_boolean(boolean_name, (value) ? 1 : 0);
- env->ReleaseStringUTFChars(name, boolean_name);
- if (ret)
- return false;
-
- if (security_commit_booleans() == -1)
- return false;
+}
+
+/*
+ * Function: setBooleanNames
+ * Purpose: Sets the value for the given SELinux boolean name.
+ * Parameters:
+ * String: The name of the SELinux boolean.
+ * Boolean: The new value of the SELinux boolean.
+ * Returns: a boolean indicating whether or not the operation succeeded.
+ * Exceptions: None
+ */
+static jboolean setBooleanValue(JNIEnv *env, jobject, jstring nameStr, jboolean value) {
+ if (isSELinuxDisabled) {
+ return false;
+ }
+
+ if (nameStr == NULL) {
+ return false;
+ }
+
+ ScopedUtfChars name(env, nameStr);
+ int ret = security_set_boolean(name.c_str(), value ? 1 : 0);
+ if (ret) {
+ return false;
+ }
+
+ if (security_commit_booleans() == -1) {
+ return false;
+ }
return true;
-#else
- return false;
-#endif
- }
-
- /*
- * Function: checkSELinuxAccess
- * Purpose: Check permissions between two security contexts.
- * Parameters: scon: subject security context as a string
- * tcon: object security context as a string
- * tclass: object's security class name as a string
- * perm: permission name as a string
- * Returns: boolean: (true) if permission was granted, (false) otherwise
- * Exceptions: None
- */
- static jboolean checkSELinuxAccess(JNIEnv *env, jobject clazz, jstring scon, jstring tcon, jstring tclass, jstring perm) {
-#ifdef HAVE_SELINUX
- if (isSELinuxDisabled)
- return true;
-
- int accessGranted = -1;
-
- const char *const_scon, *const_tcon, *mytclass, *myperm;
- char *myscon, *mytcon;
-
- if (scon == NULL || tcon == NULL || tclass == NULL || perm == NULL)
- goto bail;
-
- const_scon = env->GetStringUTFChars(scon, NULL);
- const_tcon = env->GetStringUTFChars(tcon, NULL);
- mytclass = env->GetStringUTFChars(tclass, NULL);
- myperm = env->GetStringUTFChars(perm, NULL);
-
- // selinux_check_access needs char* for some
- myscon = const_cast<char *>(const_scon);
- mytcon = const_cast<char *>(const_tcon);
-
- accessGranted = selinux_check_access(myscon, mytcon, mytclass, myperm, NULL);
-
- ALOGV("selinux_check_access returned %d", accessGranted);
-
- env->ReleaseStringUTFChars(scon, const_scon);
- env->ReleaseStringUTFChars(tcon, const_tcon);
- env->ReleaseStringUTFChars(tclass, mytclass);
- env->ReleaseStringUTFChars(perm, myperm);
-
- bail:
+}
+
+/*
+ * Function: checkSELinuxAccess
+ * Purpose: Check permissions between two security contexts.
+ * Parameters: subjectContextStr: subject security context as a string
+ * objectContextStr: object security context as a string
+ * objectClassStr: object's security class name as a string
+ * permissionStr: permission name as a string
+ * Returns: boolean: (true) if permission was granted, (false) otherwise
+ * Exceptions: None
+ */
+static jboolean checkSELinuxAccess(JNIEnv *env, jobject, jstring subjectContextStr,
+ jstring objectContextStr, jstring objectClassStr, jstring permissionStr) {
+ if (isSELinuxDisabled) {
+ return true;
+ }
+
+ ScopedUtfChars subjectContext(env, subjectContextStr);
+ if (subjectContext.c_str() == NULL) {
+ return false;
+ }
+
+ ScopedUtfChars objectContext(env, objectContextStr);
+ if (objectContext.c_str() == NULL) {
+ return false;
+ }
+
+ ScopedUtfChars objectClass(env, objectClassStr);
+ if (objectClass.c_str() == NULL) {
+ return false;
+ }
+
+ ScopedUtfChars permission(env, permissionStr);
+ if (permission.c_str() == NULL) {
+ return false;
+ }
+
+ char *tmp1 = const_cast<char *>(subjectContext.c_str());
+ char *tmp2 = const_cast<char *>(objectContext.c_str());
+ int accessGranted = selinux_check_access(tmp1, tmp2, objectClass.c_str(), permission.c_str(),
+ NULL);
+
+ ALOGV("checkSELinuxAccess(%s, %s, %s, %s) => %d", subjectContext.c_str(), objectContext.c_str(),
+ objectClass.c_str(), permission.c_str(), accessGranted);
+
return (accessGranted == 0) ? true : false;
+}
-#else
- return true;
-#endif
- }
-
- /*
- * Function: native_restorecon
- * Purpose: restore default SELinux security context
- * Parameters: pathname: the pathname for the file to be relabeled
- * Returns: boolean: (true) file label successfully restored, (false) otherwise
- * Exceptions: none
- */
- static jboolean native_restorecon(JNIEnv *env, jobject clazz, jstring pathname) {
-#ifdef HAVE_SELINUX
- if (isSELinuxDisabled)
- return true;
-
- const char *file = const_cast<char *>(env->GetStringUTFChars(pathname, NULL));
- int ret = selinux_android_restorecon(file);
- env->ReleaseStringUTFChars(pathname, file);
- return (ret == 0);
-#else
- return true;
-#endif
- }
+/*
+ * Function: native_restorecon
+ * Purpose: restore default SELinux security context
+ * Parameters: pathname: the pathname for the file to be relabeled
+ * Returns: boolean: (true) file label successfully restored, (false) otherwise
+ * Exceptions: none
+ */
+static jboolean native_restorecon(JNIEnv *env, jobject, jstring pathnameStr) {
+ if (isSELinuxDisabled) {
+ return true;
+ }
- /*
- * JNI registration.
- */
- static JNINativeMethod method_table[] = {
+ ScopedUtfChars pathname(env, pathnameStr);
+ if (pathname.c_str() == NULL) {
+ ALOGV("restorecon(%p) => threw exception", pathname);
+ return false;
+ }
+ int ret = selinux_android_restorecon(pathname.c_str());
+ ALOGV("restorecon(%s) => %d", pathname.c_str(), ret);
+ return (ret == 0);
+}
+
+/*
+ * JNI registration.
+ */
+static JNINativeMethod method_table[] = {
/* name, signature, funcPtr */
{ "checkSELinuxAccess" , "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z" , (void*)checkSELinuxAccess },
{ "getBooleanNames" , "()[Ljava/lang/String;" , (void*)getBooleanNames },
@@ -515,27 +439,25 @@ namespace android {
{ "setFileContext" , "(Ljava/lang/String;Ljava/lang/String;)Z" , (void*)setFileCon },
{ "setFSCreateContext" , "(Ljava/lang/String;)Z" , (void*)setFSCreateCon },
{ "setSELinuxEnforce" , "(Z)Z" , (void*)setSELinuxEnforce},
- };
+};
- static int log_callback(int type, const char *fmt, ...) {
+static int log_callback(int type, const char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
LOG_PRI_VA(ANDROID_LOG_ERROR, "SELinux", fmt, ap);
va_end(ap);
return 0;
- }
+}
- int register_android_os_SELinux(JNIEnv *env) {
-#ifdef HAVE_SELINUX
+int register_android_os_SELinux(JNIEnv *env) {
union selinux_callback cb;
cb.func_log = log_callback;
selinux_set_callback(SELINUX_CB_LOG, cb);
isSELinuxDisabled = (is_selinux_enabled() != 1) ? true : false;
-#endif
- return AndroidRuntime::registerNativeMethods(
- env, "android/os/SELinux",
- method_table, NELEM(method_table));
- }
+ return AndroidRuntime::registerNativeMethods(env, "android/os/SELinux", method_table,
+ NELEM(method_table));
+}
+
}
diff --git a/core/jni/android_text_format_Time.cpp b/core/jni/android_text_format_Time.cpp
index 0a59ae7..aa2c5f39 100644
--- a/core/jni/android_text_format_Time.cpp
+++ b/core/jni/android_text_format_Time.cpp
@@ -23,6 +23,7 @@
#include "jni.h"
#include "utils/misc.h"
#include "android_runtime/AndroidRuntime.h"
+#include "ScopedStringChars.h"
#include "TimeUtils.h"
#include <nativehelper/JNIHelp.h>
#include <cutils/tztime.h>
@@ -71,11 +72,10 @@ static inline bool java2time(JNIEnv* env, Time* t, jobject o)
t->t.tm_gmtoff = env->GetLongField(o, g_gmtoffField);
bool allDay = env->GetBooleanField(o, g_allDayField);
if (allDay &&
- ((t->t.tm_sec !=0) || (t->t.tm_min != 0) || (t->t.tm_hour != 0))) {
- char msg[100];
- sprintf(msg, "allDay is true but sec, min, hour are not 0.");
- jniThrowException(env, "java/lang/IllegalArgumentException", msg);
- return false;
+ ((t->t.tm_sec !=0) || (t->t.tm_min != 0) || (t->t.tm_hour != 0))) {
+ jniThrowException(env, "java/lang/IllegalArgumentException",
+ "allDay is true but sec, min, hour are not 0.");
+ return false;
}
return true;
}
@@ -313,7 +313,7 @@ static jstring android_text_format_Time_format(JNIEnv* env, jobject This,
static jstring android_text_format_Time_toString(JNIEnv* env, jobject This)
{
Time t;
- if (!java2time(env, &t, This)) return env->NewStringUTF("");;
+ if (!java2time(env, &t, This)) return env->NewStringUTF("");
ACQUIRE_TIMEZONE(This, t)
String8 r = t.toString();
@@ -365,32 +365,30 @@ static void android_text_format_Time_set(JNIEnv* env, jobject This, jlong millis
// ============================================================================
// Just do this here because it's not worth recreating the strings
-static int get_char(JNIEnv* env, const jchar *s, int spos, int mul,
- bool *thrown)
+static int get_char(JNIEnv* env, const ScopedStringChars& s, int spos, int mul,
+ bool* thrown)
{
jchar c = s[spos];
if (c >= '0' && c <= '9') {
return (c - '0') * mul;
} else {
if (!*thrown) {
- char msg[100];
- sprintf(msg, "Parse error at pos=%d", spos);
- jniThrowException(env, "android/util/TimeFormatException", msg);
+ jniThrowExceptionFmt(env, "android/util/TimeFormatException",
+ "Parse error at pos=%d", spos);
*thrown = true;
}
return 0;
}
}
-static bool check_char(JNIEnv* env, const jchar *s, int spos, jchar expected)
+static bool check_char(JNIEnv* env, const ScopedStringChars& s, int spos, jchar expected)
{
jchar c = s[spos];
if (c != expected) {
- char msg[100];
- sprintf(msg, "Unexpected character 0x%02x at pos=%d. Expected %c.", c, spos,
- expected);
- jniThrowException(env, "android/util/TimeFormatException", msg);
- return false;
+ jniThrowExceptionFmt(env, "android/util/TimeFormatException",
+ "Unexpected character 0x%02x at pos=%d. Expected %c.",
+ c, spos, expected);
+ return false;
}
return true;
}
@@ -399,20 +397,19 @@ static bool check_char(JNIEnv* env, const jchar *s, int spos, jchar expected)
static jboolean android_text_format_Time_parse(JNIEnv* env, jobject This, jstring strObj)
{
jsize len = env->GetStringLength(strObj);
- const jchar *s = env->GetStringChars(strObj, NULL);
+ if (len < 8) {
+ jniThrowException(env, "android/util/TimeFormatException",
+ "String too short -- expected at least 8 characters.");
+ return false;
+ }
- bool thrown = false;
- int n;
jboolean inUtc = false;
- if (len < 8) {
- char msg[100];
- sprintf(msg, "String too short -- expected at least 8 characters.");
- jniThrowException(env, "android/util/TimeFormatException", msg);
- return false;
- }
+ ScopedStringChars s(env, strObj);
// year
+ int n;
+ bool thrown = false;
n = get_char(env, s, 0, 1000, &thrown);
n += get_char(env, s, 1, 100, &thrown);
n += get_char(env, s, 2, 10, &thrown);
@@ -459,7 +456,7 @@ static jboolean android_text_format_Time_parse(JNIEnv* env, jobject This, jstrin
if (len > 15) {
// Z
if (!check_char(env, s, 15, 'Z')) return false;
- inUtc = true;
+ inUtc = true;
}
} else {
env->SetBooleanField(This, g_allDayField, JNI_TRUE);
@@ -472,8 +469,7 @@ static jboolean android_text_format_Time_parse(JNIEnv* env, jobject This, jstrin
env->SetIntField(This, g_ydayField, 0);
env->SetIntField(This, g_isdstField, -1);
env->SetLongField(This, g_gmtoffField, 0);
-
- env->ReleaseStringChars(strObj, s);
+
return inUtc;
}
@@ -482,19 +478,19 @@ static jboolean android_text_format_Time_parse3339(JNIEnv* env,
jstring strObj)
{
jsize len = env->GetStringLength(strObj);
- const jchar *s = env->GetStringChars(strObj, NULL);
-
- bool thrown = false;
- int n;
- jboolean inUtc = false;
-
if (len < 10) {
jniThrowException(env, "android/util/TimeFormatException",
- "Time input is too short; must be at least 10 characters");
+ "String too short --- expected at least 10 characters.");
return false;
}
+ jboolean inUtc = false;
+
+ ScopedStringChars s(env, strObj);
+
// year
+ int n;
+ bool thrown = false;
n = get_char(env, s, 0, 1000, &thrown);
n += get_char(env, s, 1, 100, &thrown);
n += get_char(env, s, 2, 10, &thrown);
@@ -525,28 +521,28 @@ static jboolean android_text_format_Time_parse3339(JNIEnv* env,
// T
if (!check_char(env, s, 10, 'T')) return false;
- env->SetBooleanField(This, g_allDayField, JNI_FALSE);
+ env->SetBooleanField(This, g_allDayField, JNI_FALSE);
// hour
n = get_char(env, s, 11, 10, &thrown);
n += get_char(env, s, 12, 1, &thrown);
if (thrown) return false;
- int hour = n;
+ int hour = n;
// env->SetIntField(This, g_hourField, n);
-
- // :
- if (!check_char(env, s, 13, ':')) return false;
- // minute
+ // :
+ if (!check_char(env, s, 13, ':')) return false;
+
+ // minute
n = get_char(env, s, 14, 10, &thrown);
n += get_char(env, s, 15, 1, &thrown);
if (thrown) return false;
- int minute = n;
+ int minute = n;
// env->SetIntField(This, g_minField, n);
- // :
- if (!check_char(env, s, 16, ':')) return false;
+ // :
+ if (!check_char(env, s, 16, ':')) return false;
- // second
+ // second
n = get_char(env, s, 17, 10, &thrown);
n += get_char(env, s, 18, 1, &thrown);
if (thrown) return false;
@@ -566,64 +562,63 @@ static jboolean android_text_format_Time_parse3339(JNIEnv* env,
if (len > tz_index) {
char c = s[tz_index];
- // NOTE: the offset is meant to be subtracted to get from local time
- // to UTC. we therefore use 1 for '-' and -1 for '+'.
- switch (c) {
- case 'Z':
- // Zulu time -- UTC
- offset = 0;
- break;
- case '-':
+ // NOTE: the offset is meant to be subtracted to get from local time
+ // to UTC. we therefore use 1 for '-' and -1 for '+'.
+ switch (c) {
+ case 'Z':
+ // Zulu time -- UTC
+ offset = 0;
+ break;
+ case '-':
offset = 1;
- break;
- case '+':
+ break;
+ case '+':
offset = -1;
- break;
- default:
- char msg[100];
- sprintf(msg, "Unexpected character 0x%02x at position %d. Expected + or -",
- c, tz_index);
- jniThrowException(env, "android/util/TimeFormatException", msg);
- return false;
- }
+ break;
+ default:
+ jniThrowExceptionFmt(env, "android/util/TimeFormatException",
+ "Unexpected character 0x%02x at position %d. Expected + or -",
+ c, tz_index);
+ return false;
+ }
inUtc = true;
- if (offset != 0) {
- if (len < tz_index + 6) {
- char msg[100];
- sprintf(msg, "Unexpected length; should be %d characters", tz_index + 6);
- jniThrowException(env, "android/util/TimeFormatException", msg);
- return false;
- }
-
- // hour
- n = get_char(env, s, tz_index + 1, 10, &thrown);
- n += get_char(env, s, tz_index + 2, 1, &thrown);
- if (thrown) return false;
- n *= offset;
- hour += n;
-
- // :
- if (!check_char(env, s, tz_index + 3, ':')) return false;
-
- // minute
- n = get_char(env, s, tz_index + 4, 10, &thrown);
- n += get_char(env, s, tz_index + 5, 1, &thrown);
- if (thrown) return false;
- n *= offset;
- minute += n;
- }
- }
- env->SetIntField(This, g_hourField, hour);
+ if (offset != 0) {
+ if (len < tz_index + 6) {
+ jniThrowExceptionFmt(env, "android/util/TimeFormatException",
+ "Unexpected length; should be %d characters",
+ tz_index + 6);
+ return false;
+ }
+
+ // hour
+ n = get_char(env, s, tz_index + 1, 10, &thrown);
+ n += get_char(env, s, tz_index + 2, 1, &thrown);
+ if (thrown) return false;
+ n *= offset;
+ hour += n;
+
+ // :
+ if (!check_char(env, s, tz_index + 3, ':')) return false;
+
+ // minute
+ n = get_char(env, s, tz_index + 4, 10, &thrown);
+ n += get_char(env, s, tz_index + 5, 1, &thrown);
+ if (thrown) return false;
+ n *= offset;
+ minute += n;
+ }
+ }
+ env->SetIntField(This, g_hourField, hour);
env->SetIntField(This, g_minField, minute);
- if (offset != 0) {
- // we need to normalize after applying the hour and minute offsets
- android_text_format_Time_normalize(env, This, false /* use isdst */);
- // The timezone is set to UTC in the calling Java code.
- }
+ if (offset != 0) {
+ // we need to normalize after applying the hour and minute offsets
+ android_text_format_Time_normalize(env, This, false /* use isdst */);
+ // The timezone is set to UTC in the calling Java code.
+ }
} else {
- env->SetBooleanField(This, g_allDayField, JNI_TRUE);
+ env->SetBooleanField(This, g_allDayField, JNI_TRUE);
env->SetIntField(This, g_hourField, 0);
env->SetIntField(This, g_minField, 0);
env->SetIntField(This, g_secField, 0);
@@ -633,8 +628,7 @@ static jboolean android_text_format_Time_parse3339(JNIEnv* env,
env->SetIntField(This, g_ydayField, 0);
env->SetIntField(This, g_isdstField, -1);
env->SetLongField(This, g_gmtoffField, 0);
-
- env->ReleaseStringChars(strObj, s);
+
return inUtc;
}
diff --git a/core/jni/android_util_EventLog.cpp b/core/jni/android_util_EventLog.cpp
index a3981ce..6ee504d 100644
--- a/core/jni/android_util_EventLog.cpp
+++ b/core/jni/android_util_EventLog.cpp
@@ -71,8 +71,8 @@ static jint android_util_EventLog_writeEvent_String(JNIEnv* env, jobject clazz,
// Don't throw NPE -- I feel like it's sort of mean for a logging function
// to be all crashy if you pass in NULL -- but make the NULL value explicit.
const char *str = value != NULL ? env->GetStringUTFChars(value, NULL) : "NULL";
- jint len = strlen(str);
- const int max = sizeof(buf) - sizeof(len) - 2; // Type byte, final newline
+ uint32_t len = strlen(str);
+ size_t max = sizeof(buf) - sizeof(len) - 2; // Type byte, final newline
if (len > max) len = max;
buf[0] = EVENT_TYPE_STRING;
diff --git a/core/jni/android_util_StringBlock.cpp b/core/jni/android_util_StringBlock.cpp
index 28746ce..463d3c0 100644
--- a/core/jni/android_util_StringBlock.cpp
+++ b/core/jni/android_util_StringBlock.cpp
@@ -52,6 +52,7 @@ static jint android_content_StringBlock_nativeCreate(JNIEnv* env, jobject clazz,
if (osb == NULL || osb->getError() != NO_ERROR) {
jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
+ delete osb;
return 0;
}
diff --git a/core/jni/android_view_DisplayEventReceiver.cpp b/core/jni/android_view_DisplayEventReceiver.cpp
index 3d9d005..64fb27b 100644
--- a/core/jni/android_view_DisplayEventReceiver.cpp
+++ b/core/jni/android_view_DisplayEventReceiver.cpp
@@ -62,7 +62,7 @@ private:
bool mWaitingForVsync;
virtual int handleEvent(int receiveFd, int events, void* data);
- bool readLastVsyncMessage(nsecs_t* outTimestamp, int32_t* id, uint32_t* outCount);
+ bool processPendingEvents(nsecs_t* outTimestamp, int32_t* id, uint32_t* outCount);
void dispatchVsync(nsecs_t timestamp, int32_t id, uint32_t count);
void dispatchHotplug(nsecs_t timestamp, int32_t id, bool connected);
};
@@ -111,7 +111,7 @@ status_t NativeDisplayEventReceiver::scheduleVsync() {
nsecs_t vsyncTimestamp;
int32_t vsyncDisplayId;
uint32_t vsyncCount;
- readLastVsyncMessage(&vsyncTimestamp, &vsyncDisplayId, &vsyncCount);
+ processPendingEvents(&vsyncTimestamp, &vsyncDisplayId, &vsyncCount);
status_t status = mReceiver.requestNextVsync();
if (status) {
@@ -141,43 +141,47 @@ int NativeDisplayEventReceiver::handleEvent(int receiveFd, int events, void* dat
nsecs_t vsyncTimestamp;
int32_t vsyncDisplayId;
uint32_t vsyncCount;
- if (!readLastVsyncMessage(&vsyncTimestamp, &vsyncDisplayId, &vsyncCount)) {
- ALOGV("receiver %p ~ Woke up but there was no vsync pulse!", this);
- return 1; // keep the callback, did not obtain a vsync pulse
+ if (processPendingEvents(&vsyncTimestamp, &vsyncDisplayId, &vsyncCount)) {
+ ALOGV("receiver %p ~ Vsync pulse: timestamp=%lld, id=%d, count=%d",
+ this, vsyncTimestamp, vsyncDisplayId, vsyncCount);
+ mWaitingForVsync = false;
+ dispatchVsync(vsyncTimestamp, vsyncDisplayId, vsyncCount);
}
- ALOGV("receiver %p ~ Vsync pulse: timestamp=%lld, id=%d, count=%d",
- this, vsyncTimestamp, vsyncDisplayId, vsyncCount);
- mWaitingForVsync = false;
-
- dispatchVsync(vsyncTimestamp, vsyncDisplayId, vsyncCount);
return 1; // keep the callback
}
-bool NativeDisplayEventReceiver::readLastVsyncMessage(
+bool NativeDisplayEventReceiver::processPendingEvents(
nsecs_t* outTimestamp, int32_t* outId, uint32_t* outCount) {
+ bool gotVsync = false;
DisplayEventReceiver::Event buf[EVENT_BUFFER_SIZE];
ssize_t n;
while ((n = mReceiver.getEvents(buf, EVENT_BUFFER_SIZE)) > 0) {
ALOGV("receiver %p ~ Read %d events.", this, int(n));
- while (n-- > 0) {
- const DisplayEventReceiver::Event& ev = buf[n];
- if (ev.header.type == DisplayEventReceiver::DISPLAY_EVENT_VSYNC) {
+ for (ssize_t i = 0; i < n; i++) {
+ const DisplayEventReceiver::Event& ev = buf[i];
+ switch (ev.header.type) {
+ case DisplayEventReceiver::DISPLAY_EVENT_VSYNC:
+ // Later vsync events will just overwrite the info from earlier
+ // ones. That's fine, we only care about the most recent.
+ gotVsync = true;
*outTimestamp = ev.header.timestamp;
*outId = ev.header.id;
*outCount = ev.vsync.count;
- return true; // stop at last vsync in the buffer
- }
-
- if (ev.header.type == DisplayEventReceiver::DISPLAY_EVENT_HOTPLUG) {
+ break;
+ case DisplayEventReceiver::DISPLAY_EVENT_HOTPLUG:
dispatchHotplug(ev.header.timestamp, ev.header.id, ev.hotplug.connected);
+ break;
+ default:
+ ALOGW("receiver %p ~ ignoring unknown event type %#x", this, ev.header.type);
+ break;
}
}
}
if (n < 0) {
ALOGW("Failed to get events from display event receiver, status=%d", status_t(n));
}
- return false;
+ return gotVsync;
}
void NativeDisplayEventReceiver::dispatchVsync(nsecs_t timestamp, int32_t id, uint32_t count) {
diff --git a/core/jni/com_android_internal_os_ZygoteInit.cpp b/core/jni/com_android_internal_os_ZygoteInit.cpp
index 7e5dede..83d6df1 100644
--- a/core/jni/com_android_internal_os_ZygoteInit.cpp
+++ b/core/jni/com_android_internal_os_ZygoteInit.cpp
@@ -27,12 +27,8 @@
#include <JNIHelp.h>
#include "android_runtime/AndroidRuntime.h"
-#include <linux/capability.h>
-#include <linux/prctl.h>
+#include <sys/capability.h>
#include <sys/prctl.h>
-extern "C" int capget(cap_user_header_t hdrp, cap_user_data_t datap);
-extern "C" int capset(cap_user_header_t hdrp, const cap_user_data_t datap);
-
namespace android {
diff --git a/core/res/res/drawable-en-hdpi/sym_keyboard_delete.png b/core/res/res/drawable-en-hdpi/sym_keyboard_delete.png
index 569369e..569369e 100755..100644
--- a/core/res/res/drawable-en-hdpi/sym_keyboard_delete.png
+++ b/core/res/res/drawable-en-hdpi/sym_keyboard_delete.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_circle_disable.png b/core/res/res/drawable-hdpi/btn_circle_disable.png
index 39652a8..39652a8 100755..100644
--- a/core/res/res/drawable-hdpi/btn_circle_disable.png
+++ b/core/res/res/drawable-hdpi/btn_circle_disable.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_circle_disable_focused.png b/core/res/res/drawable-hdpi/btn_circle_disable_focused.png
index 1aa7ffe..1aa7ffe 100755..100644
--- a/core/res/res/drawable-hdpi/btn_circle_disable_focused.png
+++ b/core/res/res/drawable-hdpi/btn_circle_disable_focused.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_circle_normal.png b/core/res/res/drawable-hdpi/btn_circle_normal.png
index 6011219..6011219 100755..100644
--- a/core/res/res/drawable-hdpi/btn_circle_normal.png
+++ b/core/res/res/drawable-hdpi/btn_circle_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_circle_pressed.png b/core/res/res/drawable-hdpi/btn_circle_pressed.png
index 4942e50..4942e50 100755..100644
--- a/core/res/res/drawable-hdpi/btn_circle_pressed.png
+++ b/core/res/res/drawable-hdpi/btn_circle_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_circle_selected.png b/core/res/res/drawable-hdpi/btn_circle_selected.png
index fe49a40..fe49a40 100755..100644
--- a/core/res/res/drawable-hdpi/btn_circle_selected.png
+++ b/core/res/res/drawable-hdpi/btn_circle_selected.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_close_normal.png b/core/res/res/drawable-hdpi/btn_close_normal.png
index 47f11e5..47f11e5 100755..100644
--- a/core/res/res/drawable-hdpi/btn_close_normal.png
+++ b/core/res/res/drawable-hdpi/btn_close_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_close_pressed.png b/core/res/res/drawable-hdpi/btn_close_pressed.png
index 5b96b4e..5b96b4e 100755..100644
--- a/core/res/res/drawable-hdpi/btn_close_pressed.png
+++ b/core/res/res/drawable-hdpi/btn_close_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_close_selected.png b/core/res/res/drawable-hdpi/btn_close_selected.png
index e27d684..e27d684 100755..100644
--- a/core/res/res/drawable-hdpi/btn_close_selected.png
+++ b/core/res/res/drawable-hdpi/btn_close_selected.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_normal.9.png b/core/res/res/drawable-hdpi/btn_default_normal.9.png
index 803651b..803651b 100755..100644
--- a/core/res/res/drawable-hdpi/btn_default_normal.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_normal_disable.9.png b/core/res/res/drawable-hdpi/btn_default_normal_disable.9.png
index f4f01c7..f4f01c7 100755..100644
--- a/core/res/res/drawable-hdpi/btn_default_normal_disable.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_normal_disable.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_normal_disable_focused.9.png b/core/res/res/drawable-hdpi/btn_default_normal_disable_focused.9.png
index 5376db2..5376db2 100755..100644
--- a/core/res/res/drawable-hdpi/btn_default_normal_disable_focused.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_normal_disable_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_pressed.9.png b/core/res/res/drawable-hdpi/btn_default_pressed.9.png
index 4312c27..4312c27 100755..100644
--- a/core/res/res/drawable-hdpi/btn_default_pressed.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_selected.9.png b/core/res/res/drawable-hdpi/btn_default_selected.9.png
index 06b7790..06b7790 100755..100644
--- a/core/res/res/drawable-hdpi/btn_default_selected.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal.9.png
index 6d3ea9a..6d3ea9a 100755..100644
--- a/core/res/res/drawable-hdpi/btn_default_small_normal.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_small_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal_disable.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal_disable.9.png
index 2646ba0..2646ba0 100755..100644
--- a/core/res/res/drawable-hdpi/btn_default_small_normal_disable.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_small_normal_disable.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal_disable_focused.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal_disable_focused.9.png
index 013210c..013210c 100755..100644
--- a/core/res/res/drawable-hdpi/btn_default_small_normal_disable_focused.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_small_normal_disable_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_pressed.9.png b/core/res/res/drawable-hdpi/btn_default_small_pressed.9.png
index 24cefd4..24cefd4 100755..100644
--- a/core/res/res/drawable-hdpi/btn_default_small_pressed.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_small_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_default_small_selected.9.png b/core/res/res/drawable-hdpi/btn_default_small_selected.9.png
index bedbceb..bedbceb 100755..100644
--- a/core/res/res/drawable-hdpi/btn_default_small_selected.9.png
+++ b/core/res/res/drawable-hdpi/btn_default_small_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_dialog_disable.png b/core/res/res/drawable-hdpi/btn_dialog_disable.png
index 4ff634b..4ff634b 100755..100644
--- a/core/res/res/drawable-hdpi/btn_dialog_disable.png
+++ b/core/res/res/drawable-hdpi/btn_dialog_disable.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_dialog_normal.png b/core/res/res/drawable-hdpi/btn_dialog_normal.png
index e0cc339..e0cc339 100755..100644
--- a/core/res/res/drawable-hdpi/btn_dialog_normal.png
+++ b/core/res/res/drawable-hdpi/btn_dialog_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_dialog_pressed.png b/core/res/res/drawable-hdpi/btn_dialog_pressed.png
index ed8e008..ed8e008 100755..100644
--- a/core/res/res/drawable-hdpi/btn_dialog_pressed.png
+++ b/core/res/res/drawable-hdpi/btn_dialog_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_dialog_selected.png b/core/res/res/drawable-hdpi/btn_dialog_selected.png
index 9b1a100..9b1a100 100755..100644
--- a/core/res/res/drawable-hdpi/btn_dialog_selected.png
+++ b/core/res/res/drawable-hdpi/btn_dialog_selected.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_dropdown_normal.9.png b/core/res/res/drawable-hdpi/btn_dropdown_normal.9.png
index f10402f..f10402f 100755..100644
--- a/core/res/res/drawable-hdpi/btn_dropdown_normal.9.png
+++ b/core/res/res/drawable-hdpi/btn_dropdown_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_dropdown_pressed.9.png b/core/res/res/drawable-hdpi/btn_dropdown_pressed.9.png
index 366c6e0..366c6e0 100755..100644
--- a/core/res/res/drawable-hdpi/btn_dropdown_pressed.9.png
+++ b/core/res/res/drawable-hdpi/btn_dropdown_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_dropdown_selected.9.png b/core/res/res/drawable-hdpi/btn_dropdown_selected.9.png
index f063c8d..f063c8d 100755..100644
--- a/core/res/res/drawable-hdpi/btn_dropdown_selected.9.png
+++ b/core/res/res/drawable-hdpi/btn_dropdown_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off.png b/core/res/res/drawable-hdpi/btn_radio_off.png
index 48ee2ba..48ee2ba 100755..100644
--- a/core/res/res/drawable-hdpi/btn_radio_off.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off_pressed.png b/core/res/res/drawable-hdpi/btn_radio_off_pressed.png
index 5a4ad89..5a4ad89 100755..100644
--- a/core/res/res/drawable-hdpi/btn_radio_off_pressed.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off_selected.png b/core/res/res/drawable-hdpi/btn_radio_off_selected.png
index 7d5c676..7d5c676 100755..100644
--- a/core/res/res/drawable-hdpi/btn_radio_off_selected.png
+++ b/core/res/res/drawable-hdpi/btn_radio_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on.png b/core/res/res/drawable-hdpi/btn_radio_on.png
index 2472c20..2472c20 100755..100644
--- a/core/res/res/drawable-hdpi/btn_radio_on.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_pressed.png b/core/res/res/drawable-hdpi/btn_radio_on_pressed.png
index 98d74ce..98d74ce 100755..100644
--- a/core/res/res/drawable-hdpi/btn_radio_on_pressed.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_selected.png b/core/res/res/drawable-hdpi/btn_radio_on_selected.png
index b6ab46c..b6ab46c 100755..100644
--- a/core/res/res/drawable-hdpi/btn_radio_on_selected.png
+++ b/core/res/res/drawable-hdpi/btn_radio_on_selected.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/contact_header_bg.9.png b/core/res/res/drawable-hdpi/contact_header_bg.9.png
index 981b2e9..981b2e9 100755..100644
--- a/core/res/res/drawable-hdpi/contact_header_bg.9.png
+++ b/core/res/res/drawable-hdpi/contact_header_bg.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_btn_round_more_disabled.png b/core/res/res/drawable-hdpi/ic_btn_round_more_disabled.png
index 3f1176f..3f1176f 100755..100644
--- a/core/res/res/drawable-hdpi/ic_btn_round_more_disabled.png
+++ b/core/res/res/drawable-hdpi/ic_btn_round_more_disabled.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_btn_round_more_normal.png b/core/res/res/drawable-hdpi/ic_btn_round_more_normal.png
index 8abda4d..8abda4d 100755..100644
--- a/core/res/res/drawable-hdpi/ic_btn_round_more_normal.png
+++ b/core/res/res/drawable-hdpi/ic_btn_round_more_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_contact_picture_2.png b/core/res/res/drawable-hdpi/ic_contact_picture_2.png
index 5e65276..5e65276 100755..100644
--- a/core/res/res/drawable-hdpi/ic_contact_picture_2.png
+++ b/core/res/res/drawable-hdpi/ic_contact_picture_2.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_contact_picture_3.png b/core/res/res/drawable-hdpi/ic_contact_picture_3.png
index a8ec1e1..a8ec1e1 100755..100644
--- a/core/res/res/drawable-hdpi/ic_contact_picture_3.png
+++ b/core/res/res/drawable-hdpi/ic_contact_picture_3.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_jog_dial_sound_off.png b/core/res/res/drawable-hdpi/ic_jog_dial_sound_off.png
index d73db48..d73db48 100755..100644
--- a/core/res/res/drawable-hdpi/ic_jog_dial_sound_off.png
+++ b/core/res/res/drawable-hdpi/ic_jog_dial_sound_off.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_jog_dial_sound_on.png b/core/res/res/drawable-hdpi/ic_jog_dial_sound_on.png
index 90da6e3..90da6e3 100755..100644
--- a/core/res/res/drawable-hdpi/ic_jog_dial_sound_on.png
+++ b/core/res/res/drawable-hdpi/ic_jog_dial_sound_on.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_jog_dial_unlock.png b/core/res/res/drawable-hdpi/ic_jog_dial_unlock.png
index a9af1af..a9af1af 100755..100644
--- a/core/res/res/drawable-hdpi/ic_jog_dial_unlock.png
+++ b/core/res/res/drawable-hdpi/ic_jog_dial_unlock.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_settings_language.png b/core/res/res/drawable-hdpi/ic_settings_language.png
index f635b2e..f635b2e 100755..100644
--- a/core/res/res/drawable-hdpi/ic_settings_language.png
+++ b/core/res/res/drawable-hdpi/ic_settings_language.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_green.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_green.png
index f19811e..f19811e 100755..100644
--- a/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_green.png
+++ b/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_green.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_yellow.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_yellow.png
index 0596035..0596035 100755..100644
--- a/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_yellow.png
+++ b/core/res/res/drawable-hdpi/jog_dial_arrow_long_left_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_middle_yellow.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_middle_yellow.png
index 3ab2723..3ab2723 100755..100644
--- a/core/res/res/drawable-hdpi/jog_dial_arrow_long_middle_yellow.png
+++ b/core/res/res/drawable-hdpi/jog_dial_arrow_long_middle_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_red.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_red.png
index dd6899f..dd6899f 100755..100644
--- a/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_red.png
+++ b/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_red.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_yellow.png b/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_yellow.png
index 27151e0..27151e0 100755..100644
--- a/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_yellow.png
+++ b/core/res/res/drawable-hdpi/jog_dial_arrow_long_right_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_short_left.png b/core/res/res/drawable-hdpi/jog_dial_arrow_short_left.png
index 66d49bb..66d49bb 100755..100644
--- a/core/res/res/drawable-hdpi/jog_dial_arrow_short_left.png
+++ b/core/res/res/drawable-hdpi/jog_dial_arrow_short_left.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_short_left_and_right.png b/core/res/res/drawable-hdpi/jog_dial_arrow_short_left_and_right.png
index c47e176..c47e176 100755..100644
--- a/core/res/res/drawable-hdpi/jog_dial_arrow_short_left_and_right.png
+++ b/core/res/res/drawable-hdpi/jog_dial_arrow_short_left_and_right.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_arrow_short_right.png b/core/res/res/drawable-hdpi/jog_dial_arrow_short_right.png
index f5ea157..f5ea157 100755..100644
--- a/core/res/res/drawable-hdpi/jog_dial_arrow_short_right.png
+++ b/core/res/res/drawable-hdpi/jog_dial_arrow_short_right.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_bg.png b/core/res/res/drawable-hdpi/jog_dial_bg.png
index 8adbfd8..8adbfd8 100755..100644
--- a/core/res/res/drawable-hdpi/jog_dial_bg.png
+++ b/core/res/res/drawable-hdpi/jog_dial_bg.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_dial_dimple.png b/core/res/res/drawable-hdpi/jog_dial_dimple.png
index 0eaea91..0eaea91 100755..100644
--- a/core/res/res/drawable-hdpi/jog_dial_dimple.png
+++ b/core/res/res/drawable-hdpi/jog_dial_dimple.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_left_confirm_gray.png b/core/res/res/drawable-hdpi/jog_tab_left_confirm_gray.png
index 9599fb5..9599fb5 100755..100644
--- a/core/res/res/drawable-hdpi/jog_tab_left_confirm_gray.png
+++ b/core/res/res/drawable-hdpi/jog_tab_left_confirm_gray.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_left_confirm_green.png b/core/res/res/drawable-hdpi/jog_tab_left_confirm_green.png
index 46d9ab3..46d9ab3 100755..100644
--- a/core/res/res/drawable-hdpi/jog_tab_left_confirm_green.png
+++ b/core/res/res/drawable-hdpi/jog_tab_left_confirm_green.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_left_confirm_red.png b/core/res/res/drawable-hdpi/jog_tab_left_confirm_red.png
index 6c0dc0a..6c0dc0a 100755..100644
--- a/core/res/res/drawable-hdpi/jog_tab_left_confirm_red.png
+++ b/core/res/res/drawable-hdpi/jog_tab_left_confirm_red.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_left_confirm_yellow.png b/core/res/res/drawable-hdpi/jog_tab_left_confirm_yellow.png
index 3f9fb8f..3f9fb8f 100755..100644
--- a/core/res/res/drawable-hdpi/jog_tab_left_confirm_yellow.png
+++ b/core/res/res/drawable-hdpi/jog_tab_left_confirm_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_left_pressed.png b/core/res/res/drawable-hdpi/jog_tab_left_pressed.png
index ec98790..ec98790 100755..100644
--- a/core/res/res/drawable-hdpi/jog_tab_left_pressed.png
+++ b/core/res/res/drawable-hdpi/jog_tab_left_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_right_confirm_gray.png b/core/res/res/drawable-hdpi/jog_tab_right_confirm_gray.png
index 2861e8d..2861e8d 100755..100644
--- a/core/res/res/drawable-hdpi/jog_tab_right_confirm_gray.png
+++ b/core/res/res/drawable-hdpi/jog_tab_right_confirm_gray.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_right_confirm_green.png b/core/res/res/drawable-hdpi/jog_tab_right_confirm_green.png
index e974bbc..e974bbc 100755..100644
--- a/core/res/res/drawable-hdpi/jog_tab_right_confirm_green.png
+++ b/core/res/res/drawable-hdpi/jog_tab_right_confirm_green.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_right_confirm_red.png b/core/res/res/drawable-hdpi/jog_tab_right_confirm_red.png
index 9647fa6..9647fa6 100755..100644
--- a/core/res/res/drawable-hdpi/jog_tab_right_confirm_red.png
+++ b/core/res/res/drawable-hdpi/jog_tab_right_confirm_red.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_right_confirm_yellow.png b/core/res/res/drawable-hdpi/jog_tab_right_confirm_yellow.png
index ad878e1..ad878e1 100755..100644
--- a/core/res/res/drawable-hdpi/jog_tab_right_confirm_yellow.png
+++ b/core/res/res/drawable-hdpi/jog_tab_right_confirm_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/jog_tab_right_pressed.png b/core/res/res/drawable-hdpi/jog_tab_right_pressed.png
index 647e802..647e802 100755..100644
--- a/core/res/res/drawable-hdpi/jog_tab_right_pressed.png
+++ b/core/res/res/drawable-hdpi/jog_tab_right_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate1.png b/core/res/res/drawable-hdpi/progressbar_indeterminate1.png
index 197b34d..197b34d 100755..100644
--- a/core/res/res/drawable-hdpi/progressbar_indeterminate1.png
+++ b/core/res/res/drawable-hdpi/progressbar_indeterminate1.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate2.png b/core/res/res/drawable-hdpi/progressbar_indeterminate2.png
index c6cf008..c6cf008 100755..100644
--- a/core/res/res/drawable-hdpi/progressbar_indeterminate2.png
+++ b/core/res/res/drawable-hdpi/progressbar_indeterminate2.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate3.png b/core/res/res/drawable-hdpi/progressbar_indeterminate3.png
index bf129e0..bf129e0 100755..100644
--- a/core/res/res/drawable-hdpi/progressbar_indeterminate3.png
+++ b/core/res/res/drawable-hdpi/progressbar_indeterminate3.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_more.png b/core/res/res/drawable-hdpi/stat_notify_more.png
index f54b3d4..f54b3d4 100755..100644
--- a/core/res/res/drawable-hdpi/stat_notify_more.png
+++ b/core/res/res/drawable-hdpi/stat_notify_more.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_10.png b/core/res/res/drawable-hdpi/stat_sys_battery_10.png
index 4486553..4486553 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_battery_10.png
+++ b/core/res/res/drawable-hdpi/stat_sys_battery_10.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_20.png b/core/res/res/drawable-hdpi/stat_sys_battery_20.png
index c8f9c92..c8f9c92 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_battery_20.png
+++ b/core/res/res/drawable-hdpi/stat_sys_battery_20.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_40.png b/core/res/res/drawable-hdpi/stat_sys_battery_40.png
index 441bbfb..441bbfb 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_battery_40.png
+++ b/core/res/res/drawable-hdpi/stat_sys_battery_40.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_60.png b/core/res/res/drawable-hdpi/stat_sys_battery_60.png
index d9467ed..d9467ed 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_battery_60.png
+++ b/core/res/res/drawable-hdpi/stat_sys_battery_60.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_80.png b/core/res/res/drawable-hdpi/stat_sys_battery_80.png
index e3f4805..e3f4805 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_battery_80.png
+++ b/core/res/res/drawable-hdpi/stat_sys_battery_80.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim1.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim1.png
index 997feb3..997feb3 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim1.png
+++ b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim1.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim2.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim2.png
index 426a66b..426a66b 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim2.png
+++ b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim2.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim3.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim3.png
index 21582ca..21582ca 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim3.png
+++ b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim3.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim4.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim4.png
index 8a94763..8a94763 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim4.png
+++ b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim4.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim5.png b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim5.png
index fad0d65..fad0d65 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim5.png
+++ b/core/res/res/drawable-hdpi/stat_sys_battery_charge_anim5.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_phone_call.png b/core/res/res/drawable-hdpi/stat_sys_phone_call.png
index 9b5f075..9b5f075 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_phone_call.png
+++ b/core/res/res/drawable-hdpi/stat_sys_phone_call.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_phone_call_forward.png b/core/res/res/drawable-hdpi/stat_sys_phone_call_forward.png
index 032f8f1..032f8f1 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_phone_call_forward.png
+++ b/core/res/res/drawable-hdpi/stat_sys_phone_call_forward.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_phone_call_on_hold.png b/core/res/res/drawable-hdpi/stat_sys_phone_call_on_hold.png
index 5b0a68d..5b0a68d 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_phone_call_on_hold.png
+++ b/core/res/res/drawable-hdpi/stat_sys_phone_call_on_hold.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_r_signal_3_cdma.png b/core/res/res/drawable-hdpi/stat_sys_r_signal_3_cdma.png
index a3a6b6c..a3a6b6c 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_r_signal_3_cdma.png
+++ b/core/res/res/drawable-hdpi/stat_sys_r_signal_3_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_ra_signal_0_cdma.png b/core/res/res/drawable-hdpi/stat_sys_ra_signal_0_cdma.png
index a2fa547..a2fa547 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_ra_signal_0_cdma.png
+++ b/core/res/res/drawable-hdpi/stat_sys_ra_signal_0_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_ra_signal_1_cdma.png b/core/res/res/drawable-hdpi/stat_sys_ra_signal_1_cdma.png
index 17c8681..17c8681 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_ra_signal_1_cdma.png
+++ b/core/res/res/drawable-hdpi/stat_sys_ra_signal_1_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_ra_signal_2_cdma.png b/core/res/res/drawable-hdpi/stat_sys_ra_signal_2_cdma.png
index 4a21fb6..4a21fb6 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_ra_signal_2_cdma.png
+++ b/core/res/res/drawable-hdpi/stat_sys_ra_signal_2_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_ra_signal_4_cdma.png b/core/res/res/drawable-hdpi/stat_sys_ra_signal_4_cdma.png
index 5729f7d..5729f7d 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_ra_signal_4_cdma.png
+++ b/core/res/res/drawable-hdpi/stat_sys_ra_signal_4_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_0_cdma.png b/core/res/res/drawable-hdpi/stat_sys_signal_0_cdma.png
index af43e00..af43e00 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_signal_0_cdma.png
+++ b/core/res/res/drawable-hdpi/stat_sys_signal_0_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_1_cdma.png b/core/res/res/drawable-hdpi/stat_sys_signal_1_cdma.png
index 4ffe421..4ffe421 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_signal_1_cdma.png
+++ b/core/res/res/drawable-hdpi/stat_sys_signal_1_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_2_cdma.png b/core/res/res/drawable-hdpi/stat_sys_signal_2_cdma.png
index 6f27b96..6f27b96 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_signal_2_cdma.png
+++ b/core/res/res/drawable-hdpi/stat_sys_signal_2_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_3_cdma.png b/core/res/res/drawable-hdpi/stat_sys_signal_3_cdma.png
index ddc46b0..ddc46b0 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_signal_3_cdma.png
+++ b/core/res/res/drawable-hdpi/stat_sys_signal_3_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_4_cdma.png b/core/res/res/drawable-hdpi/stat_sys_signal_4_cdma.png
index fb3cfe9..fb3cfe9 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_signal_4_cdma.png
+++ b/core/res/res/drawable-hdpi/stat_sys_signal_4_cdma.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_0.png b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_0.png
index b697ca4..b697ca4 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_0.png
+++ b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_0.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_1.png b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_1.png
index a61de4d..a61de4d 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_1.png
+++ b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_1.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_2.png b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_2.png
index 62e0393..62e0393 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_2.png
+++ b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_2.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_3.png b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_3.png
index 09eae9d..09eae9d 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_3.png
+++ b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_3.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_4.png b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_4.png
index 4012ac5..4012ac5 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_signal_evdo_4.png
+++ b/core/res/res/drawable-hdpi/stat_sys_signal_evdo_4.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_vp_phone_call.png b/core/res/res/drawable-hdpi/stat_sys_vp_phone_call.png
index 83e8ead..83e8ead 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_vp_phone_call.png
+++ b/core/res/res/drawable-hdpi/stat_sys_vp_phone_call.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_on_hold.png b/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_on_hold.png
index 9731c46..9731c46 100755..100644
--- a/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_on_hold.png
+++ b/core/res/res/drawable-hdpi/stat_sys_vp_phone_call_on_hold.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/sym_keyboard_feedback_delete.png b/core/res/res/drawable-hdpi/sym_keyboard_feedback_delete.png
index ca76375..ca76375 100755..100644
--- a/core/res/res/drawable-hdpi/sym_keyboard_feedback_delete.png
+++ b/core/res/res/drawable-hdpi/sym_keyboard_feedback_delete.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/sym_keyboard_feedback_return.png b/core/res/res/drawable-hdpi/sym_keyboard_feedback_return.png
index ae57299..ae57299 100755..100644
--- a/core/res/res/drawable-hdpi/sym_keyboard_feedback_return.png
+++ b/core/res/res/drawable-hdpi/sym_keyboard_feedback_return.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift.png b/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift.png
index 4db31c8..4db31c8 100755..100644
--- a/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift.png
+++ b/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png b/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png
index 3fd5659..3fd5659 100755..100644
--- a/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png
+++ b/core/res/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/sym_keyboard_feedback_space.png b/core/res/res/drawable-hdpi/sym_keyboard_feedback_space.png
index 98266ee..98266ee 100755..100644
--- a/core/res/res/drawable-hdpi/sym_keyboard_feedback_space.png
+++ b/core/res/res/drawable-hdpi/sym_keyboard_feedback_space.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/sym_keyboard_return.png b/core/res/res/drawable-hdpi/sym_keyboard_return.png
index 58505c5..58505c5 100755..100644
--- a/core/res/res/drawable-hdpi/sym_keyboard_return.png
+++ b/core/res/res/drawable-hdpi/sym_keyboard_return.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/sym_keyboard_shift.png b/core/res/res/drawable-hdpi/sym_keyboard_shift.png
index 8149081..8149081 100755..100644
--- a/core/res/res/drawable-hdpi/sym_keyboard_shift.png
+++ b/core/res/res/drawable-hdpi/sym_keyboard_shift.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/sym_keyboard_shift_locked.png b/core/res/res/drawable-hdpi/sym_keyboard_shift_locked.png
index 31ca277..31ca277 100755..100644
--- a/core/res/res/drawable-hdpi/sym_keyboard_shift_locked.png
+++ b/core/res/res/drawable-hdpi/sym_keyboard_shift_locked.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/sym_keyboard_space.png b/core/res/res/drawable-hdpi/sym_keyboard_space.png
index 3e98b30..3e98b30 100755..100644
--- a/core/res/res/drawable-hdpi/sym_keyboard_space.png
+++ b/core/res/res/drawable-hdpi/sym_keyboard_space.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_default.9.png b/core/res/res/drawable-hdpi/textfield_default.9.png
index f7b6e99..f7b6e99 100755..100644
--- a/core/res/res/drawable-hdpi/textfield_default.9.png
+++ b/core/res/res/drawable-hdpi/textfield_default.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_disabled.9.png b/core/res/res/drawable-hdpi/textfield_disabled.9.png
index 3011502..3011502 100755..100644
--- a/core/res/res/drawable-hdpi/textfield_disabled.9.png
+++ b/core/res/res/drawable-hdpi/textfield_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_disabled_selected.9.png b/core/res/res/drawable-hdpi/textfield_disabled_selected.9.png
index e0f82eb..e0f82eb 100755..100644
--- a/core/res/res/drawable-hdpi/textfield_disabled_selected.9.png
+++ b/core/res/res/drawable-hdpi/textfield_disabled_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_selected.9.png b/core/res/res/drawable-hdpi/textfield_selected.9.png
index cf2cae3..cf2cae3 100755..100644
--- a/core/res/res/drawable-hdpi/textfield_selected.9.png
+++ b/core/res/res/drawable-hdpi/textfield_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/tab_focus_bar_left.9.png b/core/res/res/drawable-ldpi/tab_focus_bar_left.9.png
index 0ee8347..0ee8347 100755..100644
--- a/core/res/res/drawable-ldpi/tab_focus_bar_left.9.png
+++ b/core/res/res/drawable-ldpi/tab_focus_bar_left.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/tab_focus_bar_right.9.png b/core/res/res/drawable-ldpi/tab_focus_bar_right.9.png
index 0ee8347..0ee8347 100755..100644
--- a/core/res/res/drawable-ldpi/tab_focus_bar_right.9.png
+++ b/core/res/res/drawable-ldpi/tab_focus_bar_right.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/tab_press_bar_left.9.png b/core/res/res/drawable-ldpi/tab_press_bar_left.9.png
index ee129ba..ee129ba 100755..100644
--- a/core/res/res/drawable-ldpi/tab_press_bar_left.9.png
+++ b/core/res/res/drawable-ldpi/tab_press_bar_left.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/tab_press_bar_right.9.png b/core/res/res/drawable-ldpi/tab_press_bar_right.9.png
index ee129ba..ee129ba 100755..100644
--- a/core/res/res/drawable-ldpi/tab_press_bar_right.9.png
+++ b/core/res/res/drawable-ldpi/tab_press_bar_right.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/tab_selected_bar_left.9.png b/core/res/res/drawable-ldpi/tab_selected_bar_left.9.png
index 03bcc13..03bcc13 100755..100644
--- a/core/res/res/drawable-ldpi/tab_selected_bar_left.9.png
+++ b/core/res/res/drawable-ldpi/tab_selected_bar_left.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/tab_selected_bar_right.9.png b/core/res/res/drawable-ldpi/tab_selected_bar_right.9.png
index f228445..f228445 100755..100644
--- a/core/res/res/drawable-ldpi/tab_selected_bar_right.9.png
+++ b/core/res/res/drawable-ldpi/tab_selected_bar_right.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_buttonless_off.png b/core/res/res/drawable-mdpi/btn_check_buttonless_off.png
index f8972fc..f8972fc 100755..100644
--- a/core/res/res/drawable-mdpi/btn_check_buttonless_off.png
+++ b/core/res/res/drawable-mdpi/btn_check_buttonless_off.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_buttonless_on.png b/core/res/res/drawable-mdpi/btn_check_buttonless_on.png
index a10a37a..a10a37a 100755..100644
--- a/core/res/res/drawable-mdpi/btn_check_buttonless_on.png
+++ b/core/res/res/drawable-mdpi/btn_check_buttonless_on.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_dialog_disable.png b/core/res/res/drawable-mdpi/btn_dialog_disable.png
index 3de9895..3de9895 100755..100644
--- a/core/res/res/drawable-mdpi/btn_dialog_disable.png
+++ b/core/res/res/drawable-mdpi/btn_dialog_disable.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_dialog_normal.png b/core/res/res/drawable-mdpi/btn_dialog_normal.png
index eca5828..eca5828 100755..100644
--- a/core/res/res/drawable-mdpi/btn_dialog_normal.png
+++ b/core/res/res/drawable-mdpi/btn_dialog_normal.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_dialog_pressed.png b/core/res/res/drawable-mdpi/btn_dialog_pressed.png
index f9c4551..f9c4551 100755..100644
--- a/core/res/res/drawable-mdpi/btn_dialog_pressed.png
+++ b/core/res/res/drawable-mdpi/btn_dialog_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_dialog_selected.png b/core/res/res/drawable-mdpi/btn_dialog_selected.png
index b0afd7f..b0afd7f 100755..100644
--- a/core/res/res/drawable-mdpi/btn_dialog_selected.png
+++ b/core/res/res/drawable-mdpi/btn_dialog_selected.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_erase_default.9.png b/core/res/res/drawable-mdpi/btn_erase_default.9.png
index c3bf60c..c3bf60c 100755..100644
--- a/core/res/res/drawable-mdpi/btn_erase_default.9.png
+++ b/core/res/res/drawable-mdpi/btn_erase_default.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_erase_pressed.9.png b/core/res/res/drawable-mdpi/btn_erase_pressed.9.png
index 727aafe..727aafe 100755..100644
--- a/core/res/res/drawable-mdpi/btn_erase_pressed.9.png
+++ b/core/res/res/drawable-mdpi/btn_erase_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_erase_selected.9.png b/core/res/res/drawable-mdpi/btn_erase_selected.9.png
index c6bd020..c6bd020 100755..100644
--- a/core/res/res/drawable-mdpi/btn_erase_selected.9.png
+++ b/core/res/res/drawable-mdpi/btn_erase_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_keyboard_key_pressed.9.png b/core/res/res/drawable-mdpi/btn_keyboard_key_pressed.9.png
index 39b9314..39b9314 100755..100644
--- a/core/res/res/drawable-mdpi/btn_keyboard_key_pressed.9.png
+++ b/core/res/res/drawable-mdpi/btn_keyboard_key_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_media_player.9.png b/core/res/res/drawable-mdpi/btn_media_player.9.png
index 3ec3f68..3ec3f68 100755..100644
--- a/core/res/res/drawable-mdpi/btn_media_player.9.png
+++ b/core/res/res/drawable-mdpi/btn_media_player.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_media_player_disabled.9.png b/core/res/res/drawable-mdpi/btn_media_player_disabled.9.png
index e74335b..e74335b 100755..100644
--- a/core/res/res/drawable-mdpi/btn_media_player_disabled.9.png
+++ b/core/res/res/drawable-mdpi/btn_media_player_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_media_player_disabled_selected.9.png b/core/res/res/drawable-mdpi/btn_media_player_disabled_selected.9.png
index 2c6517f..2c6517f 100755..100644
--- a/core/res/res/drawable-mdpi/btn_media_player_disabled_selected.9.png
+++ b/core/res/res/drawable-mdpi/btn_media_player_disabled_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_media_player_pressed.9.png b/core/res/res/drawable-mdpi/btn_media_player_pressed.9.png
index 40bee47..40bee47 100755..100644
--- a/core/res/res/drawable-mdpi/btn_media_player_pressed.9.png
+++ b/core/res/res/drawable-mdpi/btn_media_player_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_media_player_selected.9.png b/core/res/res/drawable-mdpi/btn_media_player_selected.9.png
index 28d809f..28d809f 100755..100644
--- a/core/res/res/drawable-mdpi/btn_media_player_selected.9.png
+++ b/core/res/res/drawable-mdpi/btn_media_player_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_big_off.png b/core/res/res/drawable-mdpi/btn_star_big_off.png
index 7e9342b..7e9342b 100755..100644
--- a/core/res/res/drawable-mdpi/btn_star_big_off.png
+++ b/core/res/res/drawable-mdpi/btn_star_big_off.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_big_off_disable.png b/core/res/res/drawable-mdpi/btn_star_big_off_disable.png
index 066d920..066d920 100755..100644
--- a/core/res/res/drawable-mdpi/btn_star_big_off_disable.png
+++ b/core/res/res/drawable-mdpi/btn_star_big_off_disable.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_big_off_disable_focused.png b/core/res/res/drawable-mdpi/btn_star_big_off_disable_focused.png
index 1855d2c..1855d2c 100755..100644
--- a/core/res/res/drawable-mdpi/btn_star_big_off_disable_focused.png
+++ b/core/res/res/drawable-mdpi/btn_star_big_off_disable_focused.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_big_off_pressed.png b/core/res/res/drawable-mdpi/btn_star_big_off_pressed.png
index f1b8912..f1b8912 100755..100644
--- a/core/res/res/drawable-mdpi/btn_star_big_off_pressed.png
+++ b/core/res/res/drawable-mdpi/btn_star_big_off_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_big_off_selected.png b/core/res/res/drawable-mdpi/btn_star_big_off_selected.png
index 0be64c4..0be64c4 100755..100644
--- a/core/res/res/drawable-mdpi/btn_star_big_off_selected.png
+++ b/core/res/res/drawable-mdpi/btn_star_big_off_selected.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_big_on.png b/core/res/res/drawable-mdpi/btn_star_big_on.png
index a9bdb05..a9bdb05 100755..100644
--- a/core/res/res/drawable-mdpi/btn_star_big_on.png
+++ b/core/res/res/drawable-mdpi/btn_star_big_on.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_big_on_disable.png b/core/res/res/drawable-mdpi/btn_star_big_on_disable.png
index 5e65a2f..5e65a2f 100755..100644
--- a/core/res/res/drawable-mdpi/btn_star_big_on_disable.png
+++ b/core/res/res/drawable-mdpi/btn_star_big_on_disable.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_big_on_disable_focused.png b/core/res/res/drawable-mdpi/btn_star_big_on_disable_focused.png
index de57571..de57571 100755..100644
--- a/core/res/res/drawable-mdpi/btn_star_big_on_disable_focused.png
+++ b/core/res/res/drawable-mdpi/btn_star_big_on_disable_focused.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_big_on_pressed.png b/core/res/res/drawable-mdpi/btn_star_big_on_pressed.png
index 159a84b..159a84b 100755..100644
--- a/core/res/res/drawable-mdpi/btn_star_big_on_pressed.png
+++ b/core/res/res/drawable-mdpi/btn_star_big_on_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_big_on_selected.png b/core/res/res/drawable-mdpi/btn_star_big_on_selected.png
index 0592d51..0592d51 100755..100644
--- a/core/res/res/drawable-mdpi/btn_star_big_on_selected.png
+++ b/core/res/res/drawable-mdpi/btn_star_big_on_selected.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/dialog_divider_horizontal_light.9.png b/core/res/res/drawable-mdpi/dialog_divider_horizontal_light.9.png
index b69619b..b69619b 100755..100644
--- a/core/res/res/drawable-mdpi/dialog_divider_horizontal_light.9.png
+++ b/core/res/res/drawable-mdpi/dialog_divider_horizontal_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/frame_gallery_thumb.9.png b/core/res/res/drawable-mdpi/frame_gallery_thumb.9.png
index 804f6f3..804f6f3 100755..100644
--- a/core/res/res/drawable-mdpi/frame_gallery_thumb.9.png
+++ b/core/res/res/drawable-mdpi/frame_gallery_thumb.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/frame_gallery_thumb_pressed.9.png b/core/res/res/drawable-mdpi/frame_gallery_thumb_pressed.9.png
index e1ffa06..e1ffa06 100755..100644
--- a/core/res/res/drawable-mdpi/frame_gallery_thumb_pressed.9.png
+++ b/core/res/res/drawable-mdpi/frame_gallery_thumb_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/frame_gallery_thumb_selected.9.png b/core/res/res/drawable-mdpi/frame_gallery_thumb_selected.9.png
index 8bae932..8bae932 100755..100644
--- a/core/res/res/drawable-mdpi/frame_gallery_thumb_selected.9.png
+++ b/core/res/res/drawable-mdpi/frame_gallery_thumb_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/gallery_selected_default.9.png b/core/res/res/drawable-mdpi/gallery_selected_default.9.png
index 22122b2..22122b2 100755..100644
--- a/core/res/res/drawable-mdpi/gallery_selected_default.9.png
+++ b/core/res/res/drawable-mdpi/gallery_selected_default.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/gallery_selected_focused.9.png b/core/res/res/drawable-mdpi/gallery_selected_focused.9.png
index 1332745..1332745 100755..100644
--- a/core/res/res/drawable-mdpi/gallery_selected_focused.9.png
+++ b/core/res/res/drawable-mdpi/gallery_selected_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/gallery_selected_pressed.9.png b/core/res/res/drawable-mdpi/gallery_selected_pressed.9.png
index 306e543..306e543 100755..100644
--- a/core/res/res/drawable-mdpi/gallery_selected_pressed.9.png
+++ b/core/res/res/drawable-mdpi/gallery_selected_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/gallery_unselected_default.9.png b/core/res/res/drawable-mdpi/gallery_unselected_default.9.png
index 0df06fa..0df06fa 100755..100644
--- a/core/res/res/drawable-mdpi/gallery_unselected_default.9.png
+++ b/core/res/res/drawable-mdpi/gallery_unselected_default.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_dialog_info.png b/core/res/res/drawable-mdpi/ic_dialog_info.png
index e8b0229..e8b0229 100755..100644
--- a/core/res/res/drawable-mdpi/ic_dialog_info.png
+++ b/core/res/res/drawable-mdpi/ic_dialog_info.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_dialog_time.png b/core/res/res/drawable-mdpi/ic_dialog_time.png
index dffec29..dffec29 100755..100644
--- a/core/res/res/drawable-mdpi/ic_dialog_time.png
+++ b/core/res/res/drawable-mdpi/ic_dialog_time.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_jog_dial_unlock.png b/core/res/res/drawable-mdpi/ic_jog_dial_unlock.png
index e697d91..e697d91 100755..100644
--- a/core/res/res/drawable-mdpi/ic_jog_dial_unlock.png
+++ b/core/res/res/drawable-mdpi/ic_jog_dial_unlock.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_idle_charging.png b/core/res/res/drawable-mdpi/ic_lock_idle_charging.png
index 20d6320..20d6320 100755..100644
--- a/core/res/res/drawable-mdpi/ic_lock_idle_charging.png
+++ b/core/res/res/drawable-mdpi/ic_lock_idle_charging.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_idle_lock.png b/core/res/res/drawable-mdpi/ic_lock_idle_lock.png
index 0206aee..0206aee 100755..100644
--- a/core/res/res/drawable-mdpi/ic_lock_idle_lock.png
+++ b/core/res/res/drawable-mdpi/ic_lock_idle_lock.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_idle_low_battery.png b/core/res/res/drawable-mdpi/ic_lock_idle_low_battery.png
index bb96782..bb96782 100755..100644
--- a/core/res/res/drawable-mdpi/ic_lock_idle_low_battery.png
+++ b/core/res/res/drawable-mdpi/ic_lock_idle_low_battery.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_video_poster.png b/core/res/res/drawable-mdpi/ic_media_video_poster.png
index f457f23..f457f23 100755..100644
--- a/core/res/res/drawable-mdpi/ic_media_video_poster.png
+++ b/core/res/res/drawable-mdpi/ic_media_video_poster.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_add.png b/core/res/res/drawable-mdpi/ic_menu_add.png
index 361c7c4..361c7c4 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_add.png
+++ b/core/res/res/drawable-mdpi/ic_menu_add.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_agenda.png b/core/res/res/drawable-mdpi/ic_menu_agenda.png
index c63a12bf..c63a12bf 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_agenda.png
+++ b/core/res/res/drawable-mdpi/ic_menu_agenda.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_allfriends.png b/core/res/res/drawable-mdpi/ic_menu_allfriends.png
index 45256d1..45256d1 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_allfriends.png
+++ b/core/res/res/drawable-mdpi/ic_menu_allfriends.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_camera.png b/core/res/res/drawable-mdpi/ic_menu_camera.png
index f8cf93c..f8cf93c 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_camera.png
+++ b/core/res/res/drawable-mdpi/ic_menu_camera.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_crop.png b/core/res/res/drawable-mdpi/ic_menu_crop.png
index 30e40cf..30e40cf 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_crop.png
+++ b/core/res/res/drawable-mdpi/ic_menu_crop.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_day.png b/core/res/res/drawable-mdpi/ic_menu_day.png
index 88bc348..88bc348 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_day.png
+++ b/core/res/res/drawable-mdpi/ic_menu_day.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_delete.png b/core/res/res/drawable-mdpi/ic_menu_delete.png
index e2c8700..e2c8700 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_delete.png
+++ b/core/res/res/drawable-mdpi/ic_menu_delete.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_directions.png b/core/res/res/drawable-mdpi/ic_menu_directions.png
index d10e0b1..d10e0b1 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_directions.png
+++ b/core/res/res/drawable-mdpi/ic_menu_directions.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_edit.png b/core/res/res/drawable-mdpi/ic_menu_edit.png
index d0314e9..d0314e9 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_edit.png
+++ b/core/res/res/drawable-mdpi/ic_menu_edit.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_gallery.png b/core/res/res/drawable-mdpi/ic_menu_gallery.png
index d3a0200..d3a0200 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_gallery.png
+++ b/core/res/res/drawable-mdpi/ic_menu_gallery.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_info_details.png b/core/res/res/drawable-mdpi/ic_menu_info_details.png
index 18b15b5..18b15b5 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_info_details.png
+++ b/core/res/res/drawable-mdpi/ic_menu_info_details.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_manage.png b/core/res/res/drawable-mdpi/ic_menu_manage.png
index 8d3a9fa..8d3a9fa 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_manage.png
+++ b/core/res/res/drawable-mdpi/ic_menu_manage.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_month.png b/core/res/res/drawable-mdpi/ic_menu_month.png
index ff201df..ff201df 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_month.png
+++ b/core/res/res/drawable-mdpi/ic_menu_month.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_my_calendar.png b/core/res/res/drawable-mdpi/ic_menu_my_calendar.png
index 991dfb0..991dfb0 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_my_calendar.png
+++ b/core/res/res/drawable-mdpi/ic_menu_my_calendar.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_mylocation.png b/core/res/res/drawable-mdpi/ic_menu_mylocation.png
index 2a61a97..2a61a97 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_mylocation.png
+++ b/core/res/res/drawable-mdpi/ic_menu_mylocation.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_rotate.png b/core/res/res/drawable-mdpi/ic_menu_rotate.png
index 35fa56d..35fa56d 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_rotate.png
+++ b/core/res/res/drawable-mdpi/ic_menu_rotate.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_search.png b/core/res/res/drawable-mdpi/ic_menu_search.png
index 5d3155e..5d3155e 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_search.png
+++ b/core/res/res/drawable-mdpi/ic_menu_search.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_search_holo_dark.png b/core/res/res/drawable-mdpi/ic_menu_search_holo_dark.png
index 5d3155e..5d3155e 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_search_holo_dark.png
+++ b/core/res/res/drawable-mdpi/ic_menu_search_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_send.png b/core/res/res/drawable-mdpi/ic_menu_send.png
index 06b4717..06b4717 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_send.png
+++ b/core/res/res/drawable-mdpi/ic_menu_send.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_set_as.png b/core/res/res/drawable-mdpi/ic_menu_set_as.png
index 98cc305..98cc305 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_set_as.png
+++ b/core/res/res/drawable-mdpi/ic_menu_set_as.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_share.png b/core/res/res/drawable-mdpi/ic_menu_share.png
index d89ca5f..d89ca5f 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_share.png
+++ b/core/res/res/drawable-mdpi/ic_menu_share.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_sort_by_size.png b/core/res/res/drawable-mdpi/ic_menu_sort_by_size.png
index 19e8d1b..19e8d1b 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_sort_by_size.png
+++ b/core/res/res/drawable-mdpi/ic_menu_sort_by_size.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_star.png b/core/res/res/drawable-mdpi/ic_menu_star.png
index 0c22fe8..0c22fe8 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_star.png
+++ b/core/res/res/drawable-mdpi/ic_menu_star.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_today.png b/core/res/res/drawable-mdpi/ic_menu_today.png
index 8c248ae..8c248ae 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_today.png
+++ b/core/res/res/drawable-mdpi/ic_menu_today.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_upload.png b/core/res/res/drawable-mdpi/ic_menu_upload.png
index 9e8459a..9e8459a 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_upload.png
+++ b/core/res/res/drawable-mdpi/ic_menu_upload.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_upload_you_tube.png b/core/res/res/drawable-mdpi/ic_menu_upload_you_tube.png
index a67c409..a67c409 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_upload_you_tube.png
+++ b/core/res/res/drawable-mdpi/ic_menu_upload_you_tube.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_view.png b/core/res/res/drawable-mdpi/ic_menu_view.png
index 082810d..082810d 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_view.png
+++ b/core/res/res/drawable-mdpi/ic_menu_view.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_week.png b/core/res/res/drawable-mdpi/ic_menu_week.png
index e11e5f1..e11e5f1 100755..100644
--- a/core/res/res/drawable-mdpi/ic_menu_week.png
+++ b/core/res/res/drawable-mdpi/ic_menu_week.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_popup_reminder.png b/core/res/res/drawable-mdpi/ic_popup_reminder.png
index af15279..af15279 100755..100644
--- a/core/res/res/drawable-mdpi/ic_popup_reminder.png
+++ b/core/res/res/drawable-mdpi/ic_popup_reminder.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_search_category_default.png b/core/res/res/drawable-mdpi/ic_search_category_default.png
index 94446db..94446db 100755..100644
--- a/core/res/res/drawable-mdpi/ic_search_category_default.png
+++ b/core/res/res/drawable-mdpi/ic_search_category_default.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_input_error.png b/core/res/res/drawable-mdpi/indicator_input_error.png
index 775e417..775e417 100755..100644
--- a/core/res/res/drawable-mdpi/indicator_input_error.png
+++ b/core/res/res/drawable-mdpi/indicator_input_error.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_green.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_green.png
index 334a8e0..334a8e0 100755..100644
--- a/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_green.png
+++ b/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_green.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_yellow.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_yellow.png
index 2e011ca..2e011ca 100755..100644
--- a/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_yellow.png
+++ b/core/res/res/drawable-mdpi/jog_dial_arrow_long_left_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_long_middle_yellow.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_middle_yellow.png
index 323745e..323745e 100755..100644
--- a/core/res/res/drawable-mdpi/jog_dial_arrow_long_middle_yellow.png
+++ b/core/res/res/drawable-mdpi/jog_dial_arrow_long_middle_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_red.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_red.png
index 1e97c9a..1e97c9a 100755..100644
--- a/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_red.png
+++ b/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_red.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_yellow.png b/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_yellow.png
index 3536e58..3536e58 100755..100644
--- a/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_yellow.png
+++ b/core/res/res/drawable-mdpi/jog_dial_arrow_long_right_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_short_left.png b/core/res/res/drawable-mdpi/jog_dial_arrow_short_left.png
index 4a4ab3ae..4a4ab3ae 100755..100644
--- a/core/res/res/drawable-mdpi/jog_dial_arrow_short_left.png
+++ b/core/res/res/drawable-mdpi/jog_dial_arrow_short_left.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_short_left_and_right.png b/core/res/res/drawable-mdpi/jog_dial_arrow_short_left_and_right.png
index 987cfa7..987cfa7 100755..100644
--- a/core/res/res/drawable-mdpi/jog_dial_arrow_short_left_and_right.png
+++ b/core/res/res/drawable-mdpi/jog_dial_arrow_short_left_and_right.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_dial_arrow_short_right.png b/core/res/res/drawable-mdpi/jog_dial_arrow_short_right.png
index ee79875..ee79875 100755..100644
--- a/core/res/res/drawable-mdpi/jog_dial_arrow_short_right.png
+++ b/core/res/res/drawable-mdpi/jog_dial_arrow_short_right.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_dial_bg.png b/core/res/res/drawable-mdpi/jog_dial_bg.png
index 2f8f24d..2f8f24d 100755..100644
--- a/core/res/res/drawable-mdpi/jog_dial_bg.png
+++ b/core/res/res/drawable-mdpi/jog_dial_bg.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_dial_dimple.png b/core/res/res/drawable-mdpi/jog_dial_dimple.png
index 85d3a43..85d3a43 100755..100644
--- a/core/res/res/drawable-mdpi/jog_dial_dimple.png
+++ b/core/res/res/drawable-mdpi/jog_dial_dimple.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png
index 3dce451..3dce451 100755..100644
--- a/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png
+++ b/core/res/res/drawable-mdpi/jog_tab_left_confirm_gray.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png
index 829b146..829b146 100755..100644
--- a/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png
+++ b/core/res/res/drawable-mdpi/jog_tab_left_confirm_green.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png b/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png
index 5a29262..5a29262 100755..100644
--- a/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png
+++ b/core/res/res/drawable-mdpi/jog_tab_left_confirm_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_left_normal.png b/core/res/res/drawable-mdpi/jog_tab_left_normal.png
index eb91e97..eb91e97 100755..100644
--- a/core/res/res/drawable-mdpi/jog_tab_left_normal.png
+++ b/core/res/res/drawable-mdpi/jog_tab_left_normal.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_left_pressed.png b/core/res/res/drawable-mdpi/jog_tab_left_pressed.png
index 9951992..9951992 100755..100644
--- a/core/res/res/drawable-mdpi/jog_tab_left_pressed.png
+++ b/core/res/res/drawable-mdpi/jog_tab_left_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png
index d446480..d446480 100755..100644
--- a/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png
+++ b/core/res/res/drawable-mdpi/jog_tab_right_confirm_gray.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png
index 96d7acb..96d7acb 100755..100644
--- a/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png
+++ b/core/res/res/drawable-mdpi/jog_tab_right_confirm_green.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png b/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png
index 8224c38..8224c38 100755..100644
--- a/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png
+++ b/core/res/res/drawable-mdpi/jog_tab_right_confirm_yellow.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_right_normal.png b/core/res/res/drawable-mdpi/jog_tab_right_normal.png
index f2113f2..f2113f2 100755..100644
--- a/core/res/res/drawable-mdpi/jog_tab_right_normal.png
+++ b/core/res/res/drawable-mdpi/jog_tab_right_normal.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/jog_tab_right_pressed.png b/core/res/res/drawable-mdpi/jog_tab_right_pressed.png
index 65cd51e..65cd51e 100755..100644
--- a/core/res/res/drawable-mdpi/jog_tab_right_pressed.png
+++ b/core/res/res/drawable-mdpi/jog_tab_right_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png b/core/res/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png
index 29aa285..29aa285 100755..100644
--- a/core/res/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png
+++ b/core/res/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_disabled.9.png b/core/res/res/drawable-mdpi/numberpicker_down_disabled.9.png
index 596294b..596294b 100755..100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_disabled.9.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused.9.png b/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused.9.png
index 662cffd..662cffd 100755..100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused.9.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_normal.9.png b/core/res/res/drawable-mdpi/numberpicker_down_normal.9.png
index f17e8f9..f17e8f9 100755..100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_normal.9.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_pressed.9.png b/core/res/res/drawable-mdpi/numberpicker_down_pressed.9.png
index 777bcf5..777bcf5 100755..100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_pressed.9.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_selected.9.png b/core/res/res/drawable-mdpi/numberpicker_down_selected.9.png
index b45db62..b45db62 100755..100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_selected.9.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_input_disabled.9.png b/core/res/res/drawable-mdpi/numberpicker_input_disabled.9.png
index f73658e..f73658e 100755..100644
--- a/core/res/res/drawable-mdpi/numberpicker_input_disabled.9.png
+++ b/core/res/res/drawable-mdpi/numberpicker_input_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_input_normal.9.png b/core/res/res/drawable-mdpi/numberpicker_input_normal.9.png
index 8032ada..8032ada 100755..100644
--- a/core/res/res/drawable-mdpi/numberpicker_input_normal.9.png
+++ b/core/res/res/drawable-mdpi/numberpicker_input_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_input_pressed.9.png b/core/res/res/drawable-mdpi/numberpicker_input_pressed.9.png
index 30d8d5f..30d8d5f 100755..100644
--- a/core/res/res/drawable-mdpi/numberpicker_input_pressed.9.png
+++ b/core/res/res/drawable-mdpi/numberpicker_input_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_input_selected.9.png b/core/res/res/drawable-mdpi/numberpicker_input_selected.9.png
index 874f18f..874f18f 100755..100644
--- a/core/res/res/drawable-mdpi/numberpicker_input_selected.9.png
+++ b/core/res/res/drawable-mdpi/numberpicker_input_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_disabled.9.png b/core/res/res/drawable-mdpi/numberpicker_up_disabled.9.png
index 327b0b5..327b0b5 100755..100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_disabled.9.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused.9.png b/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused.9.png
index 4c96680..4c96680 100755..100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused.9.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_normal.9.png b/core/res/res/drawable-mdpi/numberpicker_up_normal.9.png
index dcd26e0..dcd26e0 100755..100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_normal.9.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_pressed.9.png b/core/res/res/drawable-mdpi/numberpicker_up_pressed.9.png
index 7dac778..7dac778 100755..100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_pressed.9.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_selected.9.png b/core/res/res/drawable-mdpi/numberpicker_up_selected.9.png
index 35dae8e..35dae8e 100755..100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_selected.9.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrollbar_handle_horizontal.9.png b/core/res/res/drawable-mdpi/scrollbar_handle_horizontal.9.png
index 8584d1f..8584d1f 100755..100644
--- a/core/res/res/drawable-mdpi/scrollbar_handle_horizontal.9.png
+++ b/core/res/res/drawable-mdpi/scrollbar_handle_horizontal.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrollbar_handle_vertical.9.png b/core/res/res/drawable-mdpi/scrollbar_handle_vertical.9.png
index 331a05d..331a05d 100755..100644
--- a/core/res/res/drawable-mdpi/scrollbar_handle_vertical.9.png
+++ b/core/res/res/drawable-mdpi/scrollbar_handle_vertical.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/search_plate.9.png b/core/res/res/drawable-mdpi/search_plate.9.png
index 8c42f10..8c42f10 100755..100644
--- a/core/res/res/drawable-mdpi/search_plate.9.png
+++ b/core/res/res/drawable-mdpi/search_plate.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_black_20.png b/core/res/res/drawable-mdpi/spinner_black_20.png
index 86d7a20..86d7a20 100755..100644
--- a/core/res/res/drawable-mdpi/spinner_black_20.png
+++ b/core/res/res/drawable-mdpi/spinner_black_20.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png b/core/res/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png
index 7194b30..7194b30 100755..100644
--- a/core/res/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png
+++ b/core/res/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_focus.9.png b/core/res/res/drawable-mdpi/tab_focus.9.png
index d9bcc57..d9bcc57 100755..100644
--- a/core/res/res/drawable-mdpi/tab_focus.9.png
+++ b/core/res/res/drawable-mdpi/tab_focus.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_focus_bar_left.9.png b/core/res/res/drawable-mdpi/tab_focus_bar_left.9.png
index 2536d94..2536d94 100755..100644
--- a/core/res/res/drawable-mdpi/tab_focus_bar_left.9.png
+++ b/core/res/res/drawable-mdpi/tab_focus_bar_left.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_focus_bar_right.9.png b/core/res/res/drawable-mdpi/tab_focus_bar_right.9.png
index 2536d94..2536d94 100755..100644
--- a/core/res/res/drawable-mdpi/tab_focus_bar_right.9.png
+++ b/core/res/res/drawable-mdpi/tab_focus_bar_right.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_press.9.png b/core/res/res/drawable-mdpi/tab_press.9.png
index 3332660..3332660 100755..100644
--- a/core/res/res/drawable-mdpi/tab_press.9.png
+++ b/core/res/res/drawable-mdpi/tab_press.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_press_bar_left.9.png b/core/res/res/drawable-mdpi/tab_press_bar_left.9.png
index d2c75e3..d2c75e3 100755..100644
--- a/core/res/res/drawable-mdpi/tab_press_bar_left.9.png
+++ b/core/res/res/drawable-mdpi/tab_press_bar_left.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_press_bar_right.9.png b/core/res/res/drawable-mdpi/tab_press_bar_right.9.png
index d2c75e3..d2c75e3 100755..100644
--- a/core/res/res/drawable-mdpi/tab_press_bar_right.9.png
+++ b/core/res/res/drawable-mdpi/tab_press_bar_right.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_selected_bar_left.9.png b/core/res/res/drawable-mdpi/tab_selected_bar_left.9.png
index d20f3a2..d20f3a2 100755..100644
--- a/core/res/res/drawable-mdpi/tab_selected_bar_left.9.png
+++ b/core/res/res/drawable-mdpi/tab_selected_bar_left.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_selected_bar_right.9.png b/core/res/res/drawable-mdpi/tab_selected_bar_right.9.png
index d20f3a2..d20f3a2 100755..100644
--- a/core/res/res/drawable-mdpi/tab_selected_bar_right.9.png
+++ b/core/res/res/drawable-mdpi/tab_selected_bar_right.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_search_default.9.png b/core/res/res/drawable-mdpi/textfield_search_default.9.png
index 7dc5b27..7dc5b27 100755..100644
--- a/core/res/res/drawable-mdpi/textfield_search_default.9.png
+++ b/core/res/res/drawable-mdpi/textfield_search_default.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_search_selected.9.png b/core/res/res/drawable-mdpi/textfield_search_selected.9.png
index a9fd3b2..a9fd3b2 100755..100644
--- a/core/res/res/drawable-mdpi/textfield_search_selected.9.png
+++ b/core/res/res/drawable-mdpi/textfield_search_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/toast_frame.9.png b/core/res/res/drawable-mdpi/toast_frame.9.png
index b9105de..b9105de 100755..100644
--- a/core/res/res/drawable-mdpi/toast_frame.9.png
+++ b/core/res/res/drawable-mdpi/toast_frame.9.png
Binary files differ
diff --git a/core/res/res/layout/app_perms_summary.xml b/core/res/res/layout/app_perms_summary.xml
index b8d93ac..b8d93ac 100755..100644
--- a/core/res/res/layout/app_perms_summary.xml
+++ b/core/res/res/layout/app_perms_summary.xml
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 20c2142..4c42a17 100644
--- a/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
@@ -33,7 +33,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
- android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceLarge"/>
<!-- Carrier info -->
diff --git a/core/res/res/layout/search_view.xml b/core/res/res/layout/search_view.xml
index a281fcc..29c0576 100644
--- a/core/res/res/layout/search_view.xml
+++ b/core/res/res/layout/search_view.xml
@@ -45,6 +45,7 @@
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:src="?android:attr/searchViewSearchIcon"
+ android:focusable="true"
android:contentDescription="@string/searchview_description_search"
/>
diff --git a/core/res/res/raw/fallbackring.ogg b/core/res/res/raw/fallbackring.ogg
index a9adeb8..a9adeb8 100755..100644
--- a/core/res/res/raw/fallbackring.ogg
+++ b/core/res/res/raw/fallbackring.ogg
Binary files differ
diff --git a/core/res/res/values-af/donottranslate-cldr.xml b/core/res/res/values-af/donottranslate-cldr.xml
index 77b7f7c..ca693b6 100644
--- a/core/res/res/values-af/donottranslate-cldr.xml
+++ b/core/res/res/values-af/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y/%m/%d</string>
<string name="numeric_date_format">yyyy/MM/dd</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-am/donottranslate-cldr.xml b/core/res/res/values-am/donottranslate-cldr.xml
index b3b76f9..a7cb1c7 100644
--- a/core/res/res/values-am/donottranslate-cldr.xml
+++ b/core/res/res/values-am/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-ar-rEG/donottranslate-cldr.xml b/core/res/res/values-ar-rEG/donottranslate-cldr.xml
index 155480d..7480756 100644
--- a/core/res/res/values-ar-rEG/donottranslate-cldr.xml
+++ b/core/res/res/values-ar-rEG/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e‏/%-m‏/%Y</string>
<string name="numeric_date_format">d‏/M‏/yyyy</string>
<string name="numeric_date_template">"%s‏/%s‏/%s"</string>
diff --git a/core/res/res/values-ar/donottranslate-cldr.xml b/core/res/res/values-ar/donottranslate-cldr.xml
index 135963b..44d8a26 100644
--- a/core/res/res/values-ar/donottranslate-cldr.xml
+++ b/core/res/res/values-ar/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e‏/%-m‏/%Y</string>
<string name="numeric_date_format">d‏/M‏/yyyy</string>
<string name="numeric_date_template">"%s‏/%s‏/%s"</string>
diff --git a/core/res/res/values-be/donottranslate-cldr.xml b/core/res/res/values-be/donottranslate-cldr.xml
index a346c83..926b4bb 100644
--- a/core/res/res/values-be/donottranslate-cldr.xml
+++ b/core/res/res/values-be/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k.%M</string>
<string name="hour_minute_ampm">%-l.%M %p</string>
<string name="hour_minute_cap_ampm">%-l.%M %p</string>
- <string name="twelve_hour_time_format">h.mm a</string>
- <string name="twenty_four_hour_time_format">H.mm</string>
<string name="numeric_date">%-e.%-m.%Y</string>
<string name="numeric_date_format">d.M.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
diff --git a/core/res/res/values-bg/donottranslate-cldr.xml b/core/res/res/values-bg/donottranslate-cldr.xml
index 9c1ae2c..e7ad610 100644
--- a/core/res/res/values-bg/donottranslate-cldr.xml
+++ b/core/res/res/values-bg/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
diff --git a/core/res/res/values-ca/donottranslate-cldr.xml b/core/res/res/values-ca/donottranslate-cldr.xml
index 84e7e79..0872125 100644
--- a/core/res/res/values-ca/donottranslate-cldr.xml
+++ b/core/res/res/values-ca/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-cs/donottranslate-cldr.xml b/core/res/res/values-cs/donottranslate-cldr.xml
index ff7902d..bbf42f0 100644
--- a/core/res/res/values-cs/donottranslate-cldr.xml
+++ b/core/res/res/values-cs/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e. %-m. %Y</string>
<string name="numeric_date_format">d. M. yyyy</string>
<string name="numeric_date_template">"%s. %s. %s"</string>
diff --git a/core/res/res/values-da/donottranslate-cldr.xml b/core/res/res/values-da/donottranslate-cldr.xml
index d5b9878..427fd0c 100644
--- a/core/res/res/values-da/donottranslate-cldr.xml
+++ b/core/res/res/values-da/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l.%M %p</string>
<string name="hour_minute_cap_ampm">%-l.%M %^p</string>
- <string name="twelve_hour_time_format">h.mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-de/donottranslate-cldr.xml b/core/res/res/values-de/donottranslate-cldr.xml
index 9bdd8a3..850fe26 100644
--- a/core/res/res/values-de/donottranslate-cldr.xml
+++ b/core/res/res/values-de/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
diff --git a/core/res/res/values-el/donottranslate-cldr.xml b/core/res/res/values-el/donottranslate-cldr.xml
index a0c69b5..dfa199d 100644
--- a/core/res/res/values-el/donottranslate-cldr.xml
+++ b/core/res/res/values-el/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-en-rAU/donottranslate-cldr.xml b/core/res/res/values-en-rAU/donottranslate-cldr.xml
index 947fe92..7ccff4d 100644
--- a/core/res/res/values-en-rAU/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rAU/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%-e/%m/%Y</string>
<string name="numeric_date_format">d/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-en-rCA/donottranslate-cldr.xml b/core/res/res/values-en-rCA/donottranslate-cldr.xml
index 1845f28..21e9b7e 100644
--- a/core/res/res/values-en-rCA/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rCA/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%Y-%m-%d</string>
<string name="numeric_date_format">yyyy-MM-dd</string>
<string name="numeric_date_template">"%s-%s-%s"</string>
diff --git a/core/res/res/values-en-rGB/donottranslate-cldr.xml b/core/res/res/values-en-rGB/donottranslate-cldr.xml
index a10dfa50..22a8e41 100644
--- a/core/res/res/values-en-rGB/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rGB/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-en-rIE/donottranslate-cldr.xml b/core/res/res/values-en-rIE/donottranslate-cldr.xml
index 65cab99..c88d86c 100644
--- a/core/res/res/values-en-rIE/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rIE/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-en-rIN/donottranslate-cldr.xml b/core/res/res/values-en-rIN/donottranslate-cldr.xml
index 48942fe..3b7a0ca 100644
--- a/core/res/res/values-en-rIN/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rIN/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-en-rNZ/donottranslate-cldr.xml b/core/res/res/values-en-rNZ/donottranslate-cldr.xml
index 117dda8..9156376 100644
--- a/core/res/res/values-en-rNZ/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rNZ/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%-e/%m/%Y</string>
<string name="numeric_date_format">d/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-en-rUS/donottranslate-cldr.xml b/core/res/res/values-en-rUS/donottranslate-cldr.xml
index 0587c16..4d37d47 100644
--- a/core/res/res/values-en-rUS/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rUS/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%-m/%-e/%Y</string>
<string name="numeric_date_format">M/d/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-en-rZA/donottranslate-cldr.xml b/core/res/res/values-en-rZA/donottranslate-cldr.xml
index 48ebc6e..5ae38c1 100644
--- a/core/res/res/values-en-rZA/donottranslate-cldr.xml
+++ b/core/res/res/values-en-rZA/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%Y/%m/%d</string>
<string name="numeric_date_format">yyyy/MM/dd</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-es-rUS/donottranslate-cldr.xml b/core/res/res/values-es-rUS/donottranslate-cldr.xml
index 9224786..2339066 100644
--- a/core/res/res/values-es-rUS/donottranslate-cldr.xml
+++ b/core/res/res/values-es-rUS/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-m/%-e/%Y</string>
<string name="numeric_date_format">M/d/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-es/donottranslate-cldr.xml b/core/res/res/values-es/donottranslate-cldr.xml
index 0a680b6..dd8a8fa 100644
--- a/core/res/res/values-es/donottranslate-cldr.xml
+++ b/core/res/res/values-es/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-et/donottranslate-cldr.xml b/core/res/res/values-et/donottranslate-cldr.xml
index bf269dd..912df10 100644
--- a/core/res/res/values-et/donottranslate-cldr.xml
+++ b/core/res/res/values-et/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
diff --git a/core/res/res/values-fa/donottranslate-cldr.xml b/core/res/res/values-fa/donottranslate-cldr.xml
index 402311a..e1c8fec 100644
--- a/core/res/res/values-fa/donottranslate-cldr.xml
+++ b/core/res/res/values-fa/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y/%-m/%-e</string>
<string name="numeric_date_format">yyyy/M/d</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-fi-rFI/donottranslate-cldr.xml b/core/res/res/values-fi-rFI/donottranslate-cldr.xml
index 04f0a77..32b7803 100644
--- a/core/res/res/values-fi-rFI/donottranslate-cldr.xml
+++ b/core/res/res/values-fi-rFI/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k.%M</string>
<string name="hour_minute_ampm">%-l.%M %p</string>
<string name="hour_minute_cap_ampm">%-l.%M %^p</string>
- <string name="twelve_hour_time_format">h.mm a</string>
- <string name="twenty_four_hour_time_format">H.mm</string>
<string name="numeric_date">%-e.%-m.%Y</string>
<string name="numeric_date_format">d.M.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
diff --git a/core/res/res/values-fi/donottranslate-cldr.xml b/core/res/res/values-fi/donottranslate-cldr.xml
index 543595f..df6f78f 100644
--- a/core/res/res/values-fi/donottranslate-cldr.xml
+++ b/core/res/res/values-fi/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k.%M</string>
<string name="hour_minute_ampm">%-l.%M %p</string>
<string name="hour_minute_cap_ampm">%-l.%M %^p</string>
- <string name="twelve_hour_time_format">h.mm a</string>
- <string name="twenty_four_hour_time_format">H.mm</string>
<string name="numeric_date">%-e.%-m.%Y</string>
<string name="numeric_date_format">d.M.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
diff --git a/core/res/res/values-fr/donottranslate-cldr.xml b/core/res/res/values-fr/donottranslate-cldr.xml
index ff10aec..5698514 100644
--- a/core/res/res/values-fr/donottranslate-cldr.xml
+++ b/core/res/res/values-fr/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-hi-rIN/donottranslate-cldr.xml b/core/res/res/values-hi-rIN/donottranslate-cldr.xml
index 5371e15..72b89c2 100644
--- a/core/res/res/values-hi-rIN/donottranslate-cldr.xml
+++ b/core/res/res/values-hi-rIN/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e-%-m-%Y</string>
<string name="numeric_date_format">d-M-yyyy</string>
<string name="numeric_date_template">"%s-%s-%s"</string>
diff --git a/core/res/res/values-hi/donottranslate-cldr.xml b/core/res/res/values-hi/donottranslate-cldr.xml
index 8043169..3e6138e 100644
--- a/core/res/res/values-hi/donottranslate-cldr.xml
+++ b/core/res/res/values-hi/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e-%-m-%Y</string>
<string name="numeric_date_format">d-M-yyyy</string>
<string name="numeric_date_template">"%s-%s-%s"</string>
diff --git a/core/res/res/values-hr-rHR/donottranslate-cldr.xml b/core/res/res/values-hr-rHR/donottranslate-cldr.xml
index 57e0572..d6d20e7 100644
--- a/core/res/res/values-hr-rHR/donottranslate-cldr.xml
+++ b/core/res/res/values-hr-rHR/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e.%-m.%Y.</string>
<string name="numeric_date_format">d.M.yyyy.</string>
<string name="numeric_date_template">"%s.%s.%s."</string>
diff --git a/core/res/res/values-hr/donottranslate-cldr.xml b/core/res/res/values-hr/donottranslate-cldr.xml
index 9e4b225..8703981 100644
--- a/core/res/res/values-hr/donottranslate-cldr.xml
+++ b/core/res/res/values-hr/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e.%-m.%Y.</string>
<string name="numeric_date_format">d.M.yyyy.</string>
<string name="numeric_date_template">"%s.%s.%s."</string>
diff --git a/core/res/res/values-hu-rHU/donottranslate-cldr.xml b/core/res/res/values-hu-rHU/donottranslate-cldr.xml
index 5f4b8aa..59eb75a 100644
--- a/core/res/res/values-hu-rHU/donottranslate-cldr.xml
+++ b/core/res/res/values-hu-rHU/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%p %-l:%M</string>
<string name="hour_minute_cap_ampm">%^p %-l:%M</string>
- <string name="twelve_hour_time_format">a h:mm</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%Y.%m.%d.</string>
<string name="numeric_date_format">yyyy.MM.dd.</string>
<string name="numeric_date_template">"%s.%s.%s."</string>
diff --git a/core/res/res/values-hu/donottranslate-cldr.xml b/core/res/res/values-hu/donottranslate-cldr.xml
index c925b82..525b0c0 100644
--- a/core/res/res/values-hu/donottranslate-cldr.xml
+++ b/core/res/res/values-hu/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%Y.%m.%d.</string>
<string name="numeric_date_format">yyyy.MM.dd.</string>
<string name="numeric_date_template">"%s.%s.%s."</string>
diff --git a/core/res/res/values-in-rID/donottranslate-cldr.xml b/core/res/res/values-in-rID/donottranslate-cldr.xml
index 8b13bcf..aedc2c7 100644
--- a/core/res/res/values-in-rID/donottranslate-cldr.xml
+++ b/core/res/res/values-in-rID/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-in/donottranslate-cldr.xml b/core/res/res/values-in/donottranslate-cldr.xml
index 6e9bba4..7371132 100644
--- a/core/res/res/values-in/donottranslate-cldr.xml
+++ b/core/res/res/values-in/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-it/donottranslate-cldr.xml b/core/res/res/values-it/donottranslate-cldr.xml
index 9ff27e8..b06e73d 100644
--- a/core/res/res/values-it/donottranslate-cldr.xml
+++ b/core/res/res/values-it/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-iw/donottranslate-cldr.xml b/core/res/res/values-iw/donottranslate-cldr.xml
index 631c059..037251e 100644
--- a/core/res/res/values-iw/donottranslate-cldr.xml
+++ b/core/res/res/values-iw/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-ja/donottranslate-cldr.xml b/core/res/res/values-ja/donottranslate-cldr.xml
index 1c1d55f..f2cdbba 100644
--- a/core/res/res/values-ja/donottranslate-cldr.xml
+++ b/core/res/res/values-ja/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
- <string name="twelve_hour_time_format">h:mma</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y/%m/%d</string>
<string name="numeric_date_format">yyyy/MM/dd</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-ko/donottranslate-cldr.xml b/core/res/res/values-ko/donottranslate-cldr.xml
index 59b975f..29d7982 100644
--- a/core/res/res/values-ko/donottranslate-cldr.xml
+++ b/core/res/res/values-ko/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%p %-l:%M</string>
<string name="hour_minute_cap_ampm">%p %-l:%M</string>
- <string name="twelve_hour_time_format">a h:mm</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y. %-m. %-e.</string>
<string name="numeric_date_format">yyyy. M. d.</string>
<string name="numeric_date_template">"%s. %s. %s."</string>
diff --git a/core/res/res/values-lt-rLT/donottranslate-cldr.xml b/core/res/res/values-lt-rLT/donottranslate-cldr.xml
index 6cf6098..19ae2ea 100644
--- a/core/res/res/values-lt-rLT/donottranslate-cldr.xml
+++ b/core/res/res/values-lt-rLT/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y-%m-%d</string>
<string name="numeric_date_format">yyyy-MM-dd</string>
<string name="numeric_date_template">"%s-%s-%s"</string>
diff --git a/core/res/res/values-lt/donottranslate-cldr.xml b/core/res/res/values-lt/donottranslate-cldr.xml
index b1a94f3..0683d46 100644
--- a/core/res/res/values-lt/donottranslate-cldr.xml
+++ b/core/res/res/values-lt/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y-%m-%d</string>
<string name="numeric_date_format">yyyy-MM-dd</string>
<string name="numeric_date_template">"%s-%s-%s"</string>
diff --git a/core/res/res/values-lv-rLV/donottranslate-cldr.xml b/core/res/res/values-lv-rLV/donottranslate-cldr.xml
index 3922f6b..eb74fa3 100644
--- a/core/res/res/values-lv-rLV/donottranslate-cldr.xml
+++ b/core/res/res/values-lv-rLV/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
diff --git a/core/res/res/values-lv/donottranslate-cldr.xml b/core/res/res/values-lv/donottranslate-cldr.xml
index ec768bc..cd55478 100644
--- a/core/res/res/values-lv/donottranslate-cldr.xml
+++ b/core/res/res/values-lv/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
diff --git a/core/res/res/values-mcc208-mnc01/config.xml b/core/res/res/values-mcc208-mnc01/config.xml
index c1489b1..c1489b1 100755..100644
--- a/core/res/res/values-mcc208-mnc01/config.xml
+++ b/core/res/res/values-mcc208-mnc01/config.xml
diff --git a/core/res/res/values-mcc208-mnc10/config.xml b/core/res/res/values-mcc208-mnc10/config.xml
index 99cc599..99cc599 100755..100644
--- a/core/res/res/values-mcc208-mnc10/config.xml
+++ b/core/res/res/values-mcc208-mnc10/config.xml
diff --git a/core/res/res/values-mcc214-mnc03/config.xml b/core/res/res/values-mcc214-mnc03/config.xml
index 02f1475..02f1475 100755..100644
--- a/core/res/res/values-mcc214-mnc03/config.xml
+++ b/core/res/res/values-mcc214-mnc03/config.xml
diff --git a/core/res/res/values-mcc214-mnc07/config.xml b/core/res/res/values-mcc214-mnc07/config.xml
index 4e3fa16..4e3fa16 100755..100644
--- a/core/res/res/values-mcc214-mnc07/config.xml
+++ b/core/res/res/values-mcc214-mnc07/config.xml
diff --git a/core/res/res/values-mcc222-mnc01/config.xml b/core/res/res/values-mcc222-mnc01/config.xml
index 6bb1196..6bb1196 100755..100644
--- a/core/res/res/values-mcc222-mnc01/config.xml
+++ b/core/res/res/values-mcc222-mnc01/config.xml
diff --git a/core/res/res/values-mcc222-mnc10/config.xml b/core/res/res/values-mcc222-mnc10/config.xml
index 24dd71c..24dd71c 100755..100644
--- a/core/res/res/values-mcc222-mnc10/config.xml
+++ b/core/res/res/values-mcc222-mnc10/config.xml
diff --git a/core/res/res/values-mcc234-mnc33/config.xml b/core/res/res/values-mcc234-mnc33/config.xml
index d79d212..d79d212 100755..100644
--- a/core/res/res/values-mcc234-mnc33/config.xml
+++ b/core/res/res/values-mcc234-mnc33/config.xml
diff --git a/core/res/res/values-mcc286/config.xml b/core/res/res/values-mcc286/config.xml
index d99d051..d99d051 100755..100644
--- a/core/res/res/values-mcc286/config.xml
+++ b/core/res/res/values-mcc286/config.xml
diff --git a/core/res/res/values-mcc302-mnc370/config.xml b/core/res/res/values-mcc302-mnc370/config.xml
index b1d363f..b1d363f 100755..100644
--- a/core/res/res/values-mcc302-mnc370/config.xml
+++ b/core/res/res/values-mcc302-mnc370/config.xml
diff --git a/core/res/res/values-mcc302-mnc660/config.xml b/core/res/res/values-mcc302-mnc660/config.xml
index 37853cf..37853cf 100755..100644
--- a/core/res/res/values-mcc302-mnc660/config.xml
+++ b/core/res/res/values-mcc302-mnc660/config.xml
diff --git a/core/res/res/values-mcc302-mnc720/config.xml b/core/res/res/values-mcc302-mnc720/config.xml
index 40ef939..40ef939 100755..100644
--- a/core/res/res/values-mcc302-mnc720/config.xml
+++ b/core/res/res/values-mcc302-mnc720/config.xml
diff --git a/core/res/res/values-mcc340-mnc01/config.xml b/core/res/res/values-mcc340-mnc01/config.xml
index fb71f3bc..fb71f3bc 100755..100644
--- a/core/res/res/values-mcc340-mnc01/config.xml
+++ b/core/res/res/values-mcc340-mnc01/config.xml
diff --git a/core/res/res/values-ms/donottranslate-cldr.xml b/core/res/res/values-ms/donottranslate-cldr.xml
index a5843ff..7c02f3f 100644
--- a/core/res/res/values-ms/donottranslate-cldr.xml
+++ b/core/res/res/values-ms/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-nb/donottranslate-cldr.xml b/core/res/res/values-nb/donottranslate-cldr.xml
index 8eb1ff6..6d343ca 100644
--- a/core/res/res/values-nb/donottranslate-cldr.xml
+++ b/core/res/res/values-nb/donottranslate-cldr.xml
@@ -1,17 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="hour_minute_24">%H.%M</string>
- <string name="hour_minute_ampm">%-l.%M %p</string>
- <string name="hour_minute_cap_ampm">%-l.%M %^p</string>
- <string name="twelve_hour_time_format">h.mm a</string>
- <string name="twenty_four_hour_time_format">HH.mm</string>
+ <string name="hour_minute_24">%H:%M</string>
+ <string name="hour_minute_ampm">%-l:%M %p</string>
+ <string name="hour_minute_cap_ampm">%-l:%M %^p</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
<string name="month_day_year">%-e. %B %Y</string>
- <string name="time_of_day">%H.%M.%S</string>
- <string name="date_and_time">%H.%M.%S %-e. %b %Y</string>
+ <string name="time_of_day">%H:%M:%S</string>
+ <string name="date_and_time">%H:%M:%S %-e. %b %Y</string>
<string name="date_time">%2$s %1$s</string>
<string name="time_date">%1$s %3$s</string>
<string name="abbrev_month_day_year">%-e. %b %Y</string>
diff --git a/core/res/res/values-nl/donottranslate-cldr.xml b/core/res/res/values-nl/donottranslate-cldr.xml
index 1495a48..54e7e39 100644
--- a/core/res/res/values-nl/donottranslate-cldr.xml
+++ b/core/res/res/values-nl/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d-%m-%Y</string>
<string name="numeric_date_format">dd-MM-yyyy</string>
<string name="numeric_date_template">"%s-%s-%s"</string>
diff --git a/core/res/res/values-pl/donottranslate-cldr.xml b/core/res/res/values-pl/donottranslate-cldr.xml
index 53f0c36..91c98ea 100644
--- a/core/res/res/values-pl/donottranslate-cldr.xml
+++ b/core/res/res/values-pl/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
diff --git a/core/res/res/values-pt-rPT/donottranslate-cldr.xml b/core/res/res/values-pt-rPT/donottranslate-cldr.xml
index 26d8371..60787a9 100644
--- a/core/res/res/values-pt-rPT/donottranslate-cldr.xml
+++ b/core/res/res/values-pt-rPT/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-kh%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H\'h\'mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-pt/donottranslate-cldr.xml b/core/res/res/values-pt/donottranslate-cldr.xml
index c3e6c29..d5fee19 100644
--- a/core/res/res/values-pt/donottranslate-cldr.xml
+++ b/core/res/res/values-pt/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-kh%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H\'h\'mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-rm/donottranslate-cldr.xml b/core/res/res/values-rm/donottranslate-cldr.xml
index e6f0df2..32e1170 100644
--- a/core/res/res/values-rm/donottranslate-cldr.xml
+++ b/core/res/res/values-rm/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
diff --git a/core/res/res/values-ro-rRO/donottranslate-cldr.xml b/core/res/res/values-ro-rRO/donottranslate-cldr.xml
index 7056803..1233f4e 100644
--- a/core/res/res/values-ro-rRO/donottranslate-cldr.xml
+++ b/core/res/res/values-ro-rRO/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
diff --git a/core/res/res/values-ro/donottranslate-cldr.xml b/core/res/res/values-ro/donottranslate-cldr.xml
index 935c6af..f80a944 100644
--- a/core/res/res/values-ro/donottranslate-cldr.xml
+++ b/core/res/res/values-ro/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
diff --git a/core/res/res/values-ru/donottranslate-cldr.xml b/core/res/res/values-ru/donottranslate-cldr.xml
index 03c64ab..4e315eb 100644
--- a/core/res/res/values-ru/donottranslate-cldr.xml
+++ b/core/res/res/values-ru/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
diff --git a/core/res/res/values-sk-rSK/donottranslate-cldr.xml b/core/res/res/values-sk-rSK/donottranslate-cldr.xml
index 651c58c..94dca66 100644
--- a/core/res/res/values-sk-rSK/donottranslate-cldr.xml
+++ b/core/res/res/values-sk-rSK/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%-e. %-m. %Y</string>
<string name="numeric_date_format">d. M. yyyy</string>
<string name="numeric_date_template">"%s. %s. %s"</string>
diff --git a/core/res/res/values-sk/donottranslate-cldr.xml b/core/res/res/values-sk/donottranslate-cldr.xml
index 48c644a..9eeb133 100644
--- a/core/res/res/values-sk/donottranslate-cldr.xml
+++ b/core/res/res/values-sk/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%-e.%-m.%Y</string>
<string name="numeric_date_format">d.M.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
diff --git a/core/res/res/values-sl-rSI/donottranslate-cldr.xml b/core/res/res/values-sl-rSI/donottranslate-cldr.xml
index 84fffbd..6cf9bd6 100644
--- a/core/res/res/values-sl-rSI/donottranslate-cldr.xml
+++ b/core/res/res/values-sl-rSI/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e. %m. %Y</string>
<string name="numeric_date_format">d. MM. yyyy</string>
<string name="numeric_date_template">"%s. %s. %s"</string>
diff --git a/core/res/res/values-sl/donottranslate-cldr.xml b/core/res/res/values-sl/donottranslate-cldr.xml
index 137ed3f..49d36fd 100644
--- a/core/res/res/values-sl/donottranslate-cldr.xml
+++ b/core/res/res/values-sl/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e. %m. %Y</string>
<string name="numeric_date_format">d. MM. yyyy</string>
<string name="numeric_date_template">"%s. %s. %s"</string>
diff --git a/core/res/res/values-sr-rRS/donottranslate-cldr.xml b/core/res/res/values-sr-rRS/donottranslate-cldr.xml
index 996c75e..3f88960 100644
--- a/core/res/res/values-sr-rRS/donottranslate-cldr.xml
+++ b/core/res/res/values-sr-rRS/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H.%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH.mm</string>
<string name="numeric_date">%-e.%-m.%Y.</string>
<string name="numeric_date_format">d.M.yyyy.</string>
<string name="numeric_date_template">"%s.%s.%s."</string>
diff --git a/core/res/res/values-sr/donottranslate-cldr.xml b/core/res/res/values-sr/donottranslate-cldr.xml
index 7fca1a2..ca3cb08 100644
--- a/core/res/res/values-sr/donottranslate-cldr.xml
+++ b/core/res/res/values-sr/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H.%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH.mm</string>
<string name="numeric_date">%-e.%-m.%Y.</string>
<string name="numeric_date_format">d.M.yyyy.</string>
<string name="numeric_date_template">"%s.%s.%s."</string>
diff --git a/core/res/res/values-sv/donottranslate-cldr.xml b/core/res/res/values-sv/donottranslate-cldr.xml
index 64c83f2..46b9f9d 100644
--- a/core/res/res/values-sv/donottranslate-cldr.xml
+++ b/core/res/res/values-sv/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d-%m-%Y</string>
<string name="numeric_date_format">dd-MM-yyyy</string>
<string name="numeric_date_template">"%s-%s-%s"</string>
diff --git a/core/res/res/values-sw/donottranslate-cldr.xml b/core/res/res/values-sw/donottranslate-cldr.xml
index a7a5150..e0625e9 100644
--- a/core/res/res/values-sw/donottranslate-cldr.xml
+++ b/core/res/res/values-sw/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y/%m/%d</string>
<string name="numeric_date_format">yyyy/MM/dd</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-th-rTH/donottranslate-cldr.xml b/core/res/res/values-th-rTH/donottranslate-cldr.xml
index 2517143..94ec23d 100644
--- a/core/res/res/values-th-rTH/donottranslate-cldr.xml
+++ b/core/res/res/values-th-rTH/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e/%-m/%Y</string>
<string name="numeric_date_format">d/M/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-th/donottranslate-cldr.xml b/core/res/res/values-th/donottranslate-cldr.xml
index 7ab4191..b42656a 100644
--- a/core/res/res/values-th/donottranslate-cldr.xml
+++ b/core/res/res/values-th/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%-e/%-m/%Y</string>
<string name="numeric_date_format">d/M/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-tl/donottranslate-cldr.xml b/core/res/res/values-tl/donottranslate-cldr.xml
index 4545fb5..970a538 100644
--- a/core/res/res/values-tl/donottranslate-cldr.xml
+++ b/core/res/res/values-tl/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y-%m-%d</string>
<string name="numeric_date_format">yyyy-MM-dd</string>
<string name="numeric_date_template">"%s-%s-%s"</string>
diff --git a/core/res/res/values-tr/donottranslate-cldr.xml b/core/res/res/values-tr/donottranslate-cldr.xml
index 1ab4ff7..a0ee370 100644
--- a/core/res/res/values-tr/donottranslate-cldr.xml
+++ b/core/res/res/values-tr/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%d %m %Y</string>
<string name="numeric_date_format">dd MM yyyy</string>
<string name="numeric_date_template">"%s %s %s"</string>
diff --git a/core/res/res/values-uk-rUA/donottranslate-cldr.xml b/core/res/res/values-uk-rUA/donottranslate-cldr.xml
index f7ca458..5cb41f4 100644
--- a/core/res/res/values-uk-rUA/donottranslate-cldr.xml
+++ b/core/res/res/values-uk-rUA/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
diff --git a/core/res/res/values-uk/donottranslate-cldr.xml b/core/res/res/values-uk/donottranslate-cldr.xml
index 51c2cb5..f2a61da 100644
--- a/core/res/res/values-uk/donottranslate-cldr.xml
+++ b/core/res/res/values-uk/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d.%m.%Y</string>
<string name="numeric_date_format">dd.MM.yyyy</string>
<string name="numeric_date_template">"%s.%s.%s"</string>
diff --git a/core/res/res/values-vi-rVN/donottranslate-cldr.xml b/core/res/res/values-vi-rVN/donottranslate-cldr.xml
index a385015..307dab2 100644
--- a/core/res/res/values-vi-rVN/donottranslate-cldr.xml
+++ b/core/res/res/values-vi-rVN/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-vi/donottranslate-cldr.xml b/core/res/res/values-vi/donottranslate-cldr.xml
index 977e021..f4d5dc3 100644
--- a/core/res/res/values-vi/donottranslate-cldr.xml
+++ b/core/res/res/values-vi/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%d/%m/%Y</string>
<string name="numeric_date_format">dd/MM/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-zh-rCN/donottranslate-cldr.xml b/core/res/res/values-zh-rCN/donottranslate-cldr.xml
index b34b8b3..6ac384a 100644
--- a/core/res/res/values-zh-rCN/donottranslate-cldr.xml
+++ b/core/res/res/values-zh-rCN/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%p %-l:%M</string>
<string name="hour_minute_cap_ampm">%p %-l:%M</string>
- <string name="twelve_hour_time_format">a h:mm</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y-%-m-%-e</string>
<string name="numeric_date_format">yyyy-M-d</string>
<string name="numeric_date_template">"%s-%s-%s"</string>
diff --git a/core/res/res/values-zh-rTW/donottranslate-cldr.xml b/core/res/res/values-zh-rTW/donottranslate-cldr.xml
index 869705e..42faa83 100644
--- a/core/res/res/values-zh-rTW/donottranslate-cldr.xml
+++ b/core/res/res/values-zh-rTW/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%p %-l:%M</string>
<string name="hour_minute_cap_ampm">%p %-l:%M</string>
- <string name="twelve_hour_time_format">a h:mm</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y/%-m/%-e</string>
<string name="numeric_date_format">yyyy/M/d</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values-zu/donottranslate-cldr.xml b/core/res/res/values-zu/donottranslate-cldr.xml
index 97b179b..703823c 100644
--- a/core/res/res/values-zu/donottranslate-cldr.xml
+++ b/core/res/res/values-zu/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%-k:%M</string>
<string name="hour_minute_ampm">%-l:%M %p</string>
<string name="hour_minute_cap_ampm">%-l:%M %^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">H:mm</string>
<string name="numeric_date">%Y-%m-%d</string>
<string name="numeric_date_format">yyyy-MM-dd</string>
<string name="numeric_date_template">"%s-%s-%s"</string>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 05130a1..c0d5136 100755..100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -3050,12 +3050,12 @@
<!-- Specifies the formatting pattern used to show the time and/or date
in 12-hour mode. Please refer to {@link android.text.format.DateFormat}
for a complete description of accepted formatting patterns.
- The default pattern is "h:mm aa". -->
+ The default pattern is a locale-appropriate equivalent of "h:mm a". -->
<attr name="format12Hour" format="string"/>
<!-- Specifies the formatting pattern used to show the time and/or date
in 24-hour mode. Please refer to {@link android.text.format.DateFormat}
for a complete description of accepted formatting patterns.
- The default pattern is "k:mm". -->
+ The default pattern is a locale-appropriate equivalent of "H:mm". -->
<attr name="format24Hour" format="string"/>
<!-- Specifies the time zone to use. When this attribute is specified, the
TextClock will ignore the time zone of the system. To use the user's
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index cb7804c..354a0f4 100755..100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -277,8 +277,6 @@
<!-- Boolean indicating whether the wifi chipset has dual frequency band support -->
<bool translatable="false" name="config_wifi_dual_band_support">false</bool>
- <!-- Boolean indicating whether the wifi chipset has p2p support -->
- <bool translatable="false" name="config_wifi_p2p_support">false</bool>
<!-- Device type information conforming to Annex B format in WiFi Direct specification.
The default represents a dual-mode smartphone -->
<string translatable="false" name="config_wifi_p2p_device_type">10-0050F204-5</string>
diff --git a/core/res/res/values/donottranslate-cldr.xml b/core/res/res/values/donottranslate-cldr.xml
index 0587c16..4d37d47 100644
--- a/core/res/res/values/donottranslate-cldr.xml
+++ b/core/res/res/values/donottranslate-cldr.xml
@@ -4,8 +4,6 @@
<string name="hour_minute_24">%H:%M</string>
<string name="hour_minute_ampm">%-l:%M%p</string>
<string name="hour_minute_cap_ampm">%-l:%M%^p</string>
- <string name="twelve_hour_time_format">h:mm a</string>
- <string name="twenty_four_hour_time_format">HH:mm</string>
<string name="numeric_date">%-m/%-e/%Y</string>
<string name="numeric_date_format">M/d/yyyy</string>
<string name="numeric_date_template">"%s/%s/%s"</string>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 99fbf95..cb8d0e5 100755..100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -2272,6 +2272,8 @@
<!-- Accessibility description sent when user completes drawing a pattern. [CHAR LIMIT=NONE] -->
<string name="lockscreen_access_pattern_detected">Pattern completed</string>
+ <!-- Accessibility description sent when user changes the current lock screen widget. [CHAR_LIMIT=none] -->
+ <string name="keyguard_accessibility_widget_changed">%1$s. Widget %2$d of %3$d.</string>
<!-- Accessibility description of the add widget button. [CHAR_LIMIT=none] -->
<string name="keyguard_accessibility_add_widget">Add widget.</string>
<!-- Accessibility description of the empty sidget slot (place holder for a new widget). [CHAR_LIMIT=none] -->
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 391320b..caeccb5 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -810,8 +810,6 @@
<java-symbol type="string" name="time_picker_separator" />
<java-symbol type="string" name="time_wday" />
<java-symbol type="string" name="time_wday_date" />
- <java-symbol type="string" name="twelve_hour_time_format" />
- <java-symbol type="string" name="twenty_four_hour_time_format" />
<java-symbol type="string" name="upload_file" />
<java-symbol type="string" name="user_switched" />
<java-symbol type="string" name="volume_alarm" />
@@ -1354,7 +1352,6 @@
<java-symbol type="id" name="sliding_layout" />
<java-symbol type="id" name="keyguard_add_widget" />
<java-symbol type="id" name="keyguard_add_widget_view" />
- <java-symbol type="id" name="sliding_layout" />
<java-symbol type="id" name="multi_pane_challenge" />
<java-symbol type="id" name="keyguard_user_selector" />
<java-symbol type="id" name="key_enter" />
diff --git a/core/res/res/xml-land/password_kbd_qwerty.xml b/core/res/res/xml-land/password_kbd_qwerty.xml
index 988f9ff..988f9ff 100755..100644
--- a/core/res/res/xml-land/password_kbd_qwerty.xml
+++ b/core/res/res/xml-land/password_kbd_qwerty.xml
diff --git a/core/res/res/xml-land/password_kbd_qwerty_shifted.xml b/core/res/res/xml-land/password_kbd_qwerty_shifted.xml
index 4941946..4941946 100755..100644
--- a/core/res/res/xml-land/password_kbd_qwerty_shifted.xml
+++ b/core/res/res/xml-land/password_kbd_qwerty_shifted.xml
diff --git a/core/res/res/xml-mdpi/password_kbd_qwerty.xml b/core/res/res/xml-mdpi/password_kbd_qwerty.xml
index 265d7dc..265d7dc 100755..100644
--- a/core/res/res/xml-mdpi/password_kbd_qwerty.xml
+++ b/core/res/res/xml-mdpi/password_kbd_qwerty.xml
diff --git a/core/res/res/xml-mdpi/password_kbd_qwerty_shifted.xml b/core/res/res/xml-mdpi/password_kbd_qwerty_shifted.xml
index 7379f69..7379f69 100755..100644
--- a/core/res/res/xml-mdpi/password_kbd_qwerty_shifted.xml
+++ b/core/res/res/xml-mdpi/password_kbd_qwerty_shifted.xml
diff --git a/core/res/res/xml-xlarge/password_kbd_numeric.xml b/core/res/res/xml-xlarge/password_kbd_numeric.xml
index b2704f6..b2704f6 100755..100644
--- a/core/res/res/xml-xlarge/password_kbd_numeric.xml
+++ b/core/res/res/xml-xlarge/password_kbd_numeric.xml
diff --git a/core/res/res/xml-xlarge/password_kbd_qwerty.xml b/core/res/res/xml-xlarge/password_kbd_qwerty.xml
index 76b6019..76b6019 100755..100644
--- a/core/res/res/xml-xlarge/password_kbd_qwerty.xml
+++ b/core/res/res/xml-xlarge/password_kbd_qwerty.xml
diff --git a/core/res/res/xml-xlarge/password_kbd_qwerty_shifted.xml b/core/res/res/xml-xlarge/password_kbd_qwerty_shifted.xml
index 35c3142..35c3142 100755..100644
--- a/core/res/res/xml-xlarge/password_kbd_qwerty_shifted.xml
+++ b/core/res/res/xml-xlarge/password_kbd_qwerty_shifted.xml
diff --git a/core/res/res/xml-xlarge/password_kbd_symbols.xml b/core/res/res/xml-xlarge/password_kbd_symbols.xml
index 106dd6e..106dd6e 100755..100644
--- a/core/res/res/xml-xlarge/password_kbd_symbols.xml
+++ b/core/res/res/xml-xlarge/password_kbd_symbols.xml
diff --git a/core/res/res/xml-xlarge/password_kbd_symbols_shift.xml b/core/res/res/xml-xlarge/password_kbd_symbols_shift.xml
index 1233f78..1233f78 100755..100644
--- a/core/res/res/xml-xlarge/password_kbd_symbols_shift.xml
+++ b/core/res/res/xml-xlarge/password_kbd_symbols_shift.xml
diff --git a/core/res/res/xml/apns.xml b/core/res/res/xml/apns.xml
index 8c7245c..249b598 100644
--- a/core/res/res/xml/apns.xml
+++ b/core/res/res/xml/apns.xml
@@ -20,6 +20,6 @@
<!-- If you edit this version, also edit the version in the partner-supplied
apns-conf.xml configuration file -->
-<apns version="7">
+<apns version="8">
</apns>
diff --git a/core/res/res/xml/kg_password_kbd_numeric.xml b/core/res/res/xml/kg_password_kbd_numeric.xml
index 93b32af..93b32af 100755..100644
--- a/core/res/res/xml/kg_password_kbd_numeric.xml
+++ b/core/res/res/xml/kg_password_kbd_numeric.xml
diff --git a/core/res/res/xml/password_kbd_extension.xml b/core/res/res/xml/password_kbd_extension.xml
index e8d61fe..e8d61fe 100755..100644
--- a/core/res/res/xml/password_kbd_extension.xml
+++ b/core/res/res/xml/password_kbd_extension.xml
diff --git a/core/res/res/xml/password_kbd_numeric.xml b/core/res/res/xml/password_kbd_numeric.xml
index 7593ad8..7593ad8 100755..100644
--- a/core/res/res/xml/password_kbd_numeric.xml
+++ b/core/res/res/xml/password_kbd_numeric.xml
diff --git a/core/res/res/xml/password_kbd_qwerty.xml b/core/res/res/xml/password_kbd_qwerty.xml
index dfe581e..dfe581e 100755..100644
--- a/core/res/res/xml/password_kbd_qwerty.xml
+++ b/core/res/res/xml/password_kbd_qwerty.xml
diff --git a/core/res/res/xml/password_kbd_qwerty_shifted.xml b/core/res/res/xml/password_kbd_qwerty_shifted.xml
index 1366c58..1366c58 100755..100644
--- a/core/res/res/xml/password_kbd_qwerty_shifted.xml
+++ b/core/res/res/xml/password_kbd_qwerty_shifted.xml
diff --git a/core/res/res/xml/password_kbd_symbols.xml b/core/res/res/xml/password_kbd_symbols.xml
index 5876b0d..5876b0d 100755..100644
--- a/core/res/res/xml/password_kbd_symbols.xml
+++ b/core/res/res/xml/password_kbd_symbols.xml
diff --git a/core/res/res/xml/password_kbd_symbols_shift.xml b/core/res/res/xml/password_kbd_symbols_shift.xml
index ee83544..ee83544 100755..100644
--- a/core/res/res/xml/password_kbd_symbols_shift.xml
+++ b/core/res/res/xml/password_kbd_symbols_shift.xml
diff --git a/core/tests/ConnectivityManagerTest/assets/accesspoints.xml b/core/tests/ConnectivityManagerTest/assets/accesspoints.xml
index 5e3252c..5e3252c 100755..100644
--- a/core/tests/ConnectivityManagerTest/assets/accesspoints.xml
+++ b/core/tests/ConnectivityManagerTest/assets/accesspoints.xml
diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java
index a6057de..0461c0b 100644
--- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java
+++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java
@@ -28,6 +28,7 @@ import android.net.wifi.WifiConfiguration.AuthAlgorithm;
import android.net.wifi.WifiConfiguration.IpAssignment;
import android.net.wifi.WifiConfiguration.KeyMgmt;
import android.net.wifi.WifiConfiguration.ProxySettings;
+import android.net.wifi.WifiEnterpriseConfig;
import android.net.LinkAddress;
import android.net.LinkProperties;
import android.net.RouteInfo;
@@ -67,7 +68,6 @@ import java.util.List;
* networkprefixlength.
*/
public class AccessPointParserHelper {
- private static final String KEYSTORE_SPACE = "keystore://";
private static final String TAG = "AccessPointParserHelper";
static final int NONE = 0;
static final int WEP = 1;
@@ -212,14 +212,11 @@ public class AccessPointParserHelper {
config.allowedKeyManagement.set(KeyMgmt.WPA_EAP);
config.allowedKeyManagement.set(KeyMgmt.IEEE8021X);
// Initialize other fields.
- config.phase2.setValue("");
- config.ca_cert.setValue("");
- config.client_cert.setValue("");
- config.engine.setValue("");
- config.engine_id.setValue("");
- config.key_id.setValue("");
- config.identity.setValue("");
- config.anonymous_identity.setValue("");
+ config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.NONE);
+ config.enterpriseConfig.setCaCertificateAlias("");
+ config.enterpriseConfig.setClientCertificateAlias("");
+ config.enterpriseConfig.setIdentity("");
+ config.enterpriseConfig.setAnonymousIdentity("");
break;
default:
throw new SAXException();
@@ -246,7 +243,7 @@ public class AccessPointParserHelper {
config.preSharedKey = '"' + passwordStr + '"';
}
} else if (securityType == EAP) {
- config.password.setValue(passwordStr);
+ config.enterpriseConfig.setPassword(passwordStr);
} else {
throw new SAXException();
}
@@ -257,33 +254,46 @@ public class AccessPointParserHelper {
if (!validateEapValue(eapValue)) {
throw new SAXException();
}
- config.eap.setValue(eapValue);
+ if (eapValue.equals("TLS")) {
+ config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS);
+ } else if (eapValue.equals("TTLS")) {
+ config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TTLS);
+ } else if (eapValue.equals("PEAP")) {
+ config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.PEAP);
+ }
eap = false;
}
if (phase2) {
String phase2Value = new String(ch, start, length);
- config.phase2.setValue("auth=" + phase2Value);
+ if (phase2Value.equals("PAP")) {
+ config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.PAP);
+ } else if (phase2Value.equals("MSCHAP")) {
+ config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.MSCHAP);
+ } else if (phase2Value.equals("MSCHAPV2")) {
+ config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.MSCHAPV2);
+ } else if (phase2Value.equals("GTC")) {
+ config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.GTC);
+ }
phase2 = false;
}
if (identity) {
String identityValue = new String(ch, start, length);
- config.identity.setValue(identityValue);
+ config.enterpriseConfig.setIdentity(identityValue);
identity = false;
}
if (anonymousidentity) {
String anonyId = new String(ch, start, length);
- config.anonymous_identity.setValue(anonyId);
+ config.enterpriseConfig.setAnonymousIdentity(anonyId);
anonymousidentity = false;
}
if (cacert) {
String cacertValue = new String(ch, start, length);
- // need to install the credentail to "keystore://"
- config.ca_cert.setValue(KEYSTORE_SPACE);
+ config.enterpriseConfig.setCaCertificateAlias(cacertValue);
cacert = false;
}
if (usercert) {
String usercertValue = new String(ch, start, length);
- config.client_cert.setValue(KEYSTORE_SPACE);
+ config.enterpriseConfig.setClientCertificateAlias(usercertValue);
usercert = false;
}
if (ip) {
diff --git a/core/tests/coretests/src/android/content/pm/AppCacheTest.java b/core/tests/coretests/src/android/content/pm/AppCacheTest.java
index aae55e8..aae55e8 100755..100644
--- a/core/tests/coretests/src/android/content/pm/AppCacheTest.java
+++ b/core/tests/coretests/src/android/content/pm/AppCacheTest.java
diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
index 04f8009..04f8009 100755..100644
--- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
+++ b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
diff --git a/core/tests/coretests/src/android/net/http/SslCertificateTest.java b/core/tests/coretests/src/android/net/http/SslCertificateTest.java
index 147816b..6a30c6c 100644
--- a/core/tests/coretests/src/android/net/http/SslCertificateTest.java
+++ b/core/tests/coretests/src/android/net/http/SslCertificateTest.java
@@ -45,11 +45,70 @@ public class SslCertificateTest extends TestCase {
@LargeTest
public void testSslCertificateWithEmptyIssuer() throws Exception {
- CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
- X509Certificate x509Certificate = (X509Certificate)
- certificateFactory.generateCertificate(new ByteArrayInputStream(Issue1597Certificate.getBytes()));
- assertEquals(x509Certificate.getIssuerDN().getName(), "");
+ X509Certificate x509Certificate = generateCertificate(Issue1597Certificate);
+ assertEquals("", x509Certificate.getSubjectDN().getName());
SslCertificate sslCertificate = new SslCertificate(x509Certificate);
- assertEquals(sslCertificate.getIssuedBy().getDName(), "");
+ assertEquals("", sslCertificate.getIssuedBy().getDName());
}
+
+ /**
+ * Problematic certificate from Issue 41662
+ * http://code.google.com/p/android/issues/detail?id=41662
+ */
+ private static final String Issue41662Certificate =
+ "-----BEGIN CERTIFICATE-----\n"+
+ "MIIG6jCCBdKgAwIBAgIESPx/LDANBgkqhkiG9w0BAQUFADCBrjESMBAGCgmSJomT\n"+
+ "8ixkARkWAnJzMRUwEwYKCZImiZPyLGQBGRYFcG9zdGExEjAQBgoJkiaJk/IsZAEZ\n"+
+ "FgJjYTEWMBQGA1UEAxMNQ29uZmlndXJhdGlvbjERMA8GA1UEAxMIU2VydmljZXMx\n"+
+ "HDAaBgNVBAMTE1B1YmxpYyBLZXkgU2VydmljZXMxDDAKBgNVBAMTA0FJQTEWMBQG\n"+
+ "A1UEAxMNUG9zdGEgQ0EgUm9vdDAeFw0wODEwMjAxNDExMzBaFw0yODEwMTQyMjAw\n"+
+ "MDBaMIGrMRIwEAYKCZImiZPyLGQBGRYCcnMxFTATBgoJkiaJk/IsZAEZFgVwb3N0\n"+
+ "YTESMBAGCgmSJomT8ixkARkWAmNhMRYwFAYDVQQDEw1Db25maWd1cmF0aW9uMREw\n"+
+ "DwYDVQQDEwhTZXJ2aWNlczEcMBoGA1UEAxMTUHVibGljIEtleSBTZXJ2aWNlczEM\n"+
+ "MAoGA1UEAxMDQUlBMRMwEQYDVQQDEwpQb3N0YSBDQSAxMIIBIjANBgkqhkiG9w0B\n"+
+ "AQEFAAOCAQ8AMIIBCgKCAQEAl5msW5MdLW/2aDlezrjU3jW58MKrcMPHs2szlGdL\n"+
+ "nsAcSyYFF1JbyA8iuqLp7mhvcTz9m4jK82XBz/1mPq8wJMU9ekGnLhgbKLGKXRBA\n"+
+ "sY9wzCvwpweQV6ui4vr2eOkS1j9Mk7ikatH8tNiIzkNrTj3npDpZv1w4G37iwtpb\n"+
+ "yjg+lkNIDY2nWV9roBsAZM8Lvbyi4vxP41YEQZ3hxaGGG0/RKHbugvGatgckxfin\n"+
+ "4gpFG2mDhS9uafGgqnLHLwpxgBbi3g6+2TsxOKatTxwxx9/4MND1GjhxKTjDNYPl\n"+
+ "5JHUvr9fcvQMxP21/jbO4EsCWG+F38R90kT37hFL3l1qiQIDAQABo4IDDzCCAwsw\n"+
+ "DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgcwGA1UdIASBxDCBwTCB\n"+
+ "vgYLKwYBBAH6OAoyAQEwga4wMAYIKwYBBQUHAgEWJGh0dHA6Ly93d3cuY2EucG9z\n"+
+ "dGEucnMvZG9rdW1lbnRhY2lqYTB6BggrBgEFBQcCAjBuGmxPdm8gamUgZWxla3Ry\n"+
+ "b25za2kgc2VydGlmaWthdCBpemRhdmFja29nIChwcm9kdWtjaW9ub2cpIENBIHNl\n"+
+ "cnZlcmEgU2VydGlmaWthY2lvbm9nIHRlbGEgUG9zdGU6ICJQb3N0YSBDQSAxIi4w\n"+
+ "ggG8BgNVHR8EggGzMIIBrzCByaCBxqCBw6SBwDCBvTESMBAGCgmSJomT8ixkARkW\n"+
+ "AnJzMRUwEwYKCZImiZPyLGQBGRYFcG9zdGExEjAQBgoJkiaJk/IsZAEZFgJjYTEW\n"+
+ "MBQGA1UEAxMNQ29uZmlndXJhdGlvbjERMA8GA1UEAxMIU2VydmljZXMxHDAaBgNV\n"+
+ "BAMTE1B1YmxpYyBLZXkgU2VydmljZXMxDDAKBgNVBAMTA0FJQTEWMBQGA1UEAxMN\n"+
+ "UG9zdGEgQ0EgUm9vdDENMAsGA1UEAxMEQ1JMMTCB4KCB3aCB2oaBo2xkYXA6Ly9s\n"+
+ "ZGFwLmNhLnBvc3RhLnJzL2NuPVBvc3RhJTIwQ0ElMjBSb290LGNuPUFJQSxjbj1Q\n"+
+ "dWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxjbj1TZXJ2aWNlcyxjbj1Db25maWd1cmF0\n"+
+ "aW9uLGRjPWNhLGRjPXBvc3RhLGRjPXJzP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxp\n"+
+ "c3QlM0JiaW5hcnmGMmh0dHA6Ly9zZXJ0aWZpa2F0aS5jYS5wb3N0YS5ycy9jcmwv\n"+
+ "UG9zdGFDQVJvb3QuY3JsMB8GA1UdIwQYMBaAFPLLjeI17xBDxNp7yvrriQOhIq+4\n"+
+ "MB0GA1UdDgQWBBQuZ6cm1uhncOeq+pAsMLzXYWUfhjAZBgkqhkiG9n0HQQAEDDAK\n"+
+ "GwRWNy4xAwIAgTANBgkqhkiG9w0BAQUFAAOCAQEAjpmoaebsvfjgwgCYArou/s8k\n"+
+ "Tr50TUdcJYxAYmCFQp531E1F+qUCWM/7bZApqByR3+EUz8goI5O2Cp/6ISxTR1HC\n"+
+ "Dn71ESg7/c8Bs2Obx0LGYPnlRPvw7LH31dYXpj4EMNAamhOfBXgY2htXHCd7daIe\n"+
+ "thvNkqWGDzmcoaGw/2BMNadlYkdXxudDBaiPDFm27yR7fPRibjxwkQVknzFezX/y\n"+
+ "46j+20LoGJ/IpneT209XzytiaqtZBy3yqz2qImVDqvn5doHw63LOUqt8vfDS1sbd\n"+
+ "zi3acAmPK1nERdCMJYJEEGNiGbkbw2cghwLw/4eYGXlj1VLXD3GU42uBr8QftA==\n"+
+ "-----END CERTIFICATE-----\n";
+
+ @LargeTest
+ public void testSslCertificateWithMultipleCN() throws Exception {
+ X509Certificate x509Certificate = generateCertificate(Issue41662Certificate);
+ String dn = x509Certificate.getSubjectDN().getName();
+ assertTrue(dn, dn.contains("Posta CA 1"));
+ assertTrue(dn, dn.contains("Configuration"));
+ SslCertificate sslCertificate = new SslCertificate(x509Certificate);
+ assertEquals(dn, "Posta CA 1", sslCertificate.getIssuedTo().getCName());
+ }
+
+ private static X509Certificate generateCertificate(String pem) throws Exception {
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+ return (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(pem.getBytes()));
+ }
+
}
diff --git a/core/tests/coretests/src/android/os/storage/AsecTests.java b/core/tests/coretests/src/android/os/storage/AsecTests.java
index abb8eae..abb8eae 100755..100644
--- a/core/tests/coretests/src/android/os/storage/AsecTests.java
+++ b/core/tests/coretests/src/android/os/storage/AsecTests.java
diff --git a/core/tests/coretests/src/android/text/format/DateUtilsTest.java b/core/tests/coretests/src/android/text/format/DateUtilsTest.java
index cf42bb1..c5f6236 100644
--- a/core/tests/coretests/src/android/text/format/DateUtilsTest.java
+++ b/core/tests/coretests/src/android/text/format/DateUtilsTest.java
@@ -21,8 +21,9 @@ import android.test.suitebuilder.annotation.SmallTest;
import junit.framework.TestCase;
public class DateUtilsTest extends TestCase {
+ // This test is not in CTS because formatDuration is @hidden.
@SmallTest
- public void testFormatDurationSeconds() throws Exception {
+ public void test_formatDuration_seconds() throws Exception {
assertEquals("0 seconds", DateUtils.formatDuration(0));
assertEquals("0 seconds", DateUtils.formatDuration(1));
assertEquals("0 seconds", DateUtils.formatDuration(499));
@@ -31,16 +32,18 @@ public class DateUtilsTest extends TestCase {
assertEquals("2 seconds", DateUtils.formatDuration(1500));
}
+ // This test is not in CTS because formatDuration is @hidden.
@SmallTest
- public void testFormatDurationMinutes() throws Exception {
+ public void test_formatDuration_Minutes() throws Exception {
assertEquals("59 seconds", DateUtils.formatDuration(59000));
assertEquals("60 seconds", DateUtils.formatDuration(59500));
assertEquals("1 minute", DateUtils.formatDuration(60000));
assertEquals("2 minutes", DateUtils.formatDuration(120000));
}
+ // This test is not in CTS because formatDuration is @hidden.
@SmallTest
- public void testFormatDurationHours() throws Exception {
+ public void test_formatDuration_Hours() throws Exception {
assertEquals("59 minutes", DateUtils.formatDuration(3540000));
assertEquals("1 hour", DateUtils.formatDuration(3600000));
assertEquals("48 hours", DateUtils.formatDuration(172800000));
diff --git a/core/tests/coretests/src/android/util/PatternsTest.java b/core/tests/coretests/src/android/util/PatternsTest.java
index 9519b9f..ebdbb0e 100644
--- a/core/tests/coretests/src/android/util/PatternsTest.java
+++ b/core/tests/coretests/src/android/util/PatternsTest.java
@@ -156,6 +156,8 @@ public class PatternsTest extends TestCase {
"Me: 16505551212 this\n",
"Me: 6505551212 this\n",
"Me: 5551212 this\n",
+ "Me: 2211 this\n",
+ "Me: 112 this\n",
"Me: 1-650-555-1212 this\n",
"Me: (650) 555-1212 this\n",
diff --git a/core/tests/coretests/src/android/webkit/WebkitTest.java b/core/tests/coretests/src/android/webkit/WebkitTest.java
index 17b4088..4685e3c 100644
--- a/core/tests/coretests/src/android/webkit/WebkitTest.java
+++ b/core/tests/coretests/src/android/webkit/WebkitTest.java
@@ -52,7 +52,7 @@ public class WebkitTest extends AndroidTestCase {
date.setTime(time);
c.setTime(date);
index = dateSorter.getIndex(time);
- Log.i(LOGTAG, "time: " + DateFormat.format("yyyy/MM/dd kk:mm:ss", c).toString() +
+ Log.i(LOGTAG, "time: " + DateFormat.format("yyyy/MM/dd HH:mm:ss", c).toString() +
" " + index + " " + dateSorter.getLabel(index));
}
}
diff --git a/core/tests/coretests/src/android/widget/listview/focus/ListWithEditTextHeaderTest.java b/core/tests/coretests/src/android/widget/listview/focus/ListWithEditTextHeaderTest.java
index b9051e9..532b9d1 100644
--- a/core/tests/coretests/src/android/widget/listview/focus/ListWithEditTextHeaderTest.java
+++ b/core/tests/coretests/src/android/widget/listview/focus/ListWithEditTextHeaderTest.java
@@ -22,6 +22,7 @@ import android.test.TouchUtils;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.MediumTest;
import android.view.KeyEvent;
+import android.view.View;
import android.widget.AbsListView;
import android.widget.ListView;
import android.widget.listview.ListWithEditTextHeader;
@@ -63,4 +64,22 @@ public class ListWithEditTextHeaderTest extends ActivityInstrumentationTestCase2
assertTrue("header does not have focus", mListView.getChildAt(0).isFocused());
assertEquals("something is selected", AbsListView.INVALID_POSITION, mListView.getSelectedItemPosition());
}
+
+ @LargeTest
+ public void testScrollingDoesNotDetachHeaderViewFromWindow() {
+ View header = mListView.getChildAt(0);
+ assertNotNull("header is not attached to a window (?!)", header.getWindowToken());
+
+ // Scroll header off the screen and back onto the screen
+ int numItemsOnScreen = mListView.getChildCount();
+ for (int i = 0; i < numItemsOnScreen; i++) {
+ sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
+ }
+ for (int i = 0; i < numItemsOnScreen; i++) {
+ sendKeys(KeyEvent.KEYCODE_DPAD_UP);
+ }
+
+ // Make sure the header was not accidentally left detached from its window
+ assertNotNull("header has lost its window", header.getWindowToken());
+ }
}